Firebase Cloud Messaging (FCM) モバイルプッシュ通知が Amazon Simple Notification Service (Amazon SNS) を介して送信できません。
解決策
Amazon CloudWatch Logs のプッシュ通知配信ステータス属性を設定および表示する
「プッシュ通知の Amazon SNS トピック配信ログにアクセスするにはどうすればよいでしょうか。」の指示に従います。
デバイスがプッシュ通知サーバーに接続できることを確認する
問題が特定のデバイスでのみ発生している場合は、デバイスがプッシュ通知サーバーに接続できることを確認します。例えば、ファイアウォールにより、モバイルデバイスがネットワーク上の FCM に接続するためのトラフィックが制限されることがあります。詳細については、Firebase ウェブサイトの「FCM ポートとファイアウォール」を参照してください。
デバイスに関連するプラットフォームエンドポイントが有効化されているかどうかを確認する
失敗したプッシュ通知配信ログで、"providerResponse": "Endpoint is disabled" という値があるか確認します。
例:
{ "notification": {
"messageMD5Sum": "c8c339cf07dc39c9388253dgc81f257",
"messageId": "fg207f98-0244-6767-96e2-45b1fg451gg8",
"timestamp": "2023-06-23 16:27:51.889"
},
"delivery": {
"deliveryId": "76ab7dcd-f444-5b4f-9d1b-24ea8863d9bc",
"destination": "arn:aws:sns:us-east-1:123456789101:endpoint/GCM/MyAndroidApp/682dc992-a47f-45f7-b980-97727cce0a9c",
"providerResponse": "Endpoint is disabled",
"dwellTimeMs": 28,
"attempts": 1,
"token": "ojnco9nc9weucn9encx9ewunc9nu9w9euncec9necn9xexnexex9encewcerve0f0o0dmco9j",
"statusCode": 400
},
"status": "FAILURE"
}
失敗したプッシュ通知配信ログに "providerResponse": "Endpoint is disabled" という値が見つかった場合は、デバイスの関連するプラットフォームエンドポイントは無効化されます。この問題をトラブルシューティングするには、「プッシュ通知のエンドポイントがアクティブにならないのはなぜですか?」を参照してください。
詳細については、「無効なデバイストークンに関連付けられたプラットフォームエンドポイントを再度有効にする」を参照してください。
FCM から直接通知を受信できることを確認する
問題が Amazon SNS エンドポイント側にあるのか、クライアントアプリケーション側にあるのかを判断するには、FCM コンソールでテストメッセージを送信します。手順については、Firebase ウェブサイトの「テスト通知メッセージを送信する」を参照してください。
正しい FCM メッセージタイプを使用していることを確認する
FCM は通知メッセージとデータメッセージをサポートします。通知メッセージは、FCM SDK が自動的に処理します。データメッセージは、クライアントアプリが処理します。詳細については、Firebase ウェブサイトの「メッセージのタイプ」を参照してください。また、「プラットフォーム固有のメッセージの送信」も参照してください。
クライアントアプリでメッセージデータを処理するためのデータキーを設定する
データペイロードをクライアントアプリに送信するには、必ずカスタムキーと値のペアでデータキーを設定します。詳細については、Firebase ウェブサイトの「データメッセージ」を参照してください。
FCM SDK を使用してクライアントアプリの通知を表示する
通知メッセージには、事前定義済みのキーと値のオプションのセットを含む通知キーを必ず使用します。詳細については、Firebase ウェブサイトの「通知メッセージ」を参照してください。
プッシュ通知のエラー応答コードを特定およびトラブルシューティングする
以下の手順を実行します。
- 配信ステータスログを確認して、失敗したプッシュ通知配信 ("status": "FAILURE") がないか確認します。
- 失敗したプッシュ通知配信ログで、他のプラットフォームの応答コードがないか確認します。
- Firebase ウェブサイトの「ダウンストリーム メッセージのエラー レスポンス コード」セクションに記載されている推奨される対処方法に従ってください。
FCM エラーコードとトラブルシューティングのベストプラクティスについて詳しくは、Firebase ウェブサイトの「ErrorCode」を参照してください。
配信の成功を示すメッセージがデバイスに表示されない問題をトラブルシューティングする
デバイスが通知を受信しなかった、または通知がシステムの通知トレイに表示されていない場合、原因を特定するには、アプリケーションのメッセージハンドラーにログステートメントを含めます。
メッセージが通知ペイロードとして受信され、データペイロードとしては受信されない場合は、クライアントアプリケーションコードのメッセージハンドラーを確認します。データ通知を処理するのは、クライアントのアプリケーションコードのみです。通知がシステムの通知トレイにプッシュされていることを確認します。
詳細については、Firebase ウェブサイトの「メッセージ処理」を参照してください。
Android デバイスのトラブルシューティング
Android デバイスの場合は、FCM Android 診断ページを使用して配信ステータスを確認し、問題をさらにトラブルシューティングします。FCM 診断ページを開くには、Google ダイヤラーから *#*#426#*#* をダイヤルします。詳細については、Firebase ウェブサイトの「FCM Android diagnostics」を参照してください。
関連情報
Amazon SNS でプッシュ通知用の Android プラットフォームアプリケーションを作成する方法を教えてください。
CloudWatch を使用した Amazon SNS のモニタリング
モバイルプッシュ通知
AWS CLI を使用して Amazon SNS でプッシュ通知を送信するための APN プラットフォームアプリケーションを作成するにはどうすればよいですか?