Недавно настроил уведомления в своем приложении, могу отправлять через php и не парься, все работает нормально.
С прошлой недели я пытаюсь выяснить, приходит ли push-уведомление на телефон или нет.
Я могу знать, когда кто-то нажимает на него, но если человек не нажимает на него и предпочитает открывать приложение, оно не работает.
Разве нет простой функции, которая может сказать мне, было ли уведомление только что получено приложением?
В моем AppDelegate.swift:
import UIKit
import UserNotifications
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
...
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Check if launched from notification
if let notification = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? [String: AnyObject] {
//print(notification)
window?.rootViewController?.present(ViewController(), animated: true, completion: nil)
}
else{
//print("ici ?")
registerForRemoteNotification()
}
return true
}
...
//Called when a notification is delivered to a foreground app.
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
completionHandler([.alert, .badge, .sound])
}
//Called to let your app know which action was selected by the user for a given notification.
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
completionHandler()
}
...
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
**print("here ?")**
switch((application.applicationState)){
case UIApplicationState.inactive:
print("Inactive")
//Show the view with the content of the push
completionHandler(.newData)
case UIApplicationState.background:
print("Background")
//Refresh the local model
completionHandler(.newData)
default:
print("Active")
//Show an in-app banner
completionHandler(.newData)
break
}
}
}
Проблема: я никогда не передаю didReceiveRemoteNotification :/ Никогда не отображается «печать здесь».
У меня ошибка в этой строке:
Метод экземпляра application(application:didReceiveRemoteNotification:fetchCompletionHandler:) почти соответствует необязательному требованию application(_:didReceiveRemoteNotification:fetchCompletionHandler:) протокола UIApplicationDelegate.
Но я не понимаю :/
У вас есть идея?
Спасибо за вашу помощь ^^
didFinishLaunchingWithOptions
, если приложение было завершено, либо вdidReceiveRemoteNotification
, если приложение было в фоновом режиме. 08.12.2016func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {}
иfunc application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {}
? Мы должны точно знать, зарегистрировано ли приложение для удаленных уведомлений или нет. 08.12.2016didReceiveRemoteNotification
вызывается в двух случаях: 1. приложение находится в фоновом режиме, и пользователь нажимает на push-уведомление 2. приложение активно и принимается «тихий push-уведомление» 08.12.2016