Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

在 Android 上向設備組發送消息

設備組消息傳遞允許您將多個設備添加到一個組中。這類似於主題消息傳遞,但包括身份驗證以確保組成員身份僅由您的服務器管理。例如,如果您想向不同的手機型號發送不同的消息,您的服務器可以向適當的組添加/刪除註冊並向每個組發送適當的消息。設備組消息與主題消息的不同之處在於它涉及從您的服務器而不是直接在您的應用程序中管理設備組。

您可以通過使用傳統設備組消息XMPPHTTP協議,你的應用服務器上。火力地堡管理SDK用於Node.js的基礎上,傳統協議還提供設備群發功能。通知鍵允許的最大成員數為 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是唯一的一組登記記號。重要的是, notification_key_name每個客戶機應用程序的唯一,如果你有相同的多個客戶端應用程序發送者ID 。這確保消息只發送到預期的目標應用程序。

響應格式

成功請求返回notification_key像下面這樣:

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

保存notification_key和相應的notification_key_name於使用在後續操作。

檢索通知鍵

如果您需要檢索現有通知鍵,使用notification_key_name在GET請求,如下所示:

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”值。

在設備組中添加和刪除設備

要添加或從現有的組中刪除設備,發送與POST請求operation參數集addremove ,並提供一種用於添加或移除登記令牌。

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 ,應用程序服務器,應重試之間退避重試。

如果服務器嘗試向沒有成員的設備組發送消息,則響應如下所示,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 響應。

有關消息選項的完整列表,請參閱您選擇的連接服務器協議,參考信息HTTPXMPP