Google致力於提高黑人社區的種族平等。 怎麼看。
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

將消息發送到Android上的設備組

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

您可以通過應用服務器上的舊版XMPPHTTP協議使用設備組消息傳遞。基於舊協議的用於Node.jsFirebase Admin SDK還提供設備組消息傳遞功能。通知密鑰允許的最大成員數量為20。

管理設備組

在向設備組發送消息之前,您必須:

  1. 為要添加到組中的每個設備獲取註冊令牌。

  2. 創建notification_key ,它通過將特定組(通常是用戶)映射到該組的所有關聯註冊令牌來標識設備組。您可以在應用服務器或Android客戶端應用上創建通知鍵。

設備組的基本管理-創建和刪除組,以及添加或刪除設備-通常是通過應用服務器執行的。有關受支持的密鑰的列表,請參見舊式HTTP協議參考

(可選)Android客戶端應用可以從客戶端管理設備組。

在應用服務器上管理設備組

創建設備組

要創建設備組,請發送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": ["4", "8", "15", "16", "23", "42"]
}

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參數設置為addremove的POST請求,並提供用於addremove的註冊令牌。

HTTP POST請求

例如,要將註冊ID為51的設備添加到appUser-Chris,您可以發送以下請求:

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

回應格式

成功添加或刪除設備的請求將返回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個註冊令牌。響應消息列出了未能接收到該消息的註冊令牌:

{
  "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連接服務器無法傳送到組中的所有設備時。應用服務器將收到錯誤響應。

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