前提
2024年7月のお話。
アプリ側の話ではなく、メッセージを送るサーバ側の話。
ここを見てみる人には説明不要だと思いますが用語解説。
- notificationとかmessage...アプリに送る通知のことで、スマホ端末ではアプリから出ているように見える通知で、webブラウザでは右上に出てくる通知のことで、つまり通知メッセージだということです(小泉構文で恐縮ですがそうとしか言えないんです!)
- device, デバイスとは端末にインストールされたアプリのこと
- token アプリがFirebaseから取得する通知を送るために必要なトークンのことでアプリからのみ取得可能、サーバはこれをアプリから受け取ってアプリに通知をぶん投げるという仕組み。こんな感じの文字列
emlm8ZGtRDaZxxxxxxxx:APA91bHwX9IklxxBqBX9cLowxx2M2mcU_O71-XADunCq6PZzMSW1hF5L5BPTtUygAf2txAxx
- token アプリがFirebaseから取得する通知を送るために必要なトークンのことでアプリからのみ取得可能、サーバはこれをアプリから受け取ってアプリに通知をぶん投げるという仕組み。こんな感じの文字列
- group, グループとはデバイスグループのこと
- Firebase Admin SDKは、一言で言えばFirebaseにおけるバックエンド的な操作を各種言語から行えるようにしたSDKのこと
実現したいユースケースの説明
たとえばメールが届いたよは個別の通知で、一つのアプリ(=token)に対してメッセージを送ればいいけれど、内科の先生で勤務中の人!といった一斉発報的に複数のデバイスに対して通知を送りたいときにどうするかの話を捌くのに現状3つの方法がある。
A. 1件ずつ全デバイスに対して送信する
B. バッチ的に複数のトークンを1回のリクエストで送信する、ただし500件がリミット
C. デバイスグループにトークンを登録してバーンと送信する
D. topicをアプリに購読してもらう
それぞれn個の端末に対してのリクエスト数は下記の通り。
A. n回
B. n/500 で余がある場合は +1回
C. 2回
D. 1回・・だけど今回はアプリ側から購読というスタイルでは細かな条件(たとえば勤務中とか)に対応できない
実装するとき選ぶなら当然選択肢の3。トランザクション管理とかクッソだるいことしたくない。
3は下記のリクエスツで構成される
- グループを作成してtokenを紐づける。このときtoken登録数にリミットは無いように(ドキュメント上では)みえる。
- notification発射
だがこのめちゃ便利な仕組みがFirebase Admin SDKでサポートされていない・・ような?という宙ぶらりんな状態を少し追った。
なぜなのか
かつてはあったぽいんですよ。
HTTPのAPIと、SDKのこの機能の組み合わせで。
でも今は後者がobsoleted。
obsされた理由はおそらく HTTP v1 からommit された機能だから。
https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages
レガシーFCM HTTP APIの期限が先月(2024年6月)なので、今はこの組み合わせでも利用できなくなっているかもしれない。
どうするのか
Bの案使うしかねないなーという結論、つまんないしすごくださいたま。