实际上,在iOS 10中,远程通知会自动调用您的AppDelegate中的didReceiveRemoteNotification
方法。
您有两种方法可以在后台更新标记计数。
我也为我的当前应用程序完成了这项工作。 您不需要使用通知服务扩展。
第一种方式:
将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
}
}
第二种方法:
当应用程序处于.background
状态时,您可以切换应用程序的applicationState
并更新您的徽章计数。但是,在向APN发送通知负载时,请注意不要设置徽章键参数。
// 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")
let state = application.applicationState
switch state {
case .inactive:
print("Inactive")
case .background:
print("Background")
application.applicationIconBadgeNumber = application.applicationIconBadgeNumber + 1
case .active:
print("Active")
}
}
重置徽章计数:
当您的应用程序恢复到活动状态时,请不要忘记重置您的徽章计数。
func applicationDidBecomeActive(_ application: UIApplication) {
application.applicationIconBadgeNumber = 0
}