实际上,在 iOS 10 中,远程通知会自动调用didReceiveRemoteNotification
AppDelegate 中的方法。
您有 2 种方法可以在后台更新徽章计数。
我也为我当前的应用程序做了这个。您也不需要通知服务扩展。
第一种方式:
将带有有效负载的 APS 徽章密钥发送到 APN。
这将根据您的徽章有效负载中的整数值更新徽章计数。前任:
// Payload for remote Notification to APN
{
"aps": {
"content-available": 1,
"alert": "Hallo, this is a Test.",
"badge": 2, // This is your Int which will appear as badge number,
"sound": default
}
}
第二种方式:
您可以切换您的 application.applicationState 并在 applicationState 位于时更新您的徽章计数.background
。但是当发送到 APN ex 时,您必须注意不要在通知负载中设置徽章密钥参数
// Payload to APN as silent push notification
{
"aps": {
"content-available": 1
}
}
根据应用程序状态处理徽章更新:
这是我在 APN 的有效负载中没有徽章密钥的徽章计数更新的工作代码。
func application(_ application: UIApplication, didReceiveRemoteNotification
userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print("APN recieved")
// print(userInfo)
let state = application.applicationState
switch state {
case .inactive:
print("Inactive")
case .background:
print("Background")
// update badge count here
application.applicationIconBadgeNumber = application.applicationIconBadgeNumber + 1
case .active:
print("Active")
}
}
重置徽章计数:
当您的应用恢复活动状态时,不要忘记重置您的徽章计数。
func applicationDidBecomeActive(_ application: UIApplication) {
// reset badge count
application.applicationIconBadgeNumber = 0
}