私がかなり苦戦したので書きます。こう言う質問は結構あったのに記事はなかったのでないなら書かないとと意味不明な使命感に狩られて書いてます。
只今とても元気がないので乱雑な記事になってしまったらごめんなさい。
いつか気が向いた時にでも書き直します。
さて、早速ですが、アイコンのBageや通知センターの表示で悩んでいる人はきっと少なからずいるはず。
そしてどこまで出来るの?とちょっと前の私のように。
で出来ることですが、パターンで書いた方がいいと思ったのでパターン書きします。
詳細はそれらパターン下に書いて行きます。
アプリ開いたらプッシュ通知のバッジ、通知センターの表示全削除
勝手な偏見ですがほとんどの方がこのパターンだと思っています…。やることとしてはあのおなじみUIApplication.shared.applicationIconBadgeNumber = 0を起動時に通るところで書けばいいです。
通知センターの表示はそのままアプリバッジ削除したい。(通知センターどれか選択しても読んでいないものは通知センターから消えない)
これについてですが最初からバッジをつけないと言う方法ならできます。方法としてはサーバーから送るバッジの数を-1にして送ってもらう感じです。ローカル通知を自分で作成してでしか試していませんが出来るはずです。ただこれ一生バッジつきません。
通知センター通知センターの表示はそのままアプリバッジつけたい。(通知センターどれか選択しても読んでいないものは通知センターから消えない)
これもできます。しかしここでバッジはアプリ開いたタイミングで消すことはできません。そうすると通知センターの表示は消えます。これに関してバッジの数の処理をしなければいい。またはプッシュ通知の情報(通知センターの内容、個数)取得してバッジの数変更。なくなった時に0にするでもいいのかと思います。
通知センターの個数とバッジの個数を揃えたい。
これも出来るはずです。しかしサーバー側アプリ側でのタッグを組む必要があります。方法として考えるのはまずアプリ開いた時に通知センター表示の個数取得サーバーに転送、サーバーは新しいプッシュ通知送る時にそれを足して送るとか。それに加えてアプリがフォアグラウンドにあるときにプッシュ通知が来た時もメソッドで拾って調整すると言う感じかと思います。
任意の時にバッジ、通知センター表示全消去それまでは通知センターは開いたものしか消去しない。
これは普通にプッシュ通知送ってもらいもちろんカウント1以上。でその任意で何か行ったことがあればいつもとおなじみのもので削除する感じかと思います。
バッジのみ表示
この場合はもはやプッシュ通知と言うよりも中の処理に応じてバッジの数を変える方法で行っているのが多いのではないのかなーと思っています。
プッシュ通知来たタイミングでそのあとにローカル通知を送る
これはプッシュ通知来たタイミングでローカル通知つくて送る。あまりしない方法かと思いますが一応書いておきます。
最後に
おそらく上記のパターンで行っている以外にはないのではないかと思っています。他にもこんな方法あるよと言う方は教えていただければ嬉しい限りです。で結局大事なこと。他にもありますが…
・UIApplication.shared.applicationIconBadgeNumber = 0 又は マイナス
にした時点で通知センター表示は全消去
・通知センターの表示を消したくないのならサーバーから送ってもらうバッジ数を-1にしてもらうこと。ただしこれなアイコンにバッジがつきません
・どこでバッジを消すか?どこで通知センターの表示を全消去するか、通知センターは全消去するかタップのもののみ消していくかを考える必要あり。
最後にローカル通知の記述わかりやすかったurlを載せて終了とします。https://stackoverflow.com/questions/42688760/local-and-push-notifications-in-ios-version-compatible/42688966
あともうちょっとだけやっぱり書く。
ちなみに。私はそのような経験なかったのですが、バッジが0にならない通知センターから消えないと言うようなバグがあるらしい。バッジが消えないに関しては一回マイナスにしてから0にするといいよとか書いてありました。書いてあったurl今パッと見れないので又見つけたらここに追記しておきます。
参考、あ!いいかもと思うurlの羅列
https://stackoverflow.com/questions/45732146/how-to-get-the-push-notifications-displayed-in-the-notification-center