実際、iOS 10では、リモート通知がdidReceiveRemoteNotification
AppDelegateのMethodを自動的に呼び出します。
バックグラウンドでバッジ数を更新する方法は2つあります。
現在のアプリでもこれを実行しました。通知サービス拡張機能も必要ありません。
1番目の方法:
ペイロードとともにAPSバッジキーをAPNに送信します。
これにより、バッジのペイロードの整数値に従ってバッジ数が更新されます。例:
{
"aps": {
"content-available": 1,
"alert": "Hallo, this is a Test.",
"badge": 2,
"sound": default
}
}
2番目の方法:
application.applicationStateを切り替えて、applicationStateがにあるときにバッジカウントを更新できます.background
。ただし、APN exに送信するときは、通知ペイロードにバッジキーパラメータを設定しないように注意する必要があります。
{
"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
}