1. บทนำ
เป้าหมาย
ใน Codelab นี้ คุณจะได้เรียนรู้วิธีใช้งานแอปหลายแพลตฟอร์มเพื่อให้สามารถพุชข้อความแบบมัลติแคสต์ไปยังกลุ่มย่อยต่างๆ ของอินสแตนซ์แอปโดยใช้หัวข้อ FCM ได้
เมื่อเสร็จสิ้นแล้ว คุณจะสามารถใช้ประโยชน์จากโครงสร้างพื้นฐาน FCM เพื่อจัดการกลุ่มย่อยเหล่านี้ รวมทั้งส่งข้อความพุชแบบมัลติแคสต์ไปยังกลุ่มย่อยได้
ภาพรวมของหัวข้อ
Topics คือวิธีพื้นฐาน 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
ของ Branch ของ fcm-topics-codelab
ทำตามขั้นตอนต่อไปนี้เพื่อเข้าถึงโค้ดเริ่มต้น ซึ่งประกอบด้วย 2 ไดเรกทอรี ได้แก่ StockNewsApp
และ StockNewsServer
แอปแรกมีแอป Android เริ่มต้นและในภายหลังมีโค้ดฝั่งเซิร์ฟเวอร์ของเงื่อนไขเริ่มต้น
git checkout fcm-topics-codelab cd messaging/fcm-topics-codelab/starter
Codelab เวอร์ชันที่สมบูรณ์จะอยู่ในไดเรกทอรี messaging/fcm-topics-codelab/completed
สร้างโปรเจ็กต์ Firebase
- ในคอนโซล Firebase ให้คลิกเพิ่มโปรเจ็กต์ ตั้งชื่อโปรเจ็กต์ Firebase ว่า StockNews แล้วคลิกต่อไป หมายเหตุ: โปรดจำรหัสโปรเจ็กต์ของโปรเจ็กต์ Firebase (หรือคลิกไอคอนแก้ไขเพื่อตั้งค่ารหัสโปรเจ็กต์ที่ต้องการ)
- คุณข้ามการเปิดใช้ Google Analytics ได้ สำหรับวัตถุประสงค์ของ Codelab นี้ คุณไม่จำเป็นต้องใช้งาน คลิกต่อไป
- คลิกสร้างโครงการ
ยินดีด้วย คุณเพิ่งสร้างโปรเจ็กต์ Firebase ตอนนี้คุณสามารถคลิกชื่อโปรเจ็กต์เพื่อเข้าสู่คอนโซลได้
3. การกำหนดค่าแอป Firebase เฉพาะแพลตฟอร์ม
การเปลี่ยนแปลงโค้ดส่วนใหญ่ที่จำเป็นเพื่อเปิดใช้การสนับสนุน Firebase จะได้รับการตรวจสอบในโปรเจ็กต์ที่คุณกำลังดำเนินการอยู่ อย่างไรก็ตาม หากต้องการเพิ่มการรองรับแพลตฟอร์มอุปกรณ์เคลื่อนที่ คุณจะต้องดำเนินการต่อไปนี้
- ลงทะเบียนแพลตฟอร์มที่ต้องการในโปรเจ็กต์ Firebase
- ดาวน์โหลดไฟล์การกำหนดค่าเฉพาะแพลตฟอร์ม แล้วเพิ่มลงในโค้ด
ตามวัตถุประสงค์ของ Codelab นี้ เราจะเพิ่มแอป Android Firebase
กำหนดค่า Android
- ในคอนโซล Firebase ให้เลือกการตั้งค่าโปรเจ็กต์ที่ด้านบนของแถบนำทางด้านซ้ายในฟันเฟืองการตั้งค่า และคลิกไอคอน Android ในส่วนแอปของคุณในหน้าทั่วไป
คุณควรเห็นกล่องโต้ตอบต่อไปนี้
- ค่าสำคัญที่ระบุคือชื่อแพ็กเกจ Android ตั้งเป็น
com.ticker.stocknews
- ชื่อแพ็กเกจที่ระบุไว้ที่นี่ต้องเหมือนกับชื่อที่ระบุใน
AndroidManifest.xml
ของโค้ด StockNewsApp เริ่มต้น หากต้องการค้นหาหรือเปลี่ยนแปลง ให้ทำตามขั้นตอนต่อไปนี้- ในไดเรกทอรี StockNewsApp ให้เปิดไฟล์
app/src/main/AndroidManifest.xml
- ในองค์ประกอบ
manifest
ให้ค้นหาค่าสตริงของแอตทริบิวต์package
ค่านี้คือชื่อแพ็กเกจ Android
- ในไดเรกทอรี StockNewsApp ให้เปิดไฟล์
- ชื่อแพ็กเกจที่ระบุไว้ที่นี่ต้องเหมือนกับชื่อที่ระบุใน
- ในกล่องโต้ตอบ Firebase ให้วางชื่อแพ็กเกจที่คัดลอกลงในช่องชื่อแพ็กเกจ Android
- คุณไม่จำเป็นต้องใช้ใบรับรองการแก้ไขข้อบกพร่อง SHA-1 สำหรับ Codelab นี้ เนื่องจากระบบจะไม่เผยแพร่แอปนี้ เว้นว่างไว้
- คลิกลงทะเบียนแอป
- ดำเนินการต่อในคอนโซล Firebase โปรดทำตามวิธีการเพื่อดาวน์โหลดไฟล์การกำหนดค่า
google-services.json
- คุณข้ามขั้นตอนการตั้งค่าที่เหลือได้ เนื่องจากได้กำหนดค่าทุกอย่างในโค้ดของแอปเริ่มต้นไว้แล้ว คุณจะเห็นแอปของคุณแสดงอยู่ในหน้าหลักของคอนโซล Firebase
- คัดลอกไฟล์
google-services.json
(ที่คุณเพิ่งดาวน์โหลด) ไปยังไดเรกทอรีmessaging/fcm-topics-codelab/starter/StockNewsApp/app
4. สร้างและเรียกใช้แอปของคุณ
คุณพร้อมเริ่มทำงานจริงในแอปแล้ว ก่อนอื่นให้สร้างและเรียกใช้แอป
นำเข้าแอปเริ่มต้น
เปิด Android Studio แล้วนำเข้า messaging/fcm-topics-codelab/starter/StockNewsApp
จากไดเรกทอรีโค้ดเริ่มต้น
หลังจากโหลดโปรเจ็กต์แล้ว คุณอาจเห็นการแจ้งเตือนว่า Git ไม่ติดตามการเปลี่ยนแปลงในเครื่องทั้งหมด คุณสามารถคลิก "เพิกเฉย" หรือ "X" ที่ด้านขวาบน (จะไม่มีการส่งการเปลี่ยนแปลงใดๆ กลับไปยังที่เก็บ Git)
ที่มุมบนซ้ายของหน้าต่างโปรเจ็กต์ คุณควรเห็นบางอย่างที่คล้ายรูปภาพด้านล่างหากอยู่ในมุมมอง Android (หากอยู่ในมุมมองโปรเจ็กต์ คุณจะต้องขยายโปรเจ็กต์เพื่อให้เห็นสิ่งเดียวกัน)
โปรดทราบว่า Android Studio อาจใช้เวลาหลายวินาทีเพื่อรวบรวมโปรเจ็กต์ในเบื้องหลังเป็นครั้งแรก ระหว่างนี้คุณจะเห็นไอคอนหมุนในแถบสถานะที่ด้านล่างของ Android Studio
เราขอแนะนำให้คุณรอจนกว่าจะเสร็จสิ้นก่อนที่จะเปลี่ยนแปลงโค้ด ซึ่งจะช่วยให้ Android Studio ดึงคอมโพเนนต์ที่จำเป็นทั้งหมดได้
นอกจากนี้ หากคุณได้รับข้อความแจ้งว่า "โหลดซ้ำเพื่อให้การเปลี่ยนภาษามีผลหรือไม่" หรือชื่ออื่นที่คล้ายกัน ให้เลือก "ใช่"
การตั้งค่าโปรแกรมจำลอง
หากต้องการความช่วยเหลือในการตั้งค่าโปรแกรมจำลอง Android โปรดอ่านบทความเรียกใช้แอปของคุณ
ทำความเข้าใจโค้ดเริ่มต้นสำหรับแอป Android
- โค้ดเริ่มต้นเป็นแอป Android ขนาดเล็กที่มีฟังก์ชันการทำงานและ UI ไม่มาก
- เพิ่มทรัพยากร Dependency ของ SDK การรับส่งข้อความ Firebase ลงในไฟล์
app/build.gradle
แล้ว
- ใน
AndroidManifest.xml
มีการเพิ่มเครื่องจัดการ CallbackMESSAGING_EVENT
แล้ว- เครื่องจัดการ
StockNewsMessagingService.java
นี้จะขยายคลาสFirebaseMessagingService
ซึ่งมีฟังก์ชันการทำงานต่างๆ ที่เกี่ยวข้องกับ Firebase Cloud Messaging โปรดดูข้อมูลเพิ่มเติมในเอกสารประกอบเกี่ยวกับ FirebaseMessagingService
- ระบบจะเรียกฟังก์ชัน
onNewToken
เมื่อมีการสร้างหรือรีเฟรชโทเค็นการลงทะเบียน FCM โปรดดูข้อมูลเพิ่มเติมที่ตรวจสอบการสร้างโทเค็น - ระบบจะเรียกฟังก์ชัน
onMessageReceived
เมื่อได้รับข้อความและแอปทำงานอยู่เบื้องหน้า ในปัจจุบัน เพียงแค่บันทึกข้อความที่ได้รับเท่านั้น- โปรดดูหัวข้อรับข้อความในแอป Android เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างการส่งและการจัดการข้อความในเบื้องหลังและในเบื้องหน้า
- เครื่องจัดการ
- นอกจากนี้ ใน
AndroidManifest.xml
ชั้นเรียน AndroidApplication
จะมีชื่อเป็นStockNewsApplication
ด้วย- คลาสนี้จะเป็นชั้นเรียนแรกที่จะสร้างอินสแตนซ์เมื่อแอปเริ่มทำงาน
- ในฟังก์ชัน
onCreate
ของคลาสStockNewsApplication
มีการเพิ่มการเรียกใช้การสร้างโทเค็นการลงทะเบียน FCM ซึ่งจะสร้างโทเค็นการลงทะเบียน FCM ที่ถูกต้องและบันทึก
MainActivity.java
จะเพิ่มRecyclerView
ที่แสดงตัวเลือกหมวดหมู่หุ้นSubscriptionAdapter.java
จะใช้RecyclerView.Adapter
ซึ่งดึงหน้าจอการเลือกหมวดหมู่หุ้น- หมวดหมู่หุ้นแต่ละหมวดหมู่จะมีชื่อและปุ่มเปิด/ปิดการสมัครใช้บริการอยู่ข้างๆ
- การเปลี่ยนปุ่มเปิด/ปิดควรเป็นการสมัครรับหัวข้อ FCM / การโทรยกเลิกการสมัครรับข้อมูล
- คุณจะใช้การโทรเหล่านี้ในส่วนต่อๆ ไป
- คลาส
model/StockCategories.java
ประกอบด้วยรายการหมวดหมู่หุ้นทั้งหมดและชื่อหัวข้อที่เกี่ยวข้อง
เรียกใช้แอปเริ่มต้น
- เชื่อมต่ออุปกรณ์ Android กับคอมพิวเตอร์หรือเริ่มโปรแกรมจําลอง
- ในแถบเครื่องมือด้านบน ให้เลือกอุปกรณ์ Android หรือโปรแกรมจำลองเป้าหมาย แล้วกดปุ่มเรียกใช้
- UI ของแอปจะมีลักษณะดังนี้
- แอปจะสร้างโทเค็นการลงทะเบียน FCM และบันทึกไว้ แต่จะไม่มีการเปลี่ยนแปลงใดๆ ใน UI ของแอป
- คัดลอกและบันทึกโทเค็นการจดทะเบียน FCM เนื่องจากจะใช้ในขั้นตอนถัดไป
5. ส่งข้อความทดสอบ
ตอนนี้คุณก็พร้อมที่จะส่งข้อความทดสอบไปยังอินสแตนซ์ของแอปที่คุณตั้งค่าไว้ในขั้นตอนสุดท้ายแล้ว
นําเข้าโค้ดเซิร์ฟเวอร์เริ่มต้น
เริ่ม IntelliJ IDEA และเปิดโปรเจ็กต์ messaging/fcm-topics-codelab/starter/StockNewsServer
มุมมองโปรเจ็กต์ในแถบนำทางด้านซ้ายควรมีลักษณะดังนี้
โปรดทราบว่า IntellIj IDEA อาจใช้เวลา 2-3 นาทีในการสร้างโปรเจ็กต์ รวมถึงการดึงทรัพยากร Dependency ที่จำเป็น
ทำความเข้าใจโค้ดเริ่มต้นของเซิร์ฟเวอร์
- โค้ดเริ่มต้นสำหรับเซิร์ฟเวอร์เป็นโปรเจ็กต์ Java ที่ใช้ Gradle
- ไฟล์
build.gradle
มีทรัพยากร Dependency ของ firebase-admin SDK ที่เพิ่มเข้ามาแล้ว SDK นี้ให้สิทธิ์เข้าถึงฟังก์ชันการส่งข้อความ FCM ต่างๆ
- สุดท้ายมี 2 ชั้นเรียน ได้แก่
FcmSender.java
: ชั้นเรียนนี้มีวิธีการจดบันทึกต่อไปนี้:initFirebaseSDK
: เริ่มต้น SDK ผู้ดูแลระบบ FirebasesendMessageToFcmRegistrationToken
: ส่งข้อความไปยังโทเค็นการลงทะเบียน FCMsendMessageToFcmTopic
: ส่งข้อความไปยังหัวข้อ FCMsendMessageToFcmTopicCondition
: ส่งข้อความไปยังเงื่อนไขหัวข้อ FCM
FcmSubscriptionManager.java
: ชั้นเรียนนี้มีเมธอดที่อนุญาตให้จัดการการสมัครรับหัวข้อจากฝั่งเซิร์ฟเวอร์initFirebaseSDK
: เริ่มต้น SDK ผู้ดูแลระบบ FirebasesubscribeFcmRegistrationTokensToTopic
: สมัครใช้บริการโทเค็นการลงทะเบียน FCM ในหัวข้อ FCMunsubscribeFcmRegistrationTokensFromTopic
: ยกเลิกการสมัครโทเค็นการลงทะเบียน FCM จากหัวข้อ FCM
การตั้งค่ารหัสเซิร์ฟเวอร์
- ก่อนอื่น เราต้องสร้างบัญชีบริการ Firebase ที่อนุญาตให้ผู้ดูแลระบบ Firebase SDK ให้สิทธิ์การเรียก FCM API
- ไปที่คอนโซล Firebase คลิกไอคอนรูปเฟืองถัดจากภาพรวมโครงการในแถบนำทางด้านซ้าย แล้วเลือกการตั้งค่าโปรเจ็กต์
- ในหน้าการตั้งค่า ให้เลือกบัญชีบริการ แล้วคลิกสร้างบัญชีบริการ
- จากนั้นคลิกปุ่มสร้างคีย์ส่วนตัวใหม่ แล้วระบบจะดาวน์โหลดไฟล์คีย์โดยอัตโนมัติ
- เปลี่ยนชื่อไฟล์คีย์เป็น
service-account.json
แล้วคัดลอกไว้ในโฟลเดอร์messaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resources
- ทั้ง
FcmSender.java
และFcmSubscriptionManager.java
จะโหลดไฟล์service-account.json
จาก classpath โดยใช้โค้ดต่อไปนี้
- ณ จุดนี้ รหัสเซิร์ฟเวอร์พร้อมแล้ว เรียกใช้บิลด์ -> สร้างโปรเจ็กต์จากแถบเมนูด้านบน
การส่งข้อความทดสอบ
- ใน
FcmSender.java
ให้ค้นหาฟังก์ชันsendMessageToFcmRegistrationToken
แล้วแทรกโทเค็นการลงทะเบียน FCM ที่คัดลอกมาจากส่วนเรียกใช้แอปเริ่มต้นลงในช่องregistrationToken
- ในฟังก์ชัน
main
ให้ยกเลิกการเลือกเฉพาะฟังก์ชันsendMessageToFcmRegistrationToken
แล้วคลิกเรียกใช้เพื่อเรียกใช้โค้ด- ดูวิธีที่ตั้งค่าโทเค็นการลงทะเบียน FCM ในช่อง
Token
ของออบเจ็กต์message
- นอกจากนี้ โปรดดูวิธีที่เราใช้
send
API ของอินเทอร์เฟซFirebaseMessaging
- ดูวิธีที่ตั้งค่าโทเค็นการลงทะเบียน FCM ในช่อง
- ซึ่งจะส่งข้อความไปยังอินสแตนซ์ของแอปที่คุณตั้งค่าไว้ในขั้นตอนก่อนหน้า
- เมื่ออินสแตนซ์ของแอปอยู่เบื้องหน้า คุณควรจะเห็นว่ามีการบันทึกเนื้อหาข้อความแล้ว
- และเมื่ออินสแตนซ์แอปอยู่ในเบื้องหลัง คุณจะสังเกตเห็นว่าข้อความปรากฏในถาดการแจ้งเตือน
เยี่ยมมาก คุณใช้ Firebase Admin SDK เพื่อส่งข้อความไปยังอินสแตนซ์ของแอป อ่านเพิ่มเติมเกี่ยวกับการใช้ Firebase Admin SDK ในเซิร์ฟเวอร์ของคุณ
6. ติดตั้งใช้งานหัวข้อ / ยกเลิกการสมัครสมาชิก
ในขั้นตอนนี้ คุณจะใช้การสมัครหัวข้อและยกเลิกการสมัครรับข้อมูลบนปุ่มสลับ "หมวดหมู่หุ้น" ของแอป Android
เมื่อผู้ใช้แอปสลับสวิตช์สำหรับหมวดหมู่หุ้นหนึ่งๆ จะมีการติดตามหัวข้อหรือการเรียกเพื่อยกเลิกการสมัคร
ตรวจสอบโค้ด
- ไปที่ชั้นเรียน
SubscriptionAdapter.java
ในโค้ดแอป Android และค้นหาชั้นเรียนRecyclerViewViewHolder
- เครื่องมือสร้างชั้นเรียนจะตั้งค่า Listener สำหรับการสลับการสมัครใช้บริการโดยใช้
setOnCheckedChangeListener
- การดำเนินการติดตามและยกเลิกการสมัครจะดำเนินการโดยการเรียกใช้เมธอด
subscribeToStockCategory
และunsubscribeFromStockCategory
ตามลำดับ ทั้งนี้ขึ้นอยู่กับการเปิด/ปิดสวิตช์ onBindViewHolder
ของอะแดปเตอร์ RecyclerView เรียกใช้เมธอดsetData
เพื่อเชื่อมโยง ViewHolder กับหมวดหมู่คลังที่เหมาะสม
ใช้การติดตามหัวข้อ
- ในเมธอด
subscribeToStockCategory
คุณจะใช้การเรียก API ของsubscribeToTopic
ของออบเจ็กต์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(); }); }
ใช้การยกเลิกการสมัครรับข้อมูล
- ในทำนองเดียวกัน ในเงื่อนไขอื่น คุณจะใช้การเรียก
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(); }); }
มาลองใช้กันเลย
- เรียกใช้แอปและสลับตัวเลือก "หมวดหมู่หุ้น" เพื่อเรียกใช้การดำเนินการ "สมัคร" และ "ยกเลิกการสมัคร" ซึ่งจะมีลักษณะดังนี้
สมัครรับข้อมูล | ยกเลิกการสมัคร |
7. การส่งข้อความหัวข้อแรกของคุณ
ในขั้นตอนนี้ คุณจะได้ติดตั้งโค้ดฝั่งเซิร์ฟเวอร์เพื่อส่งข้อความหัวข้อ FCM
ใช้การผสานรวมฝั่งเซิร์ฟเวอร์สำหรับการส่งข้อความหัวข้อ
- ในโค้ดเซิร์ฟเวอร์ ให้ไปที่
FcmSender.java
แล้วค้นหาเมธอดชื่อsendMessageToFcmTopic
- ในบรรทัดแรก ให้ระบุหัวข้อ FCM ที่คุณต้องการส่งข้อความถึง
- โดยเป็นสตริงในรูปแบบ
/topics/<Topic Name>
เช่น/topics/Technology
- โดยเป็นสตริงในรูปแบบ
- ในบรรทัดถัดไป ให้สร้างออบเจ็กต์
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();
- ตอนนี้ให้เพิ่มการเรียกใช้ไปยังอินสแตนซ์
FirebaseMessaging
เพื่อส่งข้อความ (เหมือนกับการเรียกส่งในฟังก์ชันsendMessageToFcmRegistrationToken
)
FirebaseMessaging.getInstance().send(message);
- สุดท้าย ให้อัปเดตฟังก์ชัน
main
และเปิดใช้การเรียกไปยังฟังก์ชันsendMessageToFcmTopic
เท่านั้น
ส่งข้อความและตรวจสอบใบเสร็จ
- ก่อนที่จะส่งข้อความหัวข้อ ก่อนอื่นให้ตรวจสอบว่าอินสแตนซ์ของแอปของคุณได้สมัครรับข้อมูลกับหัวข้อที่คุณต้องการส่งแล้ว
- ซึ่งทำได้โดยการพลิกปุ่มเปิด/ปิดที่เกี่ยวข้อง เช่น
- ตอนนี้คุณส่งข้อความของหัวข้อได้แล้วโดยเรียกใช้ฟังก์ชัน
main
ของFcmSender.java
- และน่าจะดูใบรับข้อความบนอินสแตนซ์ของแอปได้ด้วยเช่นกัน
- อินสแตนซ์ของแอปในเบื้องหน้า
- อินสแตนซ์ของแอปในพื้นหลัง
- โบนัส: ลองยกเลิกการสมัครรับหัวข้อที่คุณส่งถึง แล้วส่งข้อความอีกครั้ง คุณจะสังเกตเห็นว่าระบบไม่ส่งข้อความไปยังอินสแตนซ์ของแอป
8. การส่งข้อความเงื่อนไขหัวข้อข้อความแรกของคุณ
ฟีเจอร์เงื่อนไขของหัวข้อช่วยให้คุณส่งข้อความไปยังหัวข้อต่างๆ ร่วมกันได้ ซึ่งจะช่วยให้คุณระบุการกําหนดกลุ่มเป้าหมายที่ชัดเจนยิ่งขึ้นได้
ตัวอย่างเช่น ในแอป StockNews ของเรา ให้พิจารณาความเป็นไปได้ที่จะส่งข้อความไปยังกลุ่มอินสแตนซ์แอปที่สมัครรับข้อมูลหัวข้อเทคโนโลยีหรือยานยนต์ กรณีเช่นนี้อาจเกิดขึ้น เช่น หากมีเหตุการณ์สําคัญเกี่ยวกับ Waymo
Topics ช่วยให้คุณแสดงชุดค่าผสมในรูปแบบของนิพจน์บูลีนโดยใช้โอเปอเรเตอร์ต่อไปนี้
- && : ตรรกะ AND เช่น
'Technology' in topics && 'Automotive' in topics
- กำหนดเป้าหมายเฉพาะอินสแตนซ์แอปที่สมัครใช้บริการทั้งหัวข้อเทคโนโลยีและยานยนต์ - || : ตรรกะ OR เช่น
'Technology' in topics || 'Automotive' in topics
- กำหนดเป้าหมายอินสแตนซ์ของแอปที่สมัครรับข้อมูลหัวข้อเทคโนโลยีหรือยานยนต์ - () : เครื่องหมายวงเล็บสำหรับการจัดกลุ่ม เช่น
'Technology' in topics && ('Automotive' in topics || 'Energy' in topics)
- กำหนดเป้าหมายเฉพาะอินสแตนซ์ของแอปที่สมัครใช้บริการหัวข้อเทคโนโลยีและหัวข้อยานยนต์หรือพลังงาน
อ่านเพิ่มเติมเกี่ยวกับวิธีสร้างคำขอส่งเพื่อใช้ฟังก์ชันนี้
ใช้การผสานรวมฝั่งเซิร์ฟเวอร์สำหรับการส่งข้อความเงื่อนไขหัวข้อ
- กลับไปที่โค้ดเซิร์ฟเวอร์ แล้วไปที่
FcmSender.java
แล้วค้นหาเมธอดชื่อsendMessageToFcmTopicCondition
- ในบรรทัดแรก ให้ระบุเงื่อนไขของหัวข้อที่ต้องการส่งข้อความถึงสำหรับตัวแปร
topicCondition
คุณสามารถตั้งค่าเป็น:'Technology' in topics && 'Automotive' in topics
- ในบรรทัดถัดไป ให้สร้างออบเจ็กต์
message
ใหม่ (คล้ายกับออบเจ็กต์ที่กำหนดไว้ในฟังก์ชันsendMessageToFcmTopic
)- ความแตกต่างจะอยู่ที่การตั้งค่าช่อง
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();
- ตอนนี้ให้เพิ่มการเรียกใช้ไปยังอินสแตนซ์
FirebaseMessaging
เพื่อส่งข้อความ (เหมือนกับการเรียกส่งในฟังก์ชันsendMessageToFcmTopic
)
FirebaseMessaging.getInstance().send(message);
- สุดท้าย ให้อัปเดตฟังก์ชัน
main
และเปิดใช้การเรียกไปยังฟังก์ชันsendMessageToFcmTopicCondition
เท่านั้น
ส่งข้อความและตรวจสอบใบเสร็จ
- ก่อนส่งข้อความหัวข้อ ก่อนอื่นให้ตรวจสอบว่าอินสแตนซ์ของแอปเป็นไปตามเงื่อนไขของหัวข้อที่ระบุโดยสมัครใช้บริการอินสแตนซ์ของแอปทั้งหัวข้อเทคโนโลยีและยานยนต์
- ตอนนี้คุณส่งข้อความของหัวข้อได้แล้วโดยเรียกใช้ฟังก์ชัน
main
ของFcmSender.java
- คุณควรดูใบเสร็จข้อความบนอินสแตนซ์ของแอปได้เช่นเดียวกับก่อนหน้านี้
- อินสแตนซ์ของแอปในเบื้องหน้า
- อินสแตนซ์ของแอปในพื้นหลัง
- โบนัส: ตอนนี้คุณยกเลิกการสมัครหัวข้อเทคโนโลยีและส่งข้อความเงื่อนไขหัวข้ออีกครั้งได้แล้ว คุณควรสังเกตเห็นว่าอินสแตนซ์ของแอปไม่ได้รับข้อความ
9. สรุปการแข่งขัน
มาสรุปสิ่งที่คุณได้เรียนรู้จนถึงจุดนี้กันแบบคร่าวๆ
- วิธีเริ่มการสมัครใช้บริการ / ยกเลิกการสมัครตามหัวข้อจากอินสแตนซ์แอป
- การส่งข้อความไปยังหัวข้อและยืนยันใบเสร็จในอินสแตนซ์แอปที่สมัครรับข้อมูล
- การส่งข้อความไปยังเงื่อนไขของหัวข้อและยืนยันการรับในอินสแตนซ์ของแอปที่เป็นไปตามเงื่อนไข
ในส่วนถัดไป คุณจะได้ดูวิธีสมัครใช้บริการ / ยกเลิกการสมัครอินสแตนซ์ของแอปสำหรับหัวข้อต่างๆ โดยไม่ต้องสร้างการเรียกจากฝั่งไคลเอ็นต์
10. จัดการการสมัครรับข้อมูลหัวข้อจากฝั่งเซิร์ฟเวอร์
ก่อนหน้านี้ใน Codelab นี้ การสมัครใช้บริการตามหัวข้อและการเรียกใช้การยกเลิกการสมัครใช้บริการทั้งหมดจะเริ่มจากอินสแตนซ์ของแอป
แต่ในบางกรณี คุณอาจต้องการจัดการการสมัครรับข้อมูลหัวข้อจากฝั่งเซิร์ฟเวอร์ ตัวอย่างเช่น คุณอาจต้องการสมัครรับข้อมูลกลุ่มย่อยของฐานผู้ใช้ที่มีอยู่สำหรับหัวข้อใหม่โดยไม่ต้องรอการเปิดตัวแอป
ในส่วนนี้ คุณจะได้รู้วิธีใช้ Firebase Admin SDK เพื่อสมัครใช้บริการและยกเลิกการรับข่าวสารกลุ่มโทเค็นการลงทะเบียน FCM ในหัวข้อหนึ่งๆ โดยการเรียกใช้จากฝั่งเซิร์ฟเวอร์
ติดตั้งใช้งานการสมัครใช้บริการฝั่งเซิร์ฟเวอร์ของโทเค็นการลงทะเบียน FCM กับหัวข้อ FCM
- ในโค้ดเซิร์ฟเวอร์ ให้ข้ามไปที่ชั้นเรียน
FcmSubscriptionManager.java
ค้นหาเมธอดชื่อsubscribeFcmRegistrationTokensToTopic
คุณจะใช้การเรียกsubscribeToTopic
API ที่นี่
- มาสมัครใช้บริการอินสแตนซ์ของแอปในหัวข้อพลังงานกัน ซึ่งทำได้โดยการระบุข้อมูลสำหรับสองฟิลด์ต่อไปนี้ก่อน:
registrationTokens
: รายการสตริงที่คั่นด้วยเครื่องหมายจุลภาคซึ่งแสดงโทเค็นการลงทะเบียน FCM ที่คุณต้องการสร้างการสมัครรับข้อมูลหัวข้อtopicName
: ชื่อหัวข้อพลังงาน เช่น/topics/Energy
- ในไม่กี่บรรทัดถัดไป ให้ใช้การเรียกพร้อมกับบรรทัดต่อไปนี้
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic( registrationTokens, topicName);
- คุณตรวจสอบ
TopicManagementResponse
เพื่อดูสถิติผลลัพธ์ในระดับสูงได้ เช่น การพิมพ์จำนวนการสมัครรับข้อมูลหัวข้อที่สร้างสำเร็จโดยใช้getSuccessCount
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
- สุดท้าย ในฟังก์ชัน
main
จะเปิดใช้การเรียกไปยังฟังก์ชันsubscribeFcmRegistrationTokensToTopic
เท่านั้น
สร้างการสมัครใช้บริการและส่งข้อความหัวข้อ
- ณ จุดนี้ คุณพร้อมที่จะสร้างการสมัครรับข้อมูลหัวข้อและส่งข้อความถึงหัวข้อนั้นแล้ว
- ใช้ฟังก์ชัน
main
ของคลาสFcmSubscriptionManager.java
การดำเนินการนี้จะสร้างการสมัครรับข้อมูลตามหัวข้อ - ทีนี้ก็ตั้งค่ารหัสเพื่อส่งข้อความได้เลย เช่นเดียวกับก่อนหน้านี้
- ใน
FcmSender.java
ให้ค้นหาฟังก์ชันsendMessageToFcmTopic
- ตั้งค่า
topicName
เป็นหัวข้อพลังงาน กล่าวคือ/topics/Energy
- สร้างออบเจ็กต์
Message
และกำหนดเป้าหมายไปยังหัวข้อโดยใช้setTopic
- สุดท้าย ให้อัปเดตเมธอด
main
เพื่อเปิดใช้เฉพาะฟังก์ชันsendMessageToFcmTopic
- ใน
- ใช้ฟังก์ชัน
main
ของFcmSender.java
วิธีนี้จะส่งข้อความไปยังอินสแตนซ์ของแอปและคุณสามารถดูได้ในแอปดังนี้- อินสแตนซ์ของแอปในเบื้องหน้า
- อินสแตนซ์ของแอปในพื้นหลัง
ใช้งานการยกเลิกการสมัครใช้บริการฝั่งเซิร์ฟเวอร์ของโทเค็นการลงทะเบียน FCM ในหัวข้อ FCM
- สำหรับการเลิกติดตามหัวข้อฝั่งเซิร์ฟเวอร์ ให้ใช้
unsubscribeFromTopic
API นี้ คุณจะเพิ่มโค้ดที่เกี่ยวข้องลงในฟังก์ชันunsubscribeFcmRegistrationTokensFromTopic
ของคลาสFcmSubscriptionManager.java
- การติดตั้งโค้ดสำหรับยกเลิกการสมัครฝั่งเซิร์ฟเวอร์และตรวจสอบผลลัพธ์ด้วยการส่งข้อความหัวข้อถือเป็นแบบฝึกหัดสำหรับคุณ
11. ขอแสดงความยินดี
ขอแสดงความยินดี คุณใช้หัวข้อ FCM เพื่อส่งข้อความมัลติแคสต์ไปยังกลุ่มย่อยของอินสแตนซ์แอปสำเร็จแล้ว ซึ่งจะช่วยให้คุณเข้าถึงผู้ใช้ได้อย่างรวดเร็วด้วยเนื้อหาที่เกี่ยวข้อง
ขั้นตอนถัดไปคือ
ตอนนี้คุณทำ Codelab เสร็จสมบูรณ์แล้ว ลองพิจารณาลองใช้หัวข้อสำหรับแพลตฟอร์มอื่นๆ โดยใช้คำแนะนำต่อไปนี้
เอกสารอ้างอิง
- การอ้างอิง API ของ Android ( Java / Kotlin)
- เอกสารอ้างอิง API สำหรับ iOS ( ObjectiveC / Swift)
- การอ้างอิง JavaScript API ( เวอร์ชัน 9 / เวอร์ชัน 8)
- ข้อมูลอ้างอิง SDK ของผู้ดูแลระบบ ( Node.js / Java / Python / .NET)