我几天来一直在努力解决这个问题,我看过每一篇关于这个问题的帖子,没有任何作用。
我正在使用FCM(Firebase云消息传递)。 FCM在前台时直接与应用程序对话,但当应用程序处于后台时,它将使用APNS。
我试图通过调用推送通知的委托功能中的方法,每当应用程序收到通知时调用方法
我有这两个委托函数:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)
和
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
根据苹果文档,它不会在后台调用。
我也有这个功能,我相信应该在后台调用,但事实并非如此。
func application(_ application: UIApplication,didReceiveRemoteNotification userInfo: [AnyHashable: Any],fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
我在ViewController
中拥有所有这些功能在后台模式下,我收到横幅通知,但没有调用任何委托。有没有办法让它们中的任何一个在后台工作,如果不是我该怎么办?
此外,每当我在应用程序处于后台时发送有效负载时,我也会在日志中收到此错误:<FIRMessaging/WARNING> FIRMessaging receiving notification in invalid state 2
。
这是我使用postmate发送的有效负载:
{
"priority":"high",
"notification":{
"sound": "default",
"badge": "1",
"title":"mytitle",
"body":"mybody",
"message":"Hello"
},
"content_available":true,
"to" : "/topics/myTopic"
}
我已经在功能中启用了推送通知,并在功能下以后台模式检查了推送通知。
我使用Xcode 8并且已经在iphone 6 iOS 10.0.2上进行了测试
答案 0 :(得分:0)
协议只能有1个代表。
在这种情况下,我使APPDelegate和ViewController符合UIApplicationDelegate。并且只调用APPDelegate中的委托函数。这就是为什么没有调用ViewController中的那个。
解决方案只是将didReceiveRemoteNotification
放在AppDelegate中。