在AppDelegate
内,我只是更新applicationIconBadgeNumber
:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
application.applicationIconBadgeNumber += 1
}
当应用程序连接到Xcode并处于调试器模式时,一切正常。但是就在我从Xcode中将其插入后,通知到达了,但徽章没有更新。应用程序处于后台模式。
为什么?我的方法有什么问题?请给我一个建议
答案 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)
我发现这篇文章对于在后台管理通知非常有帮助,基本上,您必须将调用与完成处理程序一起使用。
答案 3 :(得分:-1)
您的messagingManager
是可选的。您应该检查它不是nil
。如果为nil
,则不会触发appDidReciveMessage()
函数