見出し画像

アプリバッジ機能開発の舞台裏

REALITYのiOSアプリのアイコンにチャットの未読数に応じたバッジが表示されるようになりました🎉🎉🎉

アプリバッジ機能とは?

アプリバッジ機能は、チャットの未読数に応じて端末のホーム画面上のアプリアイコンにバッジ+数字を表示する機能です。
2019年の1on1チャット機能実装以来、地道にチャット機能の改善を続けてきましたが、本機能もその一貫となっています。
アプリバッジが点灯していることをきっかけにアプリを開き、チャットや配信/視聴などのコミュニケーションが活性化することを望んで企画しました。

画像2

iOSの設定アプリによるバッジの表示/非表示について

仕様を策定する途中でiOSの設定アプリでの通知の設定の詳細についてまとめました。

REALITYではチャットが送信されると、プッシュ通知とバッジでお知らせします。
「通知を許可」の項目をオフにすると、プッシュ通知とバッジの両方が非表示になります。
プッシュ通知とバッジはそれぞれ個別で表示/非表示が設定可能です。

例えば、バッジのみをオフにすると、プッシュ通知は表示されるがバッジは表示されないという動作になります

画像1

今回の開発では、REALITY内の通知設定 x バナー表示の設定 x バッジの設定の3箇所それぞれon/offの合計8通りについて、仕様を策定してから実装しました。

OneSignalを使ったバッジ数のインクリメント

アプリへの通知はOneSignalというサービスを経由して端末へと送信されます。

1人のユーザに対して通知を送る場合、サーバ上のデータから今未読のメッセージがいくつあるのかを計算して通知を行っています。
しかし、グループチャットなどのような1つのメッセージにつき複数のユーザのバッジ数を更新しなければならない場合、ユーザごとに異なるバッジ数を設定しなければなりません。
そのためには、ユーザ1人につき1回OneSignalのサービスに通信を行う必要があるのです。

つまり、グループチャットに100人参加していたとしたら、誰か1人がそのチャットで発言を行うたびに99回の通信がOneSignalとの間で発生してしまうのです!これではサーバが死んでしまう!

そこで、複数のユーザのバッジ数を更新しなければならないときは、OneSignalのバッジのオプションで"Increase"を指定して、通知を送信しています。
各ユーザのバッジ数をそれぞれ指定する代わりにバッジの数を1ずつ加算することで、OneSignalとの間の通信数を1つのメッセージにつき1回に抑えつつ、新着メッセージの数とアプリバッジの間に整合性をとっています。

{
	"app_id": "xxxxxx",
	〜〜中略〜〜
	"ios_badgeType": "Increase",
	"ios_badgeCount": 1
}

本来、APNsを使用したiOSアプリのアプリバッジ変更では、バッジの数を絶対値で指定しなければならず、バッジの加算操作は実装されていません。
しかし、OneSignal側でiOS SDKを通じて端末上のバッジ数が管理されるので、1ずつ加算を行うという操作が可能になっています。

一緒に新機能をつくりませんか?

チャットや配信/視聴などのコミュニケーションが活性化させる新機能をつくる仲間を募集しています。興味を持って頂けた方はぜひ下記をご参照ください!