ข้อความพุชมัลติคาสต์แรกของคุณโดยใช้หัวข้อ FCM

1. บทนำ

เป้าหมาย

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

เมื่อเสร็จแล้ว คุณจะสามารถใช้ประโยชน์จากโครงสร้างพื้นฐาน FCM เพื่อจัดการกลุ่มย่อยเหล่านี้รวมถึงข้อความพุชแบบหลายผู้รับผ่านกลุ่มย่อย

ภาพรวมหัวข้อ

หัวข้อเป็นโครงสร้างพื้นฐาน FCM ที่ได้รับการสนับสนุนในการเข้าถึงกลุ่มย่อยของอินสแตนซ์แอปของคุณด้วยข้อความ

FCM จัดเตรียม API เพื่อส่งข้อความรวมถึงดูแลการสมัครรับข้อมูลหัวข้อเหล่านี้ การเชื่อมโยงและแยกอินสแตนซ์แอปกับหัวข้อเรียกว่าสมัครรับข้อมูลและยกเลิกการสมัครตามลำดับ

หัวข้อควรใช้สำหรับเนื้อหาที่เปิดเผยต่อสาธารณะ ตัวอย่างเช่น ข้อความเกี่ยวกับการอัปเดตสภาพอากาศ หากคุณต้องการส่งข้อความที่มีความละเอียดอ่อนต่อผู้ใช้ ให้ใช้ Firebase Admin SDK สำหรับ ข้อความหลายผู้รับผ่านอุปกรณ์หลายเครื่อง

มัลติคาสต์ตามหัวข้อได้รับการปรับให้เหมาะสมสำหรับปริมาณงาน

สิ่งที่คุณจะได้เรียนรู้

  • วิธีสมัครสมาชิก (และยกเลิกการสมัคร) ผู้ใช้หัวข้อจากแอพมือถือ
  • วิธีส่งข้อความพุชแบบหลายผู้รับโดยใช้หัวข้อ
  • วิธีส่งข้อความไปยังหัวข้อต่างๆ โดยใช้เงื่อนไขหัวข้อ
  • วิธีจัดการการบอกรับสมาชิกตามหัวข้อบนฝั่งเซิร์ฟเวอร์และทำการสมัครสมาชิกและยกเลิกการสมัครจำนวนมาก

สิ่งที่คุณจะสร้าง

  • แอพ Android ที่สมัคร/ยกเลิกการสมัครหัวข้อและรับข้อความเมื่อส่งไปยังหัวข้อ
  • การผสานรวมทางฝั่งเซิร์ฟเวอร์โดยใช้ Firebase Admin SDK ซึ่งจะใช้เพื่อส่งข้อความหัวข้อผ่าน FCM API

สิ่งที่คุณต้องการ

  • เบราว์เซอร์ที่คุณเลือก เช่น Chrome
  • IntelliJ IDEA IDE สำหรับการพัฒนาแอปพลิเคชัน Java
    • ตรวจสอบให้แน่ใจว่าได้เลือกใช้การรองรับ Gradle ขณะติดตั้ง
  • Android Studio IDE สำหรับการพัฒนาแอปพลิเคชัน Android
  • อุปกรณ์สำหรับเรียกใช้แอปพลิเคชัน Android อย่างใดอย่างหนึ่ง:
    • โปรแกรมจำลอง Android (ต้องตั้งค่าใน Android Studio )
    • อุปกรณ์ Android จริงที่เชื่อมต่อกับคอมพิวเตอร์ของคุณและตั้งค่าเป็นโหมดนักพัฒนาซอฟต์แวร์
  • บัญชี Google สำหรับการสร้างและจัดการโครงการ Firebase ของคุณ

2. การติดตั้ง

รับรหัส

โคลนที่เก็บ GitHub จากบรรทัดคำสั่ง:

git clone https://github.com/firebase/quickstart-android.git fcm-codelab

โค้ดตัวอย่างจะถูกโคลนลงในไดเร็กทอรี fcm-codelab

cd fcm-codelab

แอปเริ่มต้นสำหรับ Codelab นี้อยู่ในไดเรกทอรี messaging ของสาขา fcm-topics-codelab ทำตามขั้นตอนต่อไปนี้เพื่อเข้าถึงรหัสเริ่มต้น ประกอบด้วยสองไดเรกทอรี StockNewsApp และ StockNewsServer อดีตมีแอพ Android เริ่มต้นและหลังมีรหัสฝั่งเซิร์ฟเวอร์เริ่มต้น

git checkout fcm-topics-codelab
cd messaging/fcm-topics-codelab/starter

เวอร์ชันที่สมบูรณ์ของ Codelab นี้จะอยู่ใน messaging/fcm-topics-codelab/completed

สร้างโปรเจ็กต์ Firebase

  1. ใน คอนโซล Firebase คลิก เพิ่มโปรเจ็ กต์ ตั้งชื่อโปรเจ็กต์ Firebase StockNews แล้วคลิกดำเนินการต่อ หมายเหตุ: จำรหัสโปรเจ็กต์สำหรับโปรเจ็กต์ Firebase ของคุณ (หรือคลิกไอคอน แก้ไข เพื่อตั้งค่ารหัสโปรเจ็กต์ที่คุณต้องการ)

