Firebase Cloud Messaging のメッセージ タイプ

FCM では、次の 2 つのタイプのメッセージをクライアント アプリに送信できます。

  • 通知メッセージは、「表示メッセージ」と同様に、FCM SDK によって自動的に処理されます。
  • データ メッセージ。クライアント アプリによって処理されます。

通知メッセージには、ユーザーに表示される事前定義キーが含まれ、オプションのデータ ペイロードを含めることができます。一方、データ メッセージにはユーザー定義の Key-Value ペアだけが含まれます。どちらのメッセージ タイプも最大ペイロードは 4 KB です。ただし、Firebase コンソールからメッセージを送信する場合は例外となり、1,000 文字の上限が適用されます。

使用シナリオ 送信方法
通知メッセージ クライアント アプリがバックグラウンドで実行されている場合、FCM SDK は、クライアント アプリに代わってエンドユーザーのデバイスにメッセージを表示します。そうではなく、通知を受信しているときにアプリがフォアグラウンドで実行されている場合、アプリのコードによってアプリの動作が決定されます。
  1. Cloud Functions やアプリサーバーなどの信頼できる環境で、Firebase Admin SDK または HTTP v1 API を使用します。notification キーを設定します。データ ペイロードを任意で指定できます。常に折りたたみ可能です。

    表示通知の例を参照して、リクエストのペイロードを送信します。

  2. Notifications Composer を使用し、メッセージのテキストやタイトルなどを入力して送信します。カスタムデータを指定することで、オプションのデータ ペイロードを追加できます。
データ メッセージ クライアント アプリがデータ メッセージの処理を行います。データ メッセージには、予約済みのキー名のないカスタム Key-Value ペアのみが含まれます(以下を参照)。 Cloud Functions やアプリサーバーなどの信頼できる環境で、Firebase Admin SDK または HTTP v1 API を使用します。送信リクエストで、data キーを設定します。

アプリがバックグラウンドで実行されているときに、FCM SDK で通知の表示を自動的に処理する場合は、通知メッセージを使用します。FCM は、オプションのデータ ペイロードを含む通知メッセージを送信できます。その場合は、FCM によって通知ペイロードが表示され、クライアント アプリによってデータ ペイロードが処理されます。

独自のクライアント アプリコードでメッセージを処理する場合は、データ メッセージを使用します。

通知メッセージ

通知メッセージは、Firebase コンソール Firebase Admin SDK、または FCM HTTP v1 API を使用して送信できます。Firebase コンソールは、通知メッセージの改善に役立つ、アナリティクスに基づく A/B テストを提供します。

Firebase Admin SDK または FCM HTTP v1 API を使用して通知メッセージを送信するには、notification キーを使って、通知メッセージの事前定義された Key-Value オプションを設定します。次の例を使用して、IM アプリで通知メッセージの形式を設定できます。

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

アプリがバックグラウンドで動作中の場合、通知メッセージは通知トレイに配信されます。アプリがフォアグラウンドで動作中は、コールバック関数によってメッセージが処理されます。

通知メッセージの作成に使用できる事前定義キーの完全な一覧については、FCM HTTP v1 API 通知オブジェクトのリファレンス ドキュメントをご覧ください。

データ メッセージ

FCM ペイロード data を使用して、選択した暗号化スキームを実装する方法は、ユーザーが決定できます。カスタム Key-Value ペアで予約語を使用しないでください。予約語には、frommessage_typegoogle.gcm.gcm.notification. で始まる単語が含まれます。

次の例では、トップレベル、つまり共通のデータ フィールドが使用されています。このフィールドは、メッセージを受信するすべてのプラットフォーム上でクライアントによって解釈されます。クライアント アプリは、それぞれのプラットフォームのコールバック関数でデータ ペイロードを受信します。

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
  }
}