当通知到达应用程序时,徽章编号上没有任何操作。我在Capabilities上设置了背景模式。
还有另一个问题。当app是后台模式时,不会调用此方法。
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中的old answer。
注意:从iOS10 +开始不推荐使用didReceiveRemoteNotification,请参阅example