Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

C ++でデバイスグループにメッセージを送信する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

デバイス グループ メッセージングを使用すると、複数のデバイスを 1 つのグループに追加できます。これはトピック メッセージングに似ていますが、グループ メンバーシップがサーバーによってのみ管理されるようにするための認証が含まれています。たとえば、異なる電話モデルに異なるメッセージを送信する場合、サーバーは適切なグループへの登録を追加/削除し、適切なメッセージを各グループに送信できます。デバイス グループ メッセージングは​​、アプリケーション内で直接ではなく、サーバーからデバイス グループを管理するという点で、トピック メッセージングとは異なります。

アプリ サーバーで従来のXMPPまたはHTTPプロトコルを介してデバイス グループ メッセージングを使用できます。 Node.js 用 Firebase Admin SDKの古いバージョンは、レガシー プロトコルに基づいており、デバイス グループ メッセージング機能も提供します。通知キーに許可されるメンバーの最大数は 20 です。

デバイス グループの管理

デバイス グループにメッセージを送信する前に、次のことを行う必要があります。

  1. グループに追加する各デバイスの登録トークンを取得します。

  2. 特定のグループ (通常はユーザー) をグループに関連付けられたすべての登録トークンにマッピングすることによって、デバイス グループを識別するnotification_keyを作成します。アプリサーバーで通知キーを作成できます。

デバイス グループの基本的な管理 (グループの作成と削除、およびデバイスの追加と削除) は、アプリ サーバー経由で実行されます。サポートされているキーのリストについては、従来のHTTP プロトコル リファレンスを参照してください。

アプリ サーバーでのデバイス グループの管理

デバイス グループの作成

デバイス グループを作成するには、グループの名前とデバイスの登録トークンのリストを提供する POST 要求を送信します。 FCM は、デバイス グループを表す新しいnotification_keyを返します。

HTTP POST リクエスト

次のようなリクエストをhttps://fcm.googleapis.com/fcm/notificationに送信します。

https://fcm.googleapis.com/fcm/notification
Content-Type:application/json
Authorization:key=API_KEY
project_id:SENDER_ID

{
   "operation": "create",
   "notification_key_name": "appUser-Chris",
   "registration_ids": ["bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
                        "cR1rjyj4_Kc:APA91bGusqbypSuMdsh7jSNrW4nzsM...",
                        ... ]

notification_key_nameは、特定のグループに固有の名前または識別子 (ユーザー名など) です。 notification_key_namenotification_keyは、登録トークンのグループに固有です。同じ送信者 IDに対して複数のクライアント アプリがある場合は、クライアント アプリごとにnotification_key_nameが一意であることが重要です。これにより、メッセージが目的のターゲット アプリにのみ送信されるようになります。

応答形式

リクエストが成功すると、次のようなnotification_keyが返されます。

{
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ"
}

後続の操作で使用するために、 notification_keyと対応するnotification_key_nameを保存します。

通知キーの取得

既存の通知キーを取得する必要がある場合は、次のように GET 要求でnotification_key_nameを使用します。

https://fcm.googleapis.com/fcm/notification?notification_key_name=appUser-Chris
Content-Type:application/json
Authorization:key=API_KEY
project_id:SENDER_ID
{}

特定の通知キー名に対する GET 要求ごとに、サーバーは一意のエンコードされた文字列を返します。各文字列は異なるキーに見えるかもしれませんが、実際には有効な `notification_key` 値です。

デバイス グループからのデバイスの追加と削除

デバイスを既存のグループに追加または削除するには、 operationパラメーターをaddまたはremoveに設定して POST 要求を送信し、追加または削除用の登録トークンを提供します。

HTTP POST リクエスト

たとえば、登録トークンbk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...を持つデバイスをappUser-Chrisに追加するには、次のリクエストを送信します。

{
   "operation": "add",
   "notification_key_name": "appUser-Chris",
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ",
   "registration_ids": ["bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."]
}

応答形式

デバイスの追加または削除のリクエストが成功すると、次のようなnotification_keyが返されます。

{
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ"
}

デバイス グループへのダウンストリーム メッセージの送信

デバイス グループへのメッセージの送信は、個々のデバイスへのメッセージの送信と非常によく似ています。 toパラメータをデバイス グループの一意の通知キーに設定します。ペイロード サポートの詳細については、メッセージ タイプを参照してください。このページの例では、従来の HTTP および XMPP プロトコルでデバイス グループにデータ メッセージを送信する方法を示します。

デバイス グループの HTTP POST 要求

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{
  "to": "aUniqueKey",
  "data": {
    "hello": "This is a Firebase Cloud Messaging Device Group Message!",
   }
}

デバイス グループの HTTP 応答

「成功」の例を次に示しますnotification_keyには 2 つの登録トークンが関連付けられており、メッセージは両方に正常に送信されました。

{
  "success": 2,
  "failure": 0
}

これは「部分的な成功」の例ですnotification_keyには 3 つの登録トークンが関連付けられています。メッセージは、1 つの登録トークンのみに正常に送信されました。応答メッセージには、メッセージの受信に失敗した登録トークン ( registration_ids ) が一覧表示されます。

{
  "success":1,
  "failure":2,
  "failed_registration_ids":[
     "regId1",
     "regId2"
  ]
}

notification_keyに関連付けられた 1 つ以上の登録トークンへのメッセージの配信に失敗した場合、アプリ サーバーは再試行の間にバックオフを使用して再試行する必要があります。

サーバーがメンバーを持たないデバイス グループにメッセージを送信しようとすると、応答は次のようになり、成功は 0、失敗は 0 になります。

{
  "success": 0,
  "failure": 0
}

デバイス グループ XMPP メッセージ

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "to": "aUniqueKey",
      "message_id": "m-1366082849205" ,
      "data": {
          "hello":"This is a Firebase Cloud Messaging Device Group Message!"
      }
  }
  </gcm>
</message>

デバイス グループの XMPP 応答

メッセージがグループ内のいずれかのデバイスに正常に送信されると、XMPP 接続サーバーは ACK で応答します。グループ内のすべてのデバイスに送信されたすべてのメッセージが失敗した場合、XMPP 接続サーバーは NACK で応答します。

「成功」の例を次に示しますnotification_keyには 3 つの登録トークンが関連付けられており、メッセージはそれらすべてに正常に送信されました。

{
  "from": "aUniqueKey",
  "message_type": "ack",
  "success": 3,
  "failure": 0,
  "message_id": "m-1366082849205"
}

これは「部分的な成功」の例ですnotification_keyには 3 つの登録トークンが関連付けられています。メッセージは、1 つの登録トークンのみに正常に送信されました。応答メッセージには、メッセージの受信に失敗した登録トークンが一覧表示されます。

{
  "from": "aUniqueKey",
  "message_type": "ack",
  "success":1,
  "failure":2,
  "failed_registration_ids":[
     "regId1",
     "regId2"
  ]
}

FCM 接続サーバーがグループ内のすべてのデバイスへの配信に失敗した場合。アプリ サーバーは nack 応答を受け取ります。

メッセージ オプションの完全なリストについては、選択した接続サーバー プロトコル、 HTTPまたはXMPPの参照情報を参照してください。