Amazon SNS での Google Firebase クラウドメッセージング (FCM) v1 ペイロードの使用 - Amazon Simple Notification Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 フォーマットのペイロードを送信するようにオプトインできます。そのためには、最上位のキーを含める必要があります。fcmV1MessageFCM 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フィールドでのみ更新されます。TTLAPNS 属性を設定する場合は、FCM v1 ペイロードを使用してください。

  • androidapnswebpushおよびキーはマッピングされ、指定されたすべての関連キーが入力されます。たとえば、3 title つのプラットフォームすべてで共有されるキーを指定すると、FCM v1 マッピングにより、3 つのプラットフォームすべてに指定したタイトルが入力されます。

  • プラットフォーム間で共有されるキーの中には、異なる値タイプを想定しているものがあります。たとえば、badgeapnsに渡されるキーは整数値を必要とし、badgewebpushに渡されるキーは文字列値を期待します。badgeキーを指定した場合、FCM v1 マッピングでは、有効な値を指定したキーのみが入力されます。

FCM 配信失敗イベント

次の表は、FCM v1 通知リクエストについて Google から受け取ったエラー/ステータスコードに対応する Amazon SNS 障害タイプを示しています。FCM v1 API から受信したすべてのエラーコードは、 CloudWatch アプリケーションの配信ステータスロギングを設定する際に利用できます。

FCM エラー/ステータスコード Amazon SNS 障害タイプ 障害メッセージ 原因と緩和策

UNREGISTERED

InvalidPlatformToken

エンドポイントに関連付けられたプラットフォームトークンは無効です。

エンドポイントに添付されているデバイストークンが古くなっているか無効です。Amazon SNS によってエンドポイントが無効になりました。Amazon SNS エンドポイントを最新のデバイストークンに更新します。

INVALID_ARGUMENT

InvalidNotification

通知本文は無効です。

デバイストークンまたはメッセージペイロードが無効である可能性があります。メッセージペイロードが有効であることを確認してください。メッセージペイロードが有効な場合は、Amazon SNS エンドポイントを最新のデバイストークンに更新します。

SENDER_ID_MISMATCH

InvalidPlatformToken

エンドポイントに関連付けられているプラットフォームトークンは無効です。

デバイストークンに関連付けられているプラットフォームアプリケーションには、デバイストークンに送信する権限がありません。Amazon SNS プラットフォームアプリケーションで正しい FCM 認証情報を使用していることを確認します。

UNAVAILABLE

DependencyUnavailable

依存関係は利用できません。

FCM はリクエストを時間内に処理できませんでした。Amazon SNS によって実行されたすべての再試行が失敗しました。これらのメッセージはデッドレターキュー (DLQ) に保存し、後で再ドライブできます。

INTERNAL

UnexpectedFailure

予期しない障害です。Amazon にお問い合わせください。失敗フレーズ [内部エラー]。

FCM サーバーは、リクエストを処理しようとしたときにエラーが発生しました。Amazon SNS によって実行されたすべての再試行が失敗しました。これらのメッセージはデッドレターキュー (DLQ) に保存し、後で再ドライブできます。

THIRD_PARTY_AUTH_ERROR

InvalidCredentials

プラットフォームアプリケーションの認証情報は無効です。

iOS デバイスまたは Webpush デバイスを対象としたメッセージを送信できませんでした。開発用と本番用の認証情報が有効であることを確認してください。

QUOTA_EXCEEDED

Throttled

[gcm] によってリクエストが調整されました。

メッセージレートクォータ、デバイスメッセージレートクォータ、またはトピックメッセージレートクォータを超えました。この問題を解決する方法については、Google ErrorCodeの Firebase ドキュメントのを参照してください。

PERMISSION_DENIED

InvalidNotification

通知本文は無効です。

PERMISSION_DENIED例外が発生した場合、呼び出し元 (FCM アプリケーション) には、ペイロード内の指定された操作を実行する権限がありません。FCM コンソールに移動し、認証情報で必要な API アクションが有効になっていることを確認します。