[アップデート] Amazon SNS の FCM を使ったプッシュ通知がトークンベースの HTTP v1 API をサポートしたので、レガシー FCM API から移行してみた

2024.01.19

いわさです。

Amazon SNS のモバイルプッシュ通知機能では Firebase Cloud Messaging (FCM) を使ったメッセージ送信が可能です。
今朝のアップデートで Firebase Cloud Messaging API(V1)を Amazon SNS がサポートしました。

Amazon SNS を使うと FCM のサーバーキーを SNS へ登録しておくことで、Amazon SNS の Publish アクションを行うと FCM の API を使ってうまいことプッシュ通知を送信してくれます。

実は FCM の Cloud Messaging の送信 API ですが、トークンを使った HTTP v1 と、API キーを使うレガシー API の 2 種類が存在しており、後者については 2023 年 6 月 20 日より非推奨な API となっており、2024 年 6 月に削除される予定です。

そのためレガシー API を使っているユーザーは HTTP v1 へ移行する必要があるのですが、これまで Amazon SNS ではレガシーのみサポートされていました。

今回のアップデートで次のように認証方法にトークンを選択することが出来るようになりました。

本日はプッシュ通知を受信出来る簡単な Android アプリを構築し、レガシーから HTTP v1 への移行を想定してどのように変更が必要なのか確認してみましたので紹介します。

検証アプリの作成

Android Studio で適当なアプリを作成し、次に従って Firebase Cloud Messaging を処理出来るように実装します。

モバイルアプリ側の実装は省略しますが、上記に従って実装すると実行時にデバイストークンをログで確認することが出来ます。
Amazon SNS のエンドポイントとして登録する必要があるので取得しておきます。

認証方法「キー」で送信してみる

まずは従来の方法で Amazon SNS のプラットフォームアプリケーションを作成し動作確認してみます。
プッシュ通知プラットフォームに「Firebase Cloud Messaging (FCM)」を選択し、認証情報のキーに冒頭の FIrebase プロジェクトの設定から取得した Cloud Messaging API (レガシー) のサーバーキーを登録します。

プラットフォームアプリケーションの作成が出来たら、アプリケーションエンドポイントに先程取得したデバイストークンを登録します。メッセージの送信先になります。
Amazon Pinpoint などでもそうなのですが、メッセージング系サービスは送信先をエンドポイントと表現しています。

アプリケーションエンドポイントを作成したらコンソールからメッセージの発行を行ってみます。
実際にはバックエンドサービスなどから Amazon SNS の Publish API を呼び出す形となります。

プラットフォームの固有形式のメッセージを送信する必要があり、それぞれのプラットフォームのフォーマットは次に記載されています。

SNS コンソールの場合はメッセージ構造で「配信プロトコルごとにカスタムペイロード」を選択すると自動でフォーマットが設定されるので、今回はこちらをこのまま使います。

次のようにモバイルアプリのログでメッセージの受信を確認することが出来ました。

認証方法「トークン」へ切り替える

いま使っていたプラットフォームアプリケーションを新しい API に対応させてみたいと思います。
事前に対象サービスアカウントの鍵を生成し、ローカルへダウンロード済みです。

Amazon SNS のプラットフォームアプリケーションを編集し、認証情報をトークンに切り替えます。
その際に Service json としてファイルをアップロード出来るので、サービスアカウントの鍵をアップロードします。

アプリケーション詳細画面を確認すると認証方法が「Key」から「Token」に変更されていることを確認しました。
新 API に対応出来ているか確認する際にはプラットフォームアプリケーションのこの認証方法を確認すると良さそうですね。

あとは従来と同じ方法でメッセージ送信するだけです。簡単ですね!
次のように新しい方法に切り替え後もメッセージが受信出来ることを確認しました。

さいごに

本日は Amazon SNS の FCM を使ったプッシュ通知がトークンベースの HTTP v1 API をサポートしたので、レガシー FCM API から移行してみました。

Amazon SNS 上のプラットフォームアプリケーションリソースの設定を変更するだけで良いので、切り替えの際にはモバイルアプリもバックエンドアプリも特に変更いらなそうですね。うまいこと Amazon SNS が API 仕様の差異を吸収してくれています。

2024 年 6 月までに忘れずに切り替えましょう。