didReceiveRemoteNotification:通知到达且应用程序处于后台/挂起模式后不调用

时间:2018-11-16 06:58:23

标签: ios swift push-notification

AppDelegate内,我只是更新applicationIconBadgeNumber

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
    application.applicationIconBadgeNumber += 1
}

当应用程序连接到Xcode并处于调试器模式时,一切正常。但是就在我从Xcode中将其插入后,通知到达了,但徽章没有更新。应用程序处于后台模式

为什么?我的方法有什么问题?请给我一个建议

4 个答案:

答案 0 :(得分:4)

推送通知由iOS处理,而不是由您的应用处理,因此您无法在收到推送通知时更改应用程序徽章。 您可以在推送通知的有效负载中发送徽章编号,

有效载荷可能看起来像这样:

{
    "aps" : {
        "alert" : "Notification REceived",
        "badge" : 1
    }
}

答案 1 :(得分:0)

您需要使用didReceiveRemoteNotification委托方法的fetchCompletionHandler签入UNUserNotificationCenter

func application(
  _ application: UIApplication,
  didReceiveRemoteNotification userInfo: [AnyHashable : Any],
  fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

  messagingManager?.appDidReceiveMessage(userInfo)
}

答案 2 :(得分:0)

我发现这篇文章对于在后台管理通知非常有帮助,基本上,您必须将调用与完成处理程序一起使用。

didReceiveRemoteNotification when in background

答案 3 :(得分:-1)

您的messagingManager是可选的。您应该检查它不是nil。如果为nil,则不会触发appDidReciveMessage()函数