📮

AWS SNSとFirebase Cloud Messagingを使ってモバイルデバイスにプッシュ通知を送信する

2024/06/01に公開

AWS SNS を使って端末にプッシュ通知を送信してみる。

AWS SNS の簡単な説明

https://docs.aws.amazon.com/sns/latest/dg/welcome.html
ドキュメントよりざっくり引用・要約。

Amazon Simple Notification Service (Amazon SNS) は、
配信者から購読者 へのメッセージ配信を提供するマネージドサービスです。
配信者は、トピックにメッセージを送信することで、購読者と非同期的に通信します。

クライアントは、Amazon Data Firehose、Amazon SQS、AWS Lambda、HTTP、E メール、モバイルプッシュ通知、モバイルテキストメッセージ (SMS) などのサポートされたエンドポイントタイプを使用して発行されたメッセージを受信できます。


前提条件

  • モバイルアプリ側は Flutter で作成されたアプリで動作検証しています。(記事の内容的にはあまり関係ないですが。)
  • モバイルアプリと FCM(Firebase Cloud Messaging) との接続や設定は既に完了しているものとします。この記事のメインは AWS SNS の設定の記載となります。
  • 検証用の簡単な設定となっているため、AWS SNS のオプション設定についてはあまり触れません。
  • AWS SNS の設定については、ここではコンソールからポチポチと設定しております。
  • コンソール画面の UI はころころ変わるので、閲覧時には変更されてしまってる可能性があることご了承ください。


設定方法

トピック作成

AWS SNS を選択して、トピックを作成。

オプションが沢山あるが、とりあえずは必須項目のタイプトピック名だけ設定。
上記項目は、作成後は変更できないこと注意。


トピックとは?

https://docs.aws.amazon.com/ja_jp/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html

https://docs.aws.amazon.com/ja_jp/sns/latest/dg/mobile-push-send-topicmobile.html

上記のドキュメントからざっくり要約すると、

Amazon SNS において、メッセージを公開するための「アクセスポイント、チャネル」のようなものです。
メッセージの配信者がこのトピックにメッセージを送信すると、そのトピックをサブスクライブ(購読)しているエンドポイント(受信者)にメッセージが配信されます。

エンドポイントには、今回のプッシュ通知以外にも、SMS、HTTP/S エンドポイント、Amazon SQS、AWS Lambda などがエンドポイントに設定できます。

AWS SNS でのプッシュ通知機能だけで言うと、
AWS SNS で設定した「トピック」に紐づいているデバイス(デバイストークン)に対して、プッシュ通知が配信されます。
「トピック」≒「送信対象グループ」


プッシュ通知サービスのプラットフォーム登録

アプリで使用するプッシュ通知サービスのプラットフォームを登録する。

作成ボタンを押下後、「アプリ名」と「プッシュ通知サービスのプラットフォーム」を選択する画面が出るので、各種設定していく。
今回は FCM を使用するので、FCM を選択。




FCM を選択すると、Firebase の json ファイルをアップロードする必要があるため、Firebase のコンソールから json ファイル取得する。



json ファイルを作成して、その json ファイルをアップロードして登録すると、以下のように FCM と紐づいたアプリケーションが作成される。


プッシュ通知を送信する端末情報の登録

先ほど作成したアプリケーションを選択し、メッセージを送信する端末情報(デバイストークン)を登録する。

Flutter アプリで言うと、以下のようなコードで取れるトークンのこと。

final messaging = FirebaseMessaging.instance;
final token = await messaging.getToken();


登録後、以下のように表示される。
ARN は後ほど使用するのでコピーしておく。


サブスクリプション設定

次にサブスクリプション設定を行う。


先ほど作成した、「トピック」と端末登録後にコピーした「ARN」を設定して登録する(購読対象とする)。


プッシュ通知の送信テスト

作成したトピックを選択して、先ほど登録したサブスクリプション(エンドポイント、通知対象端末)が紐づいていることを確認。


「メッセージを発行」ボタンを押下し、端末に送るメッセージを設定する。

ここのメッセージの中身は、アプリ側の実装によるかと思うので、適宜適切なパラメータや body の中身にしていただければと思います。
https://docs.aws.amazon.com/sns/latest/dg/sns-send-custom-platform-specific-payloads-mobile-devices.html

送信を押下すると、アプリ側に送信が飛ぶことを確認。


備考(メモ)

FCM 単体でのプッシュ通知と、AWS SNS とでトピックの役割?設定の認識?が若干違うこと注意。

どちらも「指定したトピックを購読しているユーザー」に対して、プッシュ通知を送信することができますが、

FCM 単体での push 通知設定では、
「指定したトピックを購読しているユーザー」は、FCM のコンソールからの設定ではなく、アプリ側でトピック名を設定する実装が必要。

final messaging = FirebaseMessaging.instance;
await messaging.subscribeToTopic("notice_topic")


FCM のコンソール

SNS の push 通知設定では、
「指定したトピックを購読しているユーザー」は、AWS SNS のコンソール上で設定する。アプリ側にはトピック名を設定する実装は不要。


参考

参考リンク
GitHubで編集を提案
NCDCエンジニアブログ

Discussion