当通知到达应用程序时,不会对徽章编号进行任何操作。我在功能上设置了背景模式。
还有另一个问题。当应用程序为后台模式时,不会调用此方法。
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无法回答。我知道。问题在于,即使应用程序收到了推送通知,徽章编号也不会更新。
答案 0 :(得分:3)
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中的old answer。
注意:didReceiveRemoteNotification从iOS10 +开始不推荐使用,请参见example