ข้อความพุชมัลติคาสต์แรกของคุณโดยใช้หัวข้อ 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 นี้เพื่อวัตถุประสงค์ของ Codelab นี้ คลิก ดำเนินการต่อ
  2. คลิก สร้างโครงการ

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

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

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

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

เพื่อวัตถุประสงค์ของ Codelab นี้ เราจะเพิ่มแอป Android Firebase

84e0b3199bef6d8a.png กำหนดค่าแอนดรอยด์

  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. คุณไม่จำเป็นต้องใช้ ใบรับรองการลงนามการแก้ไขข้อบกพร่อง SHA-1 สำหรับ Codelab นี้ เนื่องจากแอปนี้จะไม่ได้รับการเผยแพร่ เว้นว่างไว้นี้
  3. คลิกลง ทะเบียนแอป
  4. ดำเนินการต่อในคอนโซล Firebase โดยทำตามคำแนะนำเพื่อดาวน์โหลดไฟล์การกำหนดค่า google-services.json
  5. คุณสามารถข้ามขั้นตอนการตั้งค่าที่เหลือได้ เนื่องจากทุกอย่างได้รับการกำหนดค่าไว้ในโค้ดเริ่มต้นของแอปแล้ว คุณจะพบแอปของคุณแสดงอยู่ในหน้าหลักของ Firebase Console
  6. คัดลอกไฟล์ google-services.json (ที่คุณเพิ่งดาวน์โหลด) ไปยังไดเรกทอรี messaging/fcm-topics-codelab/starter/StockNewsApp/app

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

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

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

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

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

ที่มุมซ้ายบนของหน้าต่างโปรเจ็กต์ คุณจะเห็นสิ่งที่คล้ายกับรูปภาพด้านล่างหากคุณอยู่ในมุมมอง 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 คลาส Android Application ยังมีชื่อ 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 และเข้าสู่ระบบ อย่างไรก็ตาม จะไม่มีอะไรเปลี่ยนแปลงใน App UI
    1. คัดลอกและบันทึกโทเค็นการลงทะเบียน FCM เนื่องจากจะใช้ในขั้นตอนถัดไป

927eb66bc909f36b.png

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

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

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

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

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

da20711f6527dff6.png

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

ทำความเข้าใจกับโค้ดเริ่มต้นของเซิร์ฟเวอร์

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

650fc733298588f8.png

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

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

  1. ขั้นแรก เราต้องตั้งค่าบัญชีบริการ Firebase ที่อนุญาตให้ SDK ผู้ดูแลระบบ firebase อนุญาตการเรียกไปยัง 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 และแทรกโทเค็นการลงทะเบียน FCM ที่คุณคัดลอกมาจากส่วน Run the Starter App ลงในฟิลด์ registrationToken
  2. ในฟังก์ชัน main ให้ยกเลิกหมายเหตุเฉพาะฟังก์ชัน sendMessageToFcmRegistrationToken แล้วคลิกเรียกใช้เพื่อรันโค้ด
    1. สังเกตวิธีการตั้งค่าโทเค็นการลงทะเบียน FCM ลงในฟิลด์ 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

  • ตัวสร้างคลาสตั้งค่า Listener สำหรับการสลับการสมัครสมาชิกโดยใช้ 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. ในทำนองเดียวกัน ในเงื่อนไข else คุณจะใช้การเรียกเพื่อ 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. เรียกใช้แอปและสลับตัวเลือกหมวดหมู่หุ้นเพื่อดำเนินการสมัครสมาชิกและยกเลิกการสมัคร มันจะมีลักษณะเช่นนี้:

ติดตาม

ยกเลิกการสมัคร

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

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

  • && : ตรรกะและ ตัวอย่างเช่น '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 เพื่อส่งข้อความ (เหมือนกับการเรียก send ที่ทำในฟังก์ชัน sendMessageToFcmTopic )
FirebaseMessaging.getInstance().send(message);
  1. สุดท้าย อัปเดตฟังก์ชัน main และเปิดใช้งานการเรียกเฉพาะฟังก์ชัน sendMessageToFcmTopicCondition

db9588d40d2a0da6.png

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

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

9. สรุป

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

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

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

c0dc20655d392690.gif

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

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

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

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

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

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

5d5709e7b3cbcb04.png

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

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

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

8d9e8ea9d34016bd.png

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

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

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

947def3eb33b1e4a.gif

อะไรต่อไป?

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

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