ส่งข้อความไปยังกลุ่มอุปกรณ์บน C++

การส่งข้อความกลุ่มอุปกรณ์ช่วยให้คุณเพิ่มอุปกรณ์หลายเครื่องในกลุ่มเดียวได้ สิ่งนี้คล้ายกับการส่งข้อความตามหัวข้อ แต่รวมถึงการรับรองความถูกต้องเพื่อให้แน่ใจว่าการเป็นสมาชิกกลุ่มได้รับการจัดการโดยเซิร์ฟเวอร์ของคุณเท่านั้น ตัวอย่างเช่น หากคุณต้องการส่งข้อความที่แตกต่างกันไปยังโทรศัพท์รุ่นต่างๆ เซิร์ฟเวอร์ของคุณสามารถเพิ่ม/ลบการลงทะเบียนไปยังกลุ่มที่เหมาะสม และส่งข้อความที่เหมาะสมไปยังแต่ละกลุ่ม การส่งข้อความกลุ่มอุปกรณ์แตกต่างจากการส่งข้อความตามหัวข้อที่เกี่ยวข้องกับการจัดการกลุ่มอุปกรณ์จากเซิร์ฟเวอร์ของคุณ แทนที่จะใช้โดยตรงภายในแอปพลิเคชันของคุณ

คุณสามารถใช้การส่งข้อความกลุ่มอุปกรณ์ผ่าน โปรโตคอล XMPP หรือ HTTP เดิมบนเซิร์ฟเวอร์แอปของคุณ Firebase Admin 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_name และ notification_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 เป็น add or remove และจัดเตรียมโทเค็นการลงทะเบียนสำหรับการเพิ่มหรือลบ

คำขอ 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 ( register_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

สำหรับรายการตัวเลือกข้อความทั้งหมด โปรดดูข้อมูลอ้างอิงสำหรับโปรโตคอลเซิร์ฟเวอร์การเชื่อมต่อที่คุณเลือก HTTP หรือ XMPP