收到通知时显示徽章编号



当通知到达应用程序时,不会对徽章编号执行任何操作。我在功能上设置了后台模式。

还有一个问题。当应用处于后台模式时,不会调用此 metod。

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print("Push notification received2: (userInfo)")
completionHandler(UIBackgroundFetchResult.noData)
}

PS:UIApplication.shared.applicationIconBadgeNumber 不是答案。我知道那件事。问题甚至在于应用程序收到的推送通知,徽章编号也不会更新。

APNS 不支持徽章的增量操作。 生成的每个推送通知都应设置当前值

因此,我们需要在某个地方有一个服务/服务器来跟踪每个用户的徽章应该是什么

例如,在有效负载中添加badge个键,获取徽章计数并递增计数,然后是示例。

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
var currentBadgeNumber: Int = application.applicationIconBadgeNumber
currentBadgeNumber += Int(userInfo["badge"] as? String ?? "0")!
application.applicationIconBadgeNumber = currentBadgeNumber
completionHandler(UIBackgroundFetchResult.noData)
}

例如有效负载,请参阅 SO 中的旧答案。

注意:didReceiveRemoteNotification 从 iOS10+ 开始被弃用,例如请参阅此内容

最新更新