Closed6

Androidアプリ の PUSH 通知を FCM HTTP v1 に対応する

snakasnaka

背景

  • 長期間メンテが滞っていたAndroidアプリをメンテしている
  • ちょっと前 (9月頃?) に PUSH 通知が止まったので FCM (Legacy) API を FCM HTTP v1 に移行することになった
  • また Android アプリ側から通知設定ONにできない問題も発生していた
snakasnaka

全体像

最終的に以下のような構成に落ち着いた

snakasnaka

課題

  • 稼働しているシステムに継ぎ足しで出来上がった アーキテクチャ なので Firebase と Amazon SNS の役割が重複しているように見える
    • どちらか一方のみに寄せることはできそうだが、アーキテクチャ刷新まで手がまわっていない状況
snakasnaka

準備フェーズ

PUSH 通知するために必要なことが3つある

  1. Amazon SNS に Platform Application を作成しておく
    • このとき、Firebase Console からサービスアカウントの秘密鍵(JSON)を取得して Amazon SNS に格納しておく
  2. Android App 側で FCM HTTP v1 を利用するための Token を取得する
  3. Amazon SNS の Platform Application に対して 2. の Token を使って Platform Endpoint を作成する

参照ドキュメント

https://docs.aws.amazon.com/sns/latest/dg/sns-mobile-application-as-subscriber.html
https://firebase.google.com/docs/cloud-messaging/migrate-v1

snakasnaka

メッセージ送信フェーズ

  1. 送信者が受信者(User)を指定してメッセージを送信する
  2. App Server は受信者(User)の Device に紐づく Amazon SNS の Endpoint を特定する
  3. 特定した Endpoint に対してメッセージを送信する
  4. Amazon SNS は Platform Endpoint に(前述の準備フェーズで)設定された認証情報を元に FCM v1 API を使いメッセージを送信する
  5. FCM は Token に紐づくデバイスにメッセージを送信する
snakasnaka

トラブルシュート: SNS 側の送信結果を確認する

必要なもの

  • Token

デバイスの Token があれば、送信結果のログから該当デバイス宛の送信が成功したか、失敗したか確認することができる

このスクラップは11日前にクローズされました