翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SNS での Google Firebase クラウドメッセージング (FCM) v1 ペイロードの使用
Amazon SNS は、FCM HTTP v1 API を使用して、アンドロイド、iOS、およびウェブプッシュの宛先に通知を送信することをサポートしています。このトピックでは、CLI または Amazon SNS API を使用してモバイルプッシュ通知を発行するときのペイロード構造の例を紹介します。
FCM 通知を送信する際には、ペイロードに次のメッセージタイプを含めることができます。
-
データメッセージ — データメッセージはクライアントアプリによって処理され、カスタムのキーと値のペアが含まれます。データメッセージを作成するときは、JSON
data
オブジェクトを含むキーを値として含め、カスタムのキーと値のペアを入力する必要があります。 -
通知メッセージまたは表示メッセージ — 通知メッセージには、FCM SDK によって処理される定義済みのキーセットが含まれます。これらのキーは、配信先のデバイスのタイプによって異なります。プラットフォーム固有の通知キーについて詳しくは、以下を参照してください。
FCM メッセージタイプについて詳しくは、Google の Firebase ドキュメントの「メッセージタイプ
FCM v1 のペイロード構造を使用してメッセージを送信する
FCM アプリケーションを初めて作成する場合や FCM v1 の機能を利用したい場合は、FCM v1 フォーマットのペイロードを送信するようにオプトインできます。そのためには、最上位のキーを含める必要があります。fcmV1Message
FCM v1 ペイロードの作成について詳しくは、Google の Firebase ドキュメントの「従来の FCM API から HTTP v1 への移行
Amazon SNS に送信された FCM v1 のペイロードの例:
注記
GCM
次の例で使用されているキー値は、Amazon SNS を使用して通知を発行するときに String としてエンコードする必要があります。
{ "GCM": "{ \"fcmV1Message\": { \"validate_only\" : false, \"message\" : { \"notification\": { \"title\": \"string\", \"body\": \"string\" }, \"data\": { \"dataGen\": \"priority message\", }, \"android\": { \"priority\": \"high\", \"notification\": { \"body_loc_args\": [ \"string\" ], \"title_loc_args\": [ \"string\" ], \"sound\": \"string\", \"title_loc_key\": \"string\", \"title\": \"string\", \"body\": \"string\", \"click_action\": \"clicky_clacky\", \"body_loc_key\": \"string\" }, \"data\": { \"dataAndroid\": \"priority message\", }, \"ttl\": \"10023.32s\" }, \"apns\": { \"payload\": { \"aps\": { \"alert\": { \"subtitle\": \"string\", \"title-loc-args\": [ \"string\" ], \"title-loc-key\": \"string\", \"loc-args\": [ \"string\" ], \"loc-key\": \"string\", \"title\": \"string\", \"body\": \"string\" }, \"category\": \"Click\", \"content-available\": 0, \"sound\": \"string\", \"badge\": 5 } } }, \"webpush\": { \"notification\": { \"badge\": \"5\", \"title\": \"string\", \"body\": \"string\" }, \"data\": { \"dataWeb\": \"priority message\", } } } } }" }
JSON ペイロードを送信するときは、message-structure
必ずその属性をリクエストに含め、に設定してください。json
CLI の例:
aws sns publish --topic $TOPIC_ARN --message '{"GCM": "{\"fcmV1Message\": {\"message\":{\"notification\":{\"title\":\"string\",\"body\":\"string\"},\"android\":{\"priority\":\"high\",\"notification\":{\"title\":\"string\",\"body\":\"string\"},\"data\":{\"customAndroidDataKey\":\"custom key value\"},\"ttl\":\"0s\"},\"apns\":{\"payload\":{\"aps\":{\"alert\":{\"title\":\"string\", \"body\":\"string\"},\"content-available\":1,\"badge\":5}}},\"webpush\":{\"notification\":{\"badge\":\"URL\",\"body\":\"Test\"},\"data\":{\"customWebpushDataKey\":\"priority message\"}},\"data\":{\"customGeneralDataKey\":\"priority message\"}}}}", "default": "{\"notification\": {\"title\": \"test\"}"}' --region $REGION --message-structure json
FCM v1 形式のペイロードの送信について詳しくは、Google の Firebase ドキュメントの以下を参照してください。
従来のペイロード構造を使用して FCM v1 API にメッセージを送信します。
FCM v1 に移行する場合、従来の認証情報に使用していたペイロード構造を変更する必要はありません。Amazon SNS はペイロードを新しい FCM v1 ペイロード構造に変換し、Google に送信します。
入力メッセージペイロード形式:
{ "GCM": "{\"notification\": {\"title\": \"string\", \"body\": \"string\", \"android_channel_id\": \"string\", \"body_loc_args\": [\"string\"], \"body_loc_key\": \"string\", \"click_action\": \"string\", \"color\": \"string\", \"icon\": \"string\", \"sound\": \"string\", \"tag\": \"string\", \"title_loc_args\": [\"string\"], \"title_loc_key\": \"string\"}, \"data\": {\"message\": \"priority message\"}}" }
Google に送信されたメッセージ:
{ "message": { "token": "***", "notification": { "title": "string", "body": "string" }, "android": { "priority": "high", "notification": { "body_loc_args": [ "string" ], "title_loc_args": [ "string" ], "color": "string", "sound": "string", "icon": "string", "tag": "string", "title_loc_key": "string", "title": "string", "body": "string", "click_action": "string", "channel_id": "string", "body_loc_key": "string" }, "data": { "message": "priority message" } }, "apns": { "payload": { "aps": { "alert": { "title-loc-args": [ "string" ], "title-loc-key": "string", "loc-args": [ "string" ], "loc-key": "string", "title": "string", "body": "string" }, "category": "string", "sound": "string" } } }, "webpush": { "notification": { "icon": "string", "tag": "string", "body": "string", "title": "string" }, "data": { "message": "priority message" } }, "data": { "message": "priority message" } } }
潜在的なリスク
-
レガシーから v1 へのマッピングは Apple プッシュ通知サービス (APNS)
headers
やキーをサポートしていません。fcm_options
これらのフィールドを使用する場合は、FCM v1 ペイロードを送信してください。 -
FCM v1 では、APNs デバイスにサイレント通知を送信するためにメッセージヘッダーが必要な場合があります。現在 APNs デバイスにサイレント通知を送信している場合、従来の方法では動作しません。予期しない問題を避けるため、代わりに FCM v1 ペイロードを使用することをお勧めします。APN ヘッダーの一覧と用途については、Apple 開発者ガイドの「APN との通信
」を参照してください。 -
通知の送信時に
TTL
Amazon SNS 属性を使用している場合は、android
フィールドでのみ更新されます。TTL
APNS 属性を設定する場合は、FCM v1 ペイロードを使用してください。 -
android
、apns
、webpush
およびキーはマッピングされ、指定されたすべての関連キーが入力されます。たとえば、3title
つのプラットフォームすべてで共有されるキーを指定すると、FCM v1 マッピングにより、3 つのプラットフォームすべてに指定したタイトルが入力されます。 -
プラットフォーム間で共有されるキーの中には、異なる値タイプを想定しているものがあります。たとえば、
badge
apns
に渡されるキーは整数値を必要とし、badge
webpush
に渡されるキーは文字列値を期待します。badge
キーを指定した場合、FCM v1 マッピングでは、有効な値を指定したキーのみが入力されます。
FCM 配信失敗イベント
次の表は、FCM v1 通知リクエストについて Google から受け取ったエラー/ステータスコードに対応する Amazon SNS 障害タイプを示しています。FCM v1 API から受信したすべてのエラーコードは、 CloudWatch アプリケーションの配信ステータスロギングを設定する際に利用できます。
FCM エラー/ステータスコード | Amazon SNS 障害タイプ | 障害メッセージ | 原因と緩和策 |
---|---|---|---|
|
|
エンドポイントに関連付けられたプラットフォームトークンは無効です。 |
エンドポイントに添付されているデバイストークンが古くなっているか無効です。Amazon SNS によってエンドポイントが無効になりました。Amazon SNS エンドポイントを最新のデバイストークンに更新します。 |
|
|
通知本文は無効です。 |
デバイストークンまたはメッセージペイロードが無効である可能性があります。メッセージペイロードが有効であることを確認してください。メッセージペイロードが有効な場合は、Amazon SNS エンドポイントを最新のデバイストークンに更新します。 |
|
|
エンドポイントに関連付けられているプラットフォームトークンは無効です。 |
デバイストークンに関連付けられているプラットフォームアプリケーションには、デバイストークンに送信する権限がありません。Amazon SNS プラットフォームアプリケーションで正しい FCM 認証情報を使用していることを確認します。 |
|
|
依存関係は利用できません。 |
FCM はリクエストを時間内に処理できませんでした。Amazon SNS によって実行されたすべての再試行が失敗しました。これらのメッセージはデッドレターキュー (DLQ) に保存し、後で再ドライブできます。 |
|
|
予期しない障害です。Amazon にお問い合わせください。失敗フレーズ [内部エラー]。 |
FCM サーバーは、リクエストを処理しようとしたときにエラーが発生しました。Amazon SNS によって実行されたすべての再試行が失敗しました。これらのメッセージはデッドレターキュー (DLQ) に保存し、後で再ドライブできます。 |
|
|
プラットフォームアプリケーションの認証情報は無効です。 |
iOS デバイスまたは Webpush デバイスを対象としたメッセージを送信できませんでした。開発用と本番用の認証情報が有効であることを確認してください。 |
|
|
[gcm] によってリクエストが調整されました。 |
メッセージレートクォータ、デバイスメッセージレートクォータ、またはトピックメッセージレートクォータを超えました。この問題を解決する方法については、Google ErrorCode |
|
|
通知本文は無効です。 |
|