概要
以前から利用していたFirebaseのCloud MessagingAPI(レガシー)の期限が迫ってきました。
で、Firebase Cloud Messaging API(V1)に移行が必要なのですが、これをすると困ることがあります。
それは、いままでDebug用のアプリメニューから、Push通知テストを試すコマンドをSlackに送る仕組みを作っていたのですが、その仕組みがそのままでは使えなくなりますし、面倒になります。
ので、その対応の記事です。
何が面倒になる?
レガシーの場合は、Pushのテストをするときに、HttpヘッダーのAuthorization
に固定のキーを入れておけばよかったのですが、これからは、アクセストークンに変わります。(セキュリティが強化されました)
アクセストークンは、秘密鍵を使って生成できますが、それをアプリに入れることはできません。
レガシーの頃の固定値のようにDebugアプリにそのまま仕込むことはできません。
詳しくは、以下の移行の方法を確認しましょう。
https://firebase.google.com/docs/cloud-messaging/migrate-v1?hl=ja
今後はどうする?
OAuth 2.0 Playgroundを使えば良いです。
https://developers.google.com/oauthplayground/
こうする
-
OAuth 2.0 Playgroundで「Cloud Messaging API v1」 を選択し、「Authorize APIs」ボタンを押下します
ここで、開発で利用しているアカウントで認可しときます。
-
次に 「Exchange authorization code for tokens」 ボタンを押下します。押下するとAccess Tokenが設定されます
-
Request URIに入力します
Request URI :
https://fcm.googleapis.com/v1/projects/プロジェクトID/messages:send
HTTP Method :POST
Request URIのプロジェクトIDは、Firebaseコンソールの「全般」にあるプロジェクトIDのことです。
「Enter Request Body」をタップして、PushテストするためのJSONを入力します。
たとえば、以下です。
ここでの<FCM_TOKEN> は、端末のトークンを指定します。そうすれば自分の端末だけにしかPushが届きません。{ "message": { "token": "<FCM_TOKEN>", "data": { "body": "You Got A Notification", "title": "You Got A Notification", } } }
つまり、Androidの実装の
FirebaseMessaging.getInstance().token
で取得成功した時の結果のことです。
レガシーでは"to"
で指定していた値です。ヘッダーで指定するアクセストークンではないので注意です。で、最後に 「Send the Request」 ボタンを押下するとPushが送られます。
(ちなみにレガシーでもこの方法でテストできます)
おまけ
2で取得したアクセストークンを使えば、curl
コマンドでも当然、Push通知を送ることができます。
これをデバッグメニューでslackに送り、アクセストークンを入力してcurlで送る運用にすれば、少しステップは増えるけど、今までとそんなに変わらずにテストができそうです。(アクセストークンを取得できるアカウントがないとできませんが...)
$ curl -X POST \
--header "Authorization: Bearer <アクセストークン>" \
--header "Content-Type: application/json" \
https://fcm.googleapis.com/v1/projects/<プロジェクトID>/messages:send -d " \
{ \"message\": {\"token\":\"<FCM_TOKEN>\",
\"data\":{\"body\": \"You Got A Notification\", \"title\": \"You Got A Notification\"}}}"