fc08f9a7808e4553.png

  1. คุณสามารถข้ามการเปิดใช้งาน Google Analytics ได้ สำหรับจุดประสงค์ของ Codelab นี้ คุณไม่ต้องการมัน คลิก ดำเนินการต่อ
  2. คลิก สร้างโครงการ

ยินดีด้วย! คุณเพิ่งสร้างโปรเจ็กต์ Firebase ตอนนี้คุณสามารถคลิกที่ชื่อโครงการเพื่อเข้าสู่คอนโซล

3. การกำหนดค่าแอป Firebase เฉพาะแพลตฟอร์ม

การเปลี่ยนแปลงโค้ดส่วนใหญ่ที่จำเป็นในการเปิดใช้การสนับสนุน Firebase ได้รับการตรวจสอบแล้วในโปรเจ็กต์ที่คุณกำลังดำเนินการอยู่ อย่างไรก็ตาม ในการเพิ่มการสนับสนุนสำหรับแพลตฟอร์มมือถือ คุณต้อง:

  • ลงทะเบียนแพลตฟอร์มที่ต้องการในโครงการ Firebase
  • ดาวน์โหลดไฟล์การกำหนดค่าเฉพาะแพลตฟอร์ม และเพิ่มลงในโค้ด

สำหรับจุดประสงค์ของ Codelab นี้ เราจะเพิ่มแอป Android Firebase

84e0b3199bef6d8a.png กำหนดค่า Android

  1. ใน คอนโซล Firebase เลือก การตั้งค่าโปรเจ็ กต์ที่ด้านบนของแถบการนำทางด้านซ้ายในฟันเฟืองการตั้งค่า แล้วคลิกไอคอน Android ใต้ แอปของคุณ ในหน้า ทั่วไป

คุณควรเห็นกล่องโต้ตอบต่อไปนี้: 8254fc299e82f528.png

  1. ค่าสำคัญที่ต้องระบุคือ ชื่อแพ็กเกจ Android ตั้งเป็น com.ticker.stocknews
    1. ชื่อแพ็กเกจที่ระบุในที่นี้ต้องเหมือนกับชื่อที่ระบุใน AndroidManifest.xml ของรหัส StockNewsApp เริ่มต้นของคุณ หากคุณต้องการค้นหาหรือเปลี่ยนแปลง ให้ทำตามขั้นตอนเหล่านี้:
      1. ในไดเรกทอรี StockNewsApp ให้เปิดไฟล์ app/src/main/AndroidManifest.xml
      2. ในองค์ประกอบ manifest ค้นหาค่าสตริงของแอตทริบิวต์ package ค่านี้คือชื่อแพ็คเกจ Android
  1. ในกล่องโต้ตอบ Firebase ให้วางชื่อแพ็กเกจที่คัดลอกลงในช่อง ชื่อแพ็กเกจ Android
  2. คุณไม่จำเป็นต้องมี ใบรับรองการลงนาม Debug SHA-1 สำหรับ Codelab นี้ เนื่องจากแอปนี้จะไม่ถูกเผยแพร่ เว้นว่างไว้
  3. คลิก ลงทะเบียนแอป
  4. ดำเนินการต่อในคอนโซล Firebase ทำตามคำแนะนำเพื่อดาวน์โหลดไฟล์การกำหนดค่า google-services.json
  5. คุณสามารถข้ามขั้นตอนการตั้งค่าที่เหลือได้ เนื่องจากทุกอย่างได้รับการกำหนดค่าไว้แล้วในโค้ดแอปเริ่มต้น คุณจะพบแอปของคุณอยู่ในรายการในหน้าหลักของคอนโซล Firebase
  6. คัดลอกไฟล์ google-services.json (ที่คุณเพิ่งดาวน์โหลด) ไปยัง messaging/fcm-topics-codelab/starter/StockNewsApp/app

4. สร้างและเรียกใช้แอปของคุณ

คุณพร้อมที่จะเริ่มทำงานกับแอปของคุณแล้ว! ขั้นแรก สร้างและเรียกใช้แอป

นำเข้าแอพเริ่มต้น

เริ่ม Android Studio และนำเข้า messaging/fcm-topics-codelab/starter/StockNewsApp จากไดเรกทอรีรหัสเริ่มต้น

หลังจากที่โหลดโปรเจ็กต์แล้ว คุณอาจเห็นการแจ้งเตือนว่า Git ไม่ได้ติดตามการเปลี่ยนแปลงในเครื่องทั้งหมดของคุณ คุณสามารถคลิก " เพิกเฉย " หรือ " X " ที่ด้านบนขวา (คุณจะไม่ผลักดันการเปลี่ยนแปลงใด ๆ กลับไปที่ Git repo)

ที่มุมซ้ายบนของหน้าต่างโปรเจ็กต์ คุณควรเห็นบางอย่างเช่นรูปภาพด้านล่าง หากคุณอยู่ในมุมมอง Android (หากคุณอยู่ในมุมมอง โปรเจ็ กต์ คุณจะต้องขยายโปรเจ็กต์เพื่อดูสิ่งเดียวกัน)

b574ea0089ee87c6.png

โปรดทราบว่า Android Studio อาจใช้เวลาหลายวินาทีในการรวบรวมโปรเจ็กต์ในเบื้องหลังเป็นครั้งแรก ในช่วงเวลานี้ คุณจะเห็นสปินเนอร์ในแถบสถานะที่ด้านล่างของ Android Studio:

4bc64eb3b99eb0ae.png

เราขอแนะนำให้คุณรอจนกว่าจะเสร็จสิ้นก่อนที่จะทำการเปลี่ยนแปลงโค้ด ซึ่งจะทำให้ Android Studio ดึงส่วนประกอบที่จำเป็นทั้งหมดเข้ามาได้

นอกจากนี้ หากคุณได้รับข้อความแจ้งว่า "โหลดซ้ำเพื่อให้การเปลี่ยนแปลงภาษามีผลหรือไม่" หรือสิ่งที่คล้ายกัน เลือก "ใช่"

การตั้งค่าโปรแกรมจำลอง

หากคุณต้องการความช่วยเหลือในการตั้งค่าตัวจำลอง Android โปรดดูบทความ เรียกใช้แอปของคุณ

ทำความเข้าใจรหัสเริ่มต้นแอป Android

  • รหัสเริ่มต้นเป็นแอพ Android ที่มีน้ำหนักเบาพร้อมฟังก์ชั่นและ UI ที่น้อยที่สุด
  • เพิ่มการพึ่งพา SDK การส่งข้อความ ของ firebase ลงในไฟล์ app/build.gradle แล้ว

f04ff8f48d186dff.png

  • ใน AndroidManifest.xml มีการเพิ่มตัวจัดการการโทรกลับ MESSAGING_EVENT แล้ว
    • StockNewsMessagingService.java ตัวจัดการนี้ขยายคลาส FirebaseMessagingService ซึ่งมีฟังก์ชันที่เกี่ยวข้องกับ Firebase Cloud Messaging ที่หลากหลาย ดู เอกสาร FirebaseMessagingService เพื่อเรียนรู้เพิ่มเติม b843c4d33ee53166.png
    88fad1960f4a6ff5.png
    • ฟังก์ชัน onNewToken จะถูกเรียกเมื่อมีการสร้างหรือรีเฟรชโทเค็นการลงทะเบียน FCM ดู ตรวจสอบการสร้างโทเค็น สำหรับข้อมูลเพิ่มเติม
    • ฟังก์ชัน onMessageReceived จะถูกเรียกเมื่อได้รับข้อความและแอปอยู่เบื้องหน้า ในปัจจุบัน มันเพียงแค่บันทึกข้อความที่ได้รับ
      • ดู รับข้อความในแอป Android เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับความแตกต่างระหว่างการส่งข้อความพื้นหลังและเบื้องหน้าและการจัดการ
  • นอกจากนี้ ใน AndroidManifest.xml ยังมี คลาส Application Android ชื่อ StockNewsApplication a4982a8731492dfc.pngccde692f7f68dc5a.png
    • คลาสนี้จะเป็นคนแรกที่สร้างอินสแตนซ์เมื่อแอปเริ่มทำงาน
    • ในฟังก์ชัน onCreate ของคลาส StockNewsApplication การเรียกการสร้างโทเค็นการลงทะเบียน FCM จะถูกเพิ่มเข้าไป จะสร้างโทเค็นการลงทะเบียน FCM ที่ถูกต้องและบันทึก
  • MainActivity.java เพิ่ม RecyclerView ที่แสดงตัวเลือกประเภทสต็อค
  • SubscriptionAdapter.java ใช้ RecyclerView.Adapter ซึ่งดึงหน้าจอการเลือกหมวดหมู่หุ้น
    • หมวดหมู่หุ้นแต่ละประเภทมีชื่อและตัวสลับการสมัครรับข้อมูลอยู่ข้างๆ
    • การเปลี่ยนการสลับควรทำให้การสมัครรับข้อมูลหัวข้อ FCM / ยกเลิกการสมัครรับข้อมูล
    • คุณจะใช้การโทรเหล่านี้ในส่วนที่จะเกิดขึ้น
  • คลาส model/StockCategories.java มีรายการหมวดหมู่สต็อกทั้งหมดและชื่อหัวข้อที่เกี่ยวข้อง

b32663ec4e865a18.png

เรียกใช้แอปเริ่มต้น

  1. เชื่อมต่ออุปกรณ์ Android ของคุณกับคอมพิวเตอร์หรือเริ่มโปรแกรมจำลอง
  2. ในแถบเครื่องมือด้านบน เลือกอุปกรณ์ Android หรือโปรแกรมจำลองเป้าหมายแล้วกดปุ่มเรียกใช้

5b27fc5b237e06b9.png

  1. UI ของแอปจะมีลักษณะดังนี้:

ff5b1a1c53231c54.png

  1. แอพจะสร้างโทเค็นการลงทะเบียน FCM และบันทึก อย่างไรก็ตาม จะไม่มีอะไรเปลี่ยนแปลงใน UI ของแอป
    1. คัดลอกและบันทึกโทเค็นการลงทะเบียน FCM เนื่องจากจะนำไปใช้ในขั้นตอนต่อไป

927eb66bc909f36b.png

5. ส่งข้อความทดสอบ

ตอนนี้คุณพร้อมที่จะส่งข้อความทดสอบไปยังอินสแตนซ์ของแอปที่คุณได้ตั้งค่าไว้ในขั้นตอนที่แล้ว

นำเข้ารหัสเซิร์ฟเวอร์เริ่มต้น

เริ่ม IntelliJ IDEA และเปิดโครงการ messaging/fcm-topics-codelab/starter/StockNewsServer

มุมมองโครงการในแถบนำทางด้านซ้ายของคุณควรมีลักษณะดังนี้:

da20711f6527dff6.png

โปรดทราบว่า IntellIj IDEA อาจใช้เวลาสองสามนาทีในการสร้างโปรเจ็กต์ของคุณ รวมถึงการดึงการพึ่งพาที่จำเป็น

ทำความเข้าใจรหัสเริ่มต้นของเซิร์ฟเวอร์

  • รหัสเริ่มต้นของเซิร์ฟเวอร์คือโปรเจ็กต์ Java ที่ใช้ Gradle
  • ไฟล์ build.gradle มีการพึ่งพา firebase-admin SDK ที่เพิ่มเข้าไปแล้ว SDK นี้ให้การเข้าถึงฟังก์ชันการส่งข้อความ FCM ต่างๆ

650fc733298588f8.png

  • สุดท้ายมีสองคลาส ได้แก่:
    • FcmSender.java : คลาสนี้มีวิธีการบันทึกต่อไปนี้:
      • initFirebaseSDK : เริ่มต้น firebase-admin SDK
      • sendMessageToFcmRegistrationToken : ส่งข้อความไปยังโทเค็นการลงทะเบียน FCM
      • sendMessageToFcmTopic : ส่งข้อความไปยังหัวข้อ FCM
      • sendMessageToFcmTopicCondition : ส่งข้อความไปยังเงื่อนไขหัวข้อ FCM
    • FcmSubscriptionManager.java : คลาสนี้มีวิธีการที่อนุญาตให้จัดการการสมัครสมาชิกหัวข้อจากฝั่งเซิร์ฟเวอร์
      • initFirebaseSDK : เริ่มต้น firebase-admin SDK
      • SubscribeFcmRegistrationTokensToTopic : subscribeFcmRegistrationTokensToTopic สมาชิก FCM Registration Token ให้กับหัวข้อ FCM
      • SubscribeFcmRegistrationTokensFromTopic : unsubscribeFcmRegistrationTokensFromTopic การสมัคร FCM Registration Token(s) จากหัวข้อ FCM

การตั้งค่ารหัสเซิร์ฟเวอร์

  1. อันดับแรก เราต้องตั้งค่าบัญชีบริการ Firebase ที่อนุญาตให้ firebase-admin SDK อนุญาตการเรียกใช้ FCM API
    1. ไปที่คอนโซล Firebase คลิกไอคอนรูปเฟืองถัดจาก ภาพรวมโครงการ ในแถบการนำทางด้านซ้ายมือ และเลือก การตั้งค่าโครงการ 8c2108d4d7c915e9.png
    2. ในหน้าการตั้งค่า เลือก บัญชีบริการ แล้วคลิก สร้างบัญชีบริการ 84b128cc5dac0a85.png
    3. ตอนนี้คลิกที่ปุ่ม สร้างคีย์ส่วนตัวใหม่ และการดาวน์โหลดไฟล์คีย์ของคุณโดยอัตโนมัติจะเริ่มขึ้น
    4. เปลี่ยนชื่อไฟล์คีย์เป็น service-account.json และคัดลอกในโฟลเดอร์ messaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resources
    5. ทั้ง FcmSender.java และ FcmSubscriptionManager.java โหลดไฟล์ service-account.json จาก classpath โดยใช้โค้ดต่อไปนี้ 8dffbee658e0bdd.png
  2. ณ จุดนี้ รหัสเซิร์ฟเวอร์พร้อมแล้ว เรียกใช้ Build -> Build Project จากแถบเมนูด้านบน

ส่งข้อความทดสอบ

  1. ใน FcmSender.java ค้นหาฟังก์ชัน sendMessageToFcmRegistrationToken และใส่โทเค็นการลง registrationToken FCM ที่คุณคัดลอกจาก เรียกใช้ส่วนแอปเริ่มต้น ลงในฟิลด์ registerToken
  2. ในฟังก์ชัน main ให้ยกเลิกการใส่ความคิดเห็นเพียงฟังก์ชัน sendMessageToFcmRegistrationToken แล้วคลิกเรียกใช้เพื่อรันโค้ด
    1. สังเกตว่า FCM Registration Token ถูกตั้งค่าในฟิลด์ Token ของวัตถุ message
    2. นอกจากนี้ โปรดสังเกตว่าเราใช้ send API ของอินเทอร์เฟซ FirebaseMessaging อย่างไร

52e4a3ec3f816473.png

  1. การดำเนินการนี้ควรส่งข้อความไปยังอินสแตนซ์ของแอปที่คุณได้ตั้งค่าไว้ในขั้นตอนก่อนหน้า
  2. เมื่ออินสแตนซ์ของแอปอยู่เบื้องหน้า คุณควรเห็นเนื้อหาข้อความที่บันทึกไว้

d3540ec1089f97dd.png

  1. และเมื่ออินสแตนซ์ของแอปอยู่ในพื้นหลัง คุณจะสังเกตเห็นข้อความปรากฏในถาดการแจ้งเตือน

31203deca59c03fe.png

เยี่ยมมาก คุณใช้ Firebase Admin SDK เพื่อส่งข้อความไปยังอินสแตนซ์ของแอป อ่านเพิ่มเติมเกี่ยวกับ การใช้ Firebase Admin SDK ในเซิร์ฟเวอร์ของคุณ

6. ใช้การสมัครสมาชิกหัวข้อ / ยกเลิกการสมัครสมาชิก

ในขั้นตอนนี้ คุณจะใช้การดำเนินการตามหัวข้อและการยกเลิกการสมัคร ในการสลับหมวดหมู่สต็อกของแอป Android

เมื่อผู้ใช้แอพสลับสวิตช์สำหรับหมวดหมู่หุ้นเฉพาะ การสมัครรับข้อมูลตามหัวข้อหรือการโทรยกเลิกการสมัครรับข้อมูลจะเกิดขึ้น

รหัสรีวิว

  • ไปที่คลาส SubscriptionAdapter.java ในโค้ด Android App และค้นหาคลาส RecyclerViewViewHolder

6c0614199e684f6.png

  • ตัวสร้างคลาสตั้งค่าตัวฟังสำหรับการสลับการบอกรับเป็นสมาชิกโดยใช้ setOnCheckedChangeListener
  • ขึ้นอยู่กับการสลับสวิตช์ การดำเนินการ subscribeToStockCategory และ unsubscribeFromStockCategory การสมัครจะดำเนินการโดยเรียกเมธอด
  • เมธอด setData ถูกเรียกโดย onBindViewHolder ของ RecyclerView Adapter เพื่อผูก ViewHolder กับหมวดหมู่สต็อกที่เหมาะสม

ใช้การสมัครสมาชิกหัวข้อ

  1. ในเมธอด subscribeToStockCategory คุณจะต้องใช้การเรียก subscribeToTopic API ของอ็อบเจ็กต์ FirebaseMessaging รหัสอาจมีลักษณะดังนี้:
   void subscribeToStockCategory() {
      // Making call to FCM for subscribing to the topic for stockCategory
     FirebaseMessaging.getInstance().subscribeToTopic(stockCategory.getTopicName()).addOnSuccessListener(
          unused -> {
            // Subscribing action successful
            Log.i(TAG, "Subscribed to topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Subscribed to " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

ดำเนินการยกเลิกการสมัครหัวข้อ

  1. ในทำนองเดียวกัน ในเงื่อนไขอื่น คุณจะต้องใช้การเรียก unsubscribeFromTopic API บางสิ่งบางอย่างตามบรรทัดต่อไปนี้:
void unsubscribeFromStockCategory() {
      // Making call to FCM for unsubscribing from the topic for stockCategory
      FirebaseMessaging.getInstance().unsubscribeFromTopic(stockCategory.getTopicName())
          .addOnSuccessListener(unused -> {
            // Unsubscribing action successful
            Log.i(TAG, "Unsubscribed from topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Unsubscribed from " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

มาลองดูกัน

  1. เรียกใช้แอพและสลับตัวเลือกหมวดหมู่หุ้นเพื่อดำเนินการสมัครและยกเลิกการสมัคร มันจะมีลักษณะดังนี้:

ติดตาม

Unsubscribe

7. ส่งข้อความหัวข้อแรกของคุณ

ในขั้นตอนนี้ คุณจะใช้โค้ดฝั่งเซิร์ฟเวอร์เพื่อส่งข้อความหัวข้อ FCM

ใช้การรวมฝั่งเซิร์ฟเวอร์สำหรับการส่งข้อความหัวข้อ

  1. ในรหัสเซิร์ฟเวอร์ ให้ข้ามไป FcmSender.java และค้นหาวิธีที่ชื่อ sendMessageToFcmTopic

56381dd1b40cde9c.png

  1. ในบรรทัดแรก ระบุหัวข้อ FCM ที่คุณต้องการส่งข้อความถึง
    • เป็นสตริงของรูปแบบ: /topics/<Topic Name> ตัวอย่างเช่น /topics/Technology
  2. ในบรรทัดถัดไป ให้สร้างวัตถุ message ใหม่ (คล้ายกับที่กำหนดไว้ในฟังก์ชัน sendMessageToFcmRegistrationToken )
    • ความแตกต่างจะแทนที่การตั้งค่าฟิลด์ Token ของวัตถุ message คุณจะตั้งค่าฟิลด์ Topic
Message message = Message.builder()
        .putData("FOOTECH", "$1000")
        .setNotification(
            Notification.builder()
                .setTitle("Investor confidence in Tech Stocks growing")
                .setBody("Foo Tech leading the way in stock growth for Tech sector.")
                .build())
        .setTopic(topicName)
        .build();
  1. ตอนนี้เพิ่มการเรียกไปยังอินสแตนซ์ FirebaseMessaging เพื่อส่งข้อความ (เหมือนกับการโทรส่งที่ทำในฟังก์ชัน sendMessageToFcmRegistrationToken )
FirebaseMessaging.getInstance().send(message);
  1. สุดท้าย อัปเดตฟังก์ชัน main และเปิดใช้งานการเรียกเฉพาะฟังก์ชัน sendMessageToFcmTopic

9a6aa08dd7c28898.png

ส่งข้อความและตรวจสอบใบเสร็จรับเงิน

  1. ก่อนส่งข้อความหัวข้อ ก่อนอื่นตรวจสอบให้แน่ใจว่าอินสแตนซ์แอปของคุณสมัครรับข้อมูลจากหัวข้อที่คุณต้องการส่งไป
    1. ซึ่งสามารถทำได้ด้วยการสลับสลับที่เกี่ยวข้องกัน ตัวอย่างเช่น:
    4668247408377712.png
  2. ตอนนี้คุณสามารถส่งข้อความหัวข้อของคุณโดยเรียกใช้ฟังก์ชัน main ของ FcmSender.java
  3. เช่นเดียวกับก่อนหน้านี้ คุณควรจะสามารถสังเกตการรับข้อความบนอินสแตนซ์ของแอปได้
    1. อินสแตนซ์ของแอปในเบื้องหน้า
    c144721399f610fe.png
    1. อินสแตนซ์ของแอปในพื้นหลัง
    44efc7dfd57e8e9a.png
  4. โบนัส: ลองยกเลิกการสมัครรับหัวข้อที่คุณส่งไปและส่งข้อความอีกครั้ง คุณจะสังเกตเห็นว่าข้อความไม่ได้ถูกส่งไปยังอินสแตนซ์ของแอป

8. ส่งข้อความเงื่อนไขหัวข้อแรกของคุณ

คุณลักษณะเงื่อนไขหัวข้อช่วยให้คุณสามารถส่งข้อความไปยังหัวข้อต่างๆ ร่วมกันได้ ทำให้คุณสามารถให้คำจำกัดความของผู้ชมที่แสดงออกมากขึ้น

ตัวอย่างเช่น ในแอป StockNews ให้พิจารณาความเป็นไปได้ในการส่งข้อความไปยังกลุ่มของอินสแตนซ์ของแอปที่สมัครรับข้อมูลในหัวข้อเทคโนโลยีหรือยานยนต์ กรณีดังกล่าวอาจเกิดขึ้น ตัวอย่างเช่น หากมีเหตุการณ์สำคัญที่เกี่ยวข้องกับ Waymo

หัวข้อช่วยให้คุณแสดงชุดค่าผสมของคุณในรูปแบบของนิพจน์บูลีนโดยใช้ตัวดำเนินการต่อไปนี้

  • && : ตรรกะและ. ตัวอย่างเช่น 'Technology' in topics && 'Automotive' in topics - กำหนดเป้าหมายเฉพาะอินสแตนซ์ของแอปที่สมัครรับข้อมูลจากทั้งหัวข้อเทคโนโลยีและยานยนต์
  • || : ตรรกะหรือ. ตัวอย่างเช่น 'Technology' in topics || 'Automotive' in topics - กำหนดเป้าหมายอินสแตนซ์ของแอปที่สมัครรับข้อมูลจากหัวข้อเทคโนโลยีหรือยานยนต์
  • () : วงเล็บสำหรับจัดกลุ่ม ตัวอย่างเช่น 'Technology' in topics && ('Automotive' in topics || 'Energy' in topics) - กำหนดเป้าหมายเฉพาะอินสแตนซ์ของแอปที่สมัครรับข้อมูลเทคโนโลยีและหัวข้อยานยนต์หรือพลังงาน

อ่านเพิ่มเติมเกี่ยวกับวิธีการ สร้างคำขอส่ง สำหรับการใช้ฟังก์ชันนี้

ใช้การรวมฝั่งเซิร์ฟเวอร์สำหรับการส่งข้อความเงื่อนไขหัวข้อ

  1. กลับไปที่รหัสเซิร์ฟเวอร์ ข้ามไป FcmSender.java และค้นหาวิธีที่ชื่อ sendMessageToFcmTopicCondition

3719a86c274522cf.png

  1. ในบรรทัดแรก สำหรับตัวแปร topicCondition ให้ระบุเงื่อนไขหัวข้อที่คุณต้องการส่งข้อความถึง คุณสามารถตั้งค่าเป็น: 'Technology' in topics && 'Automotive' in topics
  2. ในบรรทัดถัดไป ให้สร้างวัตถุ message ใหม่ (คล้ายกับที่กำหนดไว้ในฟังก์ชัน sendMessageToFcmTopic )
    1. ความแตกต่างจะแทนที่การตั้งค่าฟิลด์ Topic ของวัตถุ คุณจะตั้งค่าฟิลด์ Condition
    Message message = Message.builder()
        .putData("FOOCAR", "$500")
        .setNotification(
            Notification.builder()
                .setTitle("Foo Car shows strong Q2 results")
                .setBody("Foo Car crosses 1B miles. Stocks rally.")
                .build())
        .setCondition(topicCondition)
        .build();
  1. ตอนนี้เพิ่มการเรียกไปยังอินสแตนซ์ FirebaseMessaging เพื่อส่งข้อความ (เหมือนกับการโทรส่งที่ทำในฟังก์ชัน sendMessageToFcmTopic )
FirebaseMessaging.getInstance().send(message);
  1. สุดท้าย อัปเดตฟังก์ชัน main และเปิดใช้งานการเรียกเฉพาะฟังก์ชัน sendMessageToFcmTopicCondition

db9588d40d2a0da6.png

ส่งข้อความและตรวจสอบใบเสร็จรับเงิน

  1. ก่อนส่งข้อความหัวข้อ ก่อนอื่นตรวจสอบให้แน่ใจว่าอินสแตนซ์แอปของคุณตรงตามเงื่อนไขหัวข้อที่ระบุโดยสมัครรับอินสแตนซ์ของแอปทั้งหัวข้อเทคโนโลยีและยานยนต์
  2. ตอนนี้คุณสามารถส่งข้อความหัวข้อของคุณโดยเรียกใช้ฟังก์ชัน main ของ FcmSender.java
  3. เช่นเดียวกับก่อนหน้านี้ คุณควรสามารถสังเกตการรับข้อความบนอินสแตนซ์ของแอปได้
    1. อินสแตนซ์ของแอปในเบื้องหน้า
    6f612ace15aa6515.png
    1. อินสแตนซ์ของแอปในพื้นหลัง
    78044a56ac2359cb.png
  4. โบนัส: ตอนนี้คุณสามารถยกเลิกการสมัครหัวข้อเทคโนโลยีและส่งข้อความเงื่อนไขหัวข้ออีกครั้ง คุณควรสังเกตว่าอินสแตนซ์ของแอปไม่ได้รับข้อความ

9. สรุป

มาสรุปสิ่งที่คุณได้เรียนรู้มาถึงจุดนี้กัน

  • วิธีเริ่มต้นการสมัครรับข้อมูลตามหัวข้อ / การยกเลิกการสมัครจากอินสแตนซ์ของแอป
  • ส่งข้อความไปยังหัวข้อและยืนยันการรับบนอินสแตนซ์ของแอปที่สมัครรับข้อมูล
  • การส่งข้อความไปยังหัวข้อ เงื่อนไข และการตรวจสอบการรับบนอินสแตนซ์ของแอพที่ตรงตามเงื่อนไข

ในส่วนถัดไป คุณจะได้เรียนรู้เกี่ยวกับวิธีการสมัคร/ยกเลิกการสมัครอินสแตนซ์ของแอปในหัวข้อโดยไม่ต้องสร้างอินสแตนซ์การโทรจากฝั่งไคลเอ็นต์

c0dc20655d392690.gif

10. จัดการการสมัครสมาชิกหัวข้อจากฝั่งเซิร์ฟเวอร์

จนถึงตอนนี้ ใน Codelab นี้ การสมัครรับข้อมูลตามหัวข้อและการโทรยกเลิกการสมัครรับข้อมูลทั้งหมดเริ่มต้นจากอินสแตนซ์ของแอป

อย่างไรก็ตาม ในบางกรณี คุณอาจต้องการจัดการการสมัครหัวข้อจากฝั่งเซิร์ฟเวอร์ ตัวอย่างเช่น คุณอาจต้องการสมัครกลุ่มย่อยของฐานผู้ใช้ที่มีอยู่ของคุณในหัวข้อใหม่โดยไม่ต้องรอการเปิดตัวแอป

ในส่วนนี้ คุณจะได้เรียนรู้วิธี ใช้ Firebase Admin SDK เพื่อสมัครและยกเลิกการสมัครโทเค็นการลงทะเบียน FCM ให้กับหัวข้อหนึ่งๆ โดยการโทรจากฝั่งเซิร์ฟเวอร์

ใช้การสมัครสมาชิกฝั่งเซิร์ฟเวอร์ของโทเค็นการลงทะเบียน FCM กับหัวข้อ FCM

  1. ในรหัสเซิร์ฟเวอร์ ให้ข้ามไปที่คลาส FcmSubscriptionManager.java ค้นหาเมธอดที่ชื่อ subscribeFcmRegistrationTokensToTopic คุณจะใช้การเรียก subscribeToTopic API ที่นี่

5d5709e7b3cbcb04.png

  1. มาสมัครใช้งานอินสแตนซ์ของแอปในหัวข้อ Energy กันเถอะ ในการทำเช่นนั้น ก่อนอื่นให้ระบุข้อมูลสำหรับสองฟิลด์ต่อไปนี้:
    1. registerTokens : รายการสตริงที่คั่นด้วยเครื่องหมายจุลภาคซึ่งแสดงถึงโทเค็นการลง registrationTokens FCM ที่คุณต้องการสร้างการสมัครตามหัวข้อ
    2. topicName : ชื่อหัวข้อสำหรับหัวข้อ Energy เช่น /topics/Energy
  2. ในสองสามบรรทัดถัดไป ใช้การโทรตามบรรทัดเหล่านี้:
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(
        registrationTokens, topicName);
  1. คุณสามารถตรวจสอบ TopicManagementResponse เพื่อดูสถิติผลลัพธ์ระดับสูงได้ เช่น การพิมพ์จำนวนการสมัครสมาชิกหัวข้อที่สร้างสำเร็จโดยใช้ getSuccessCount
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
  1. สุดท้าย ในฟังก์ชัน main เปิดใช้งานการเรียกเฉพาะฟังก์ชัน subscribeFcmRegistrationTokensToTopic เท่านั้น

สร้างการสมัครสมาชิกและส่งข้อความหัวข้อ

  1. ณ จุดนี้ คุณพร้อมที่จะสร้างการสมัครรับข้อมูลหัวข้อและส่งข้อความไปที่หัวข้อนั้น
  2. ดำเนินการฟังก์ชัน main ของคลาส FcmSubscriptionManager.java นี้จะสร้างการสมัครสมาชิกหัวข้อ
  3. ตอนนี้ ตั้งค่ารหัสเพื่อส่งข้อความ เหมือนกับเมื่อก่อน
    1. ใน FcmSender.java ให้ค้นหาฟังก์ชัน sendMessageToFcmTopic
    2. ตั้งค่า topicName เป็นหัวข้อ Energy เช่น /topics/Energy
    3. สร้างวัตถุ Message และกำหนดเป้าหมายไปที่หัวข้อโดยใช้ setTopic
    4. สุดท้าย ให้อัปเดตวิธีการ main เพื่อเปิดใช้งานฟังก์ชัน sendMessageToFcmTopic เท่านั้น
  4. ดำเนินการฟังก์ชั่น main ของ FcmSender.java การดำเนินการนี้จะส่งข้อความไปยังอินสแตนซ์แอปของคุณและคุณสามารถสังเกตได้ในแอปของคุณดังนี้
    1. อินสแตนซ์ของแอปในเบื้องหน้า
    40ab6cf71e0e4116.png
    1. อินสแตนซ์ของแอปในพื้นหลัง
    8fba81037198209e.png

ใช้การยกเลิกการสมัคร FCM Registration Tokens ทางฝั่งเซิร์ฟเวอร์กับหัวข้อ FCM

  1. สำหรับการยกเลิกการสมัครหัวข้อฝั่งเซิร์ฟเวอร์ ให้ใช้ unsubscribeFromTopic API นี้ คุณจะเพิ่มรหัสที่เกี่ยวข้องเพื่อ unsubscribeFcmRegistrationTokensFromTopic ฟังก์ชัน FcmSubscriptionManager.java ของคลาส FcmSubscriptionManager.java

8d9e8ea9d34016bd.png

  1. การใช้รหัสการยกเลิกการสมัครสมาชิกฝั่งเซิร์ฟเวอร์และการตรวจสอบความถูกต้องของผลกระทบโดยการส่งข้อความตามหัวข้อ ถือเป็นแบบฝึกหัดสำหรับคุณ

11. ขอแสดงความยินดี

ขอแสดงความยินดีที่คุณใช้หัวข้อ FCM สำเร็จในการส่งข้อความแบบหลายผู้รับไปยังกลุ่มย่อยของอินสแตนซ์แอปของคุณ วิธีนี้จะช่วยลดความซับซ้อนในการเข้าถึงผู้ใช้ของคุณด้วยเนื้อหาที่เกี่ยวข้องในเวลาที่เหมาะสม

947def3eb33b1e4a.gif

อะไรต่อไป?

เมื่อคุณทำ Codelab เสร็จเรียบร้อยแล้ว ให้ลองลองใช้หัวข้อสำหรับแพลตฟอร์มอื่นๆ โดยใช้คำแนะนำต่อไปนี้:

เอกสารอ้างอิง