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
- ใน คอนโซล 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
- คุณไม่จำเป็นต้องมี ใบรับรองการลงนาม Debug 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 repo)
ที่มุมซ้ายบนของหน้าต่างโปรเจ็กต์ คุณควรเห็นบางอย่างเช่นรูปภาพด้านล่าง หากคุณอยู่ในมุมมอง Android (หากคุณอยู่ในมุมมอง โปรเจ็ กต์ คุณจะต้องขยายโปรเจ็กต์เพื่อดูสิ่งเดียวกัน)
โปรดทราบว่า Android Studio อาจใช้เวลาหลายวินาทีในการรวบรวมโปรเจ็กต์ในเบื้องหลังเป็นครั้งแรก ในช่วงเวลานี้ คุณจะเห็นสปินเนอร์ในแถบสถานะที่ด้านล่างของ Android Studio:
เราขอแนะนำให้คุณรอจนกว่าจะเสร็จสิ้นก่อนที่จะทำการเปลี่ยนแปลงโค้ด ซึ่งจะทำให้ Android Studio ดึงส่วนประกอบที่จำเป็นทั้งหมดเข้ามาได้
นอกจากนี้ หากคุณได้รับข้อความแจ้งว่า "โหลดซ้ำเพื่อให้การเปลี่ยนแปลงภาษามีผลหรือไม่" หรือสิ่งที่คล้ายกัน เลือก "ใช่"
การตั้งค่าโปรแกรมจำลอง
หากคุณต้องการความช่วยเหลือในการตั้งค่าตัวจำลอง Android โปรดดูบทความ เรียกใช้แอปของคุณ
ทำความเข้าใจรหัสเริ่มต้นแอป Android
- รหัสเริ่มต้นเป็นแอพ Android ที่มีน้ำหนักเบาพร้อมฟังก์ชั่นและ UI ที่น้อยที่สุด
- เพิ่มการพึ่งพา SDK การส่งข้อความ ของ firebase ลงในไฟล์
app/build.gradle
แล้ว
- ใน
AndroidManifest.xml
มีการเพิ่มตัวจัดการการโทรกลับMESSAGING_EVENT
แล้ว-
StockNewsMessagingService.java
ตัวจัดการนี้ขยายคลาสFirebaseMessagingService
ซึ่งมีฟังก์ชันที่เกี่ยวข้องกับ Firebase Cloud Messaging ที่หลากหลาย ดู เอกสาร FirebaseMessagingService เพื่อเรียนรู้เพิ่มเติม
- ฟังก์ชัน
onNewToken
จะถูกเรียกเมื่อมีการสร้างหรือรีเฟรชโทเค็นการลงทะเบียน FCM ดู ตรวจสอบการสร้างโทเค็น สำหรับข้อมูลเพิ่มเติม - ฟังก์ชัน
onMessageReceived
จะถูกเรียกเมื่อได้รับข้อความและแอปอยู่เบื้องหน้า ในปัจจุบัน มันเพียงแค่บันทึกข้อความที่ได้รับ- ดู รับข้อความในแอป Android เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับความแตกต่างระหว่างการส่งข้อความพื้นหลังและเบื้องหน้าและการจัดการ
-
- นอกจากนี้ ใน
AndroidManifest.xml
ยังมี คลาสApplication
Android ชื่อ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 อาจใช้เวลาสองสามนาทีในการสร้างโปรเจ็กต์ของคุณ รวมถึงการดึงการพึ่งพาที่จำเป็น
ทำความเข้าใจรหัสเริ่มต้นของเซิร์ฟเวอร์
- รหัสเริ่มต้นของเซิร์ฟเวอร์คือโปรเจ็กต์ Java ที่ใช้ Gradle
- ไฟล์
build.gradle
มีการพึ่งพา firebase-admin SDK ที่เพิ่มเข้าไปแล้ว SDK นี้ให้การเข้าถึงฟังก์ชันการส่งข้อความ FCM ต่างๆ
- สุดท้ายมีสองคลาส ได้แก่:
-
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
-
-
การตั้งค่ารหัสเซิร์ฟเวอร์
- อันดับแรก เราต้องตั้งค่าบัญชีบริการ Firebase ที่อนุญาตให้ firebase-admin SDK อนุญาตการเรียกใช้ FCM API
- ไปที่คอนโซล Firebase คลิกไอคอนรูปเฟืองถัดจาก ภาพรวมโครงการ ในแถบการนำทางด้านซ้ายมือ และเลือก การตั้งค่าโครงการ
- ในหน้าการตั้งค่า เลือก บัญชีบริการ แล้วคลิก สร้างบัญชีบริการ
- ตอนนี้คลิกที่ปุ่ม สร้างคีย์ส่วนตัวใหม่ และการดาวน์โหลดไฟล์คีย์ของคุณโดยอัตโนมัติจะเริ่มขึ้น
- เปลี่ยนชื่อไฟล์คีย์เป็น
service-account.json
และคัดลอกในโฟลเดอร์messaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resources
- ทั้ง
FcmSender.java
และFcmSubscriptionManager.java
โหลดไฟล์service-account.json
จาก classpath โดยใช้โค้ดต่อไปนี้
- ไปที่คอนโซล Firebase คลิกไอคอนรูปเฟืองถัดจาก ภาพรวมโครงการ ในแถบการนำทางด้านซ้ายมือ และเลือก การตั้งค่าโครงการ
- ณ จุดนี้ รหัสเซิร์ฟเวอร์พร้อมแล้ว เรียกใช้ Build -> Build Project จากแถบเมนูด้านบน
ส่งข้อความทดสอบ
- ใน
FcmSender.java
ค้นหาฟังก์ชันsendMessageToFcmRegistrationToken
และใส่โทเค็นการลงregistrationToken
FCM ที่คุณคัดลอกจาก เรียกใช้ส่วนแอปเริ่มต้น ลงในฟิลด์ registerToken - ในฟังก์ชัน
main
ให้ยกเลิกการใส่ความคิดเห็นเพียงฟังก์ชันsendMessageToFcmRegistrationToken
แล้วคลิกเรียกใช้เพื่อรันโค้ด- สังเกตว่า FCM Registration Token ถูกตั้งค่าในฟิลด์
Token
ของวัตถุmessage
- นอกจากนี้ โปรดสังเกตว่าเราใช้
send
API ของอินเทอร์เฟซFirebaseMessaging
อย่างไร
- สังเกตว่า FCM Registration Token ถูกตั้งค่าในฟิลด์
- การดำเนินการนี้ควรส่งข้อความไปยังอินสแตนซ์ของแอปที่คุณได้ตั้งค่าไว้ในขั้นตอนก่อนหน้า
- เมื่ออินสแตนซ์ของแอปอยู่เบื้องหน้า คุณควรเห็นเนื้อหาข้อความที่บันทึกไว้
- และเมื่ออินสแตนซ์ของแอปอยู่ในพื้นหลัง คุณจะสังเกตเห็นข้อความปรากฏในถาดการแจ้งเตือน
เยี่ยมมาก คุณใช้ Firebase Admin SDK เพื่อส่งข้อความไปยังอินสแตนซ์ของแอป อ่านเพิ่มเติมเกี่ยวกับ การใช้ Firebase Admin SDK ในเซิร์ฟเวอร์ของคุณ
6. ใช้การสมัครสมาชิกหัวข้อ / ยกเลิกการสมัครสมาชิก
ในขั้นตอนนี้ คุณจะใช้การดำเนินการตามหัวข้อและการยกเลิกการสมัคร ในการสลับหมวดหมู่สต็อกของแอป Android
เมื่อผู้ใช้แอพสลับสวิตช์สำหรับหมวดหมู่หุ้นเฉพาะ การสมัครรับข้อมูลตามหัวข้อหรือการโทรยกเลิกการสมัครรับข้อมูลจะเกิดขึ้น
รหัสรีวิว
- ไปที่คลาส
SubscriptionAdapter.java
ในโค้ด Android App และค้นหาคลาสRecyclerViewViewHolder
- ตัวสร้างคลาสตั้งค่าตัวฟังสำหรับการสลับการบอกรับเป็นสมาชิกโดยใช้
setOnCheckedChangeListener
- ขึ้นอยู่กับการสลับสวิตช์ การดำเนินการ
subscribeToStockCategory
และunsubscribeFromStockCategory
การสมัครจะดำเนินการโดยเรียกเมธอด - เมธอด
setData
ถูกเรียกโดยonBindViewHolder
ของ RecyclerView Adapter เพื่อผูก ViewHolder กับหมวดหมู่สต็อกที่เหมาะสม
ใช้การสมัครสมาชิกหัวข้อ
- ในเมธอด
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(); }); }
ดำเนินการยกเลิกการสมัครหัวข้อ
- ในทำนองเดียวกัน ในเงื่อนไขอื่น คุณจะต้องใช้การเรียก
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(); }); }
มาลองดูกัน
- เรียกใช้แอพและสลับตัวเลือกหมวดหมู่หุ้นเพื่อดำเนินการสมัครและยกเลิกการสมัคร มันจะมีลักษณะดังนี้:
ติดตาม | Unsubscribe |
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
หัวข้อช่วยให้คุณแสดงชุดค่าผสมของคุณในรูปแบบของนิพจน์บูลีนโดยใช้ตัวดำเนินการต่อไปนี้
- && : ตรรกะและ. ตัวอย่างเช่น
'Technology' in topics && 'Automotive' in topics
- กำหนดเป้าหมายเฉพาะอินสแตนซ์ของแอปที่สมัครรับข้อมูลจากทั้งหัวข้อเทคโนโลยีและยานยนต์ - || : ตรรกะหรือ. ตัวอย่างเช่น
'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 ที่นี่
- มาสมัครใช้งานอินสแตนซ์ของแอปในหัวข้อ Energy กันเถอะ ในการทำเช่นนั้น ก่อนอื่นให้ระบุข้อมูลสำหรับสองฟิลด์ต่อไปนี้:
- registerTokens : รายการสตริงที่คั่นด้วยเครื่องหมายจุลภาคซึ่งแสดงถึงโทเค็นการลง
registrationTokens
FCM ที่คุณต้องการสร้างการสมัครตามหัวข้อ -
topicName
: ชื่อหัวข้อสำหรับหัวข้อ Energy เช่น/topics/Energy
- registerTokens : รายการสตริงที่คั่นด้วยเครื่องหมายจุลภาคซึ่งแสดงถึงโทเค็นการลง
- ในสองสามบรรทัดถัดไป ใช้การโทรตามบรรทัดเหล่านี้:
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
เป็นหัวข้อ Energy เช่น/topics/Energy
- สร้างวัตถุ
Message
และกำหนดเป้าหมายไปที่หัวข้อโดยใช้setTopic
- สุดท้าย ให้อัปเดตวิธีการ
main
เพื่อเปิดใช้งานฟังก์ชันsendMessageToFcmTopic
เท่านั้น
- ใน
- ดำเนินการฟังก์ชั่น
main
ของFcmSender.java
การดำเนินการนี้จะส่งข้อความไปยังอินสแตนซ์แอปของคุณและคุณสามารถสังเกตได้ในแอปของคุณดังนี้- อินสแตนซ์ของแอปในเบื้องหน้า
- อินสแตนซ์ของแอปในพื้นหลัง
ใช้การยกเลิกการสมัคร FCM Registration Tokens ทางฝั่งเซิร์ฟเวอร์กับหัวข้อ FCM
- สำหรับการยกเลิกการสมัครหัวข้อฝั่งเซิร์ฟเวอร์ ให้ใช้
unsubscribeFromTopic
API นี้ คุณจะเพิ่มรหัสที่เกี่ยวข้องเพื่อunsubscribeFcmRegistrationTokensFromTopic
ฟังก์ชันFcmSubscriptionManager.java
ของคลาส FcmSubscriptionManager.java
- การใช้รหัสการยกเลิกการสมัครสมาชิกฝั่งเซิร์ฟเวอร์และการตรวจสอบความถูกต้องของผลกระทบโดยการส่งข้อความตามหัวข้อ ถือเป็นแบบฝึกหัดสำหรับคุณ
11. ขอแสดงความยินดี
ขอแสดงความยินดีที่คุณใช้หัวข้อ FCM สำเร็จในการส่งข้อความแบบหลายผู้รับไปยังกลุ่มย่อยของอินสแตนซ์แอปของคุณ วิธีนี้จะช่วยลดความซับซ้อนในการเข้าถึงผู้ใช้ของคุณด้วยเนื้อหาที่เกี่ยวข้องในเวลาที่เหมาะสม
อะไรต่อไป?
เมื่อคุณทำ Codelab เสร็จเรียบร้อยแล้ว ให้ลองลองใช้หัวข้อสำหรับแพลตฟอร์มอื่นๆ โดยใช้คำแนะนำต่อไปนี้:
เอกสารอ้างอิง
- การอ้างอิง Android API ( Java / Kotlin )
- การอ้างอิง iOS API ( ObjectiveC / Swift )
- การอ้างอิง Javascript API ( เวอร์ชัน 9 / เวอร์ชัน 8 )
- การอ้างอิง SDK ของผู้ดูแลระบบ ( Node.js / Java / Python / .NET )