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 นี้เพื่อวัตถุประสงค์ของ Codelab นี้ คลิก ดำเนินการต่อ
- คลิก สร้างโครงการ
ยินดีด้วย! คุณเพิ่งสร้างโครงการ Firebase ของคุณ ตอนนี้คุณสามารถคลิกที่ชื่อโครงการเพื่อเข้าสู่คอนโซลได้
3. การกำหนดค่าแอป Firebase เฉพาะแพลตฟอร์ม
การเปลี่ยนแปลงโค้ดส่วนใหญ่ที่จำเป็นในการเปิดใช้งานการสนับสนุน Firebase ได้รับการเช็คอินในโครงการที่คุณกำลังทำงานอยู่แล้ว อย่างไรก็ตาม ในการเพิ่มการรองรับแพลตฟอร์มมือถือ คุณต้อง:
- ลงทะเบียนแพลตฟอร์มที่ต้องการในโปรเจ็กต์ Firebase
- ดาวน์โหลดไฟล์การกำหนดค่าเฉพาะแพลตฟอร์ม และเพิ่มลงในโค้ด
เพื่อวัตถุประสงค์ของ Codelab นี้ เราจะเพิ่มแอป Android Firebase
กำหนดค่าแอนดรอยด์
- ใน คอนโซล 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 Console
- คัดลอกไฟล์
google-services.json
(ที่คุณเพิ่งดาวน์โหลด) ไปยังไดเรกทอรีmessaging/fcm-topics-codelab/starter/StockNewsApp/app
4. สร้างและเรียกใช้แอปของคุณ
คุณพร้อมที่จะเริ่มทำงานกับแอปของคุณแล้ว! ขั้นแรก สร้างและรันแอป
นำเข้าแอปเริ่มต้น
เริ่ม Android Studio และนำเข้า messaging/fcm-topics-codelab/starter/StockNewsApp
จากไดเร็กทอรีโค้ดเริ่มต้น
หลังจากโหลดโปรเจ็กต์แล้ว คุณอาจเห็นการแจ้งเตือนว่า Git ไม่ได้ติดตามการเปลี่ยนแปลงในเครื่องทั้งหมดของคุณ คุณสามารถคลิก " เพิกเฉย " หรือ " X " ที่มุมขวาบน (คุณจะไม่ผลักดันการเปลี่ยนแปลงใด ๆ กลับไปที่ repo Git)
ที่มุมซ้ายบนของหน้าต่างโปรเจ็กต์ คุณจะเห็นสิ่งที่คล้ายกับรูปภาพด้านล่างหากคุณอยู่ในมุมมอง 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
คลาส AndroidApplication
ยังมีชื่อStockNewsApplication
อีกด้วย- คลาสนี้จะเป็นคลาสแรกที่จะสร้างอินสแตนซ์เมื่อแอปเริ่มทำงาน
- ในฟังก์ชัน
onCreate
ของคลาสStockNewsApplication
การเรียกการสร้างโทเค็นการลงทะเบียน FCM จะถูกเพิ่ม มันจะสร้างโทเค็นการลงทะเบียน FCM ที่ถูกต้องและบันทึกไว้
-
MainActivity.java
เพิ่มRecyclerView
ที่แสดงตัวเลือกหมวดหมู่สต็อก -
SubscriptionAdapter.java
ใช้RecyclerView.Adapter
ซึ่งดึงหน้าจอการเลือกหมวดหมู่สต็อก- หมวดหมู่หุ้นแต่ละหมวดหมู่จะมีชื่อและปุ่มสลับการสมัครอยู่ข้างๆ
- การเปลี่ยนปุ่มสลับควรทำการโทรสมัครสมาชิก / ยกเลิกการสมัครหัวข้อ FCM
- คุณจะใช้การโทรเหล่านี้ในส่วนต่อๆ ไป
- คลาส
model/StockCategories.java
มีรายการหมวดหมู่หุ้นทั้งหมดและชื่อหัวข้อที่เกี่ยวข้อง
เรียกใช้แอปเริ่มต้น
- เชื่อมต่ออุปกรณ์ Android ของคุณเข้ากับคอมพิวเตอร์หรือเริ่มโปรแกรมจำลอง
- ในแถบเครื่องมือด้านบน ให้เลือกอุปกรณ์ Android หรือโปรแกรมจำลองเป้าหมายของคุณ แล้วกดปุ่มเรียกใช้
- UI ของแอปจะมีลักษณะดังนี้:
- แอปจะสร้างโทเค็นการลงทะเบียน FCM และเข้าสู่ระบบ อย่างไรก็ตาม จะไม่มีอะไรเปลี่ยนแปลงใน App UI
- คัดลอกและบันทึกโทเค็นการลงทะเบียน FCM เนื่องจากจะใช้ในขั้นตอนถัดไป
5. ส่งข้อความทดสอบ
ตอนนี้คุณพร้อมที่จะส่งข้อความทดสอบไปยังอินสแตนซ์ของแอปที่คุณได้ตั้งค่าไว้ในขั้นตอนสุดท้ายแล้ว
นำเข้ารหัสเซิร์ฟเวอร์เริ่มต้น
เริ่ม IntelliJ IDEA และเปิดโครงการ messaging/fcm-topics-codelab/starter/StockNewsServer
มุมมองโครงการในแถบนำทางด้านซ้ายของคุณควรมีลักษณะดังนี้:
โปรดทราบว่าอาจใช้เวลาสักครู่เพื่อให้ IntellIj IDEA สร้างโปรเจ็กต์ของคุณ รวมถึงการดึงการขึ้นต่อกันที่จำเป็น
ทำความเข้าใจกับโค้ดเริ่มต้นของเซิร์ฟเวอร์
- รหัสเริ่มต้นเซิร์ฟเวอร์เป็นโครงการ Java ที่ใช้ Gradle
- ไฟล์
build.gradle
มีการพึ่งพา SDK ผู้ดูแลระบบ firebase ที่เพิ่มเข้าไปแล้ว SDK นี้ให้การเข้าถึงฟังก์ชันการส่งข้อความ FCM ต่างๆ
- สุดท้ายมี 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
-
-
การตั้งค่ารหัสเซิร์ฟเวอร์
- ขั้นแรก เราต้องตั้งค่าบัญชีบริการ Firebase ที่อนุญาตให้ SDK ผู้ดูแลระบบ firebase อนุญาตการเรียกไปยัง FCM API
- ไปที่คอนโซล Firebase คลิกไอคอนรูปเฟืองถัดจาก ภาพรวมโครงการ ในแถบนำทางด้านซ้าย และเลือก การตั้งค่าโครงการ
- ในหน้าการตั้งค่า ให้เลือก บัญชีบริการ และคลิก สร้างบัญชีบริการ
- ตอนนี้คลิกที่ปุ่ม สร้างคีย์ส่วนตัวใหม่ และการดาวน์โหลดไฟล์คีย์ของคุณโดยอัตโนมัติจะเริ่มต้นขึ้น
- เปลี่ยนชื่อไฟล์คีย์เป็น
service-account.json
และคัดลอกลงในโฟลเดอร์messaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resources
- ทั้ง
FcmSender.java
และFcmSubscriptionManager.java
โหลดไฟล์service-account.json
จาก classpath โดยใช้โค้ดต่อไปนี้
- ณ จุดนี้ รหัสเซิร์ฟเวอร์พร้อมแล้ว เรียกใช้ Build -> Build Project จากแถบเมนูด้านบน
ส่งข้อความทดสอบ
- ใน
FcmSender.java
ค้นหาฟังก์ชันsendMessageToFcmRegistrationToken
และแทรกโทเค็นการลงทะเบียน FCM ที่คุณคัดลอกมาจากส่วน Run the Starter App ลงในฟิลด์registrationToken
- ในฟังก์ชัน
main
ให้ยกเลิกหมายเหตุเฉพาะฟังก์ชันsendMessageToFcmRegistrationToken
แล้วคลิกเรียกใช้เพื่อรันโค้ด- สังเกตวิธีการตั้งค่าโทเค็นการลงทะเบียน FCM ลงในฟิลด์
Token
ของออบเจ็message
- นอกจากนี้ สังเกตว่าเราใช้
send
API ของอินเทอร์เฟซFirebaseMessaging
อย่างไร
- สังเกตวิธีการตั้งค่าโทเค็นการลงทะเบียน FCM ลงในฟิลด์
- สิ่งนี้ควรส่งข้อความไปยังอินสแตนซ์ของแอปที่คุณได้ตั้งค่าไว้ในขั้นตอนก่อนหน้า
- เมื่ออินสแตนซ์ของแอปอยู่เบื้องหน้า คุณจะเห็นเนื้อหาข้อความถูกบันทึกไว้
- และเมื่ออินสแตนซ์ของแอปอยู่ในพื้นหลัง คุณจะสังเกตเห็นข้อความปรากฏขึ้นในถาดการแจ้งเตือน
เยี่ยมมาก คุณใช้ Firebase Admin SDK เพื่อส่งข้อความไปยังอินสแตนซ์ของแอป อ่านเพิ่มเติมเกี่ยวกับ การใช้ Firebase Admin SDK ในเซิร์ฟเวอร์ของคุณ
6. ดำเนินการสมัครสมาชิกหัวข้อ / ยกเลิกการสมัครสมาชิก
ในขั้นตอนนี้ คุณจะใช้การดำเนินการสมัครสมาชิกหัวข้อและยกเลิกการสมัครสมาชิก บนสลับหมวดหมู่หุ้นของแอป Android
เมื่อผู้ใช้แอปสลับสวิตช์สำหรับหมวดหมู่หุ้นเฉพาะ จะมีการสมัครสมาชิกหัวข้อหรือยกเลิกการสมัครสมาชิก
ตรวจสอบรหัส
- ไปที่คลาส
SubscriptionAdapter.java
ในโค้ด Android App และค้นหาคลาสRecyclerViewViewHolder
- ตัวสร้างคลาสตั้งค่า Listener สำหรับการสลับการสมัครสมาชิกโดยใช้
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(); }); }
ดำเนินการยกเลิกการสมัครหัวข้อ
- ในทำนองเดียวกัน ในเงื่อนไข 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(); }); }
เรามาลองดูกัน
- เรียกใช้แอปและสลับตัวเลือกหมวดหมู่หุ้นเพื่อดำเนินการสมัครสมาชิกและยกเลิกการสมัคร มันจะมีลักษณะเช่นนี้:
ติดตาม | ยกเลิกการสมัคร |
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 ช่วยให้คุณสามารถแสดงชุดค่าผสมของคุณในรูปแบบของนิพจน์บูลีนโดยใช้ตัวดำเนินการต่อไปนี้
- && : ตรรกะและ ตัวอย่างเช่น
'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
เพื่อส่งข้อความ (เหมือนกับการเรียก send ที่ทำในฟังก์ชันsendMessageToFcmTopic
)
FirebaseMessaging.getInstance().send(message);
- สุดท้าย อัปเดตฟังก์ชัน
main
และเปิดใช้งานการเรียกเฉพาะฟังก์ชันsendMessageToFcmTopicCondition
ส่งข้อความและตรวจสอบใบเสร็จรับเงิน
- ก่อนที่จะส่งข้อความหัวข้อ ขั้นแรกตรวจสอบให้แน่ใจว่าอินสแตนซ์แอปของคุณตรงตามเงื่อนไขหัวข้อที่ระบุโดยการสมัครอินสแตนซ์แอปสำหรับทั้งหัวข้อเทคโนโลยีและยานยนต์
- ตอนนี้คุณสามารถส่งข้อความหัวข้อของคุณได้โดยดำเนินการฟังก์ชัน
main
ของFcmSender.java
- เช่นเดียวกับเมื่อก่อน คุณควรสังเกตการรับข้อความบนอินสแตนซ์ของแอปได้
- อินสแตนซ์ของแอปในเบื้องหน้า
- อินสแตนซ์ของแอปในเบื้องหลัง
- โบนัส: ตอนนี้คุณสามารถยกเลิกการสมัครจากหัวข้อเทคโนโลยีและส่งข้อความเงื่อนไขของหัวข้ออีกครั้งได้ คุณควรสังเกตว่าอินสแตนซ์ของแอปไม่ได้รับข้อความ
9. สรุป
เรามาสรุปสิ่งที่คุณได้เรียนรู้มาจนถึงจุดนี้กันดีกว่า
- วิธีเริ่มต้นการสมัครสมาชิกหัวข้อ / ยกเลิกการสมัครสมาชิกจากอินสแตนซ์ของแอป
- การส่งข้อความไปยังหัวข้อและตรวจสอบการรับบนอินสแตนซ์ของแอปที่สมัครเป็นสมาชิก
- การส่งข้อความไปยังหัวข้อ Condition และการตรวจสอบการรับบนอินสแตนซ์ของแอปที่ตรงตามเงื่อนไข
ในส่วนถัดไป คุณจะได้เรียนรู้เกี่ยวกับวิธีการสมัคร/ยกเลิกการสมัครอินสแตนซ์ของแอปในหัวข้อต่างๆ โดยไม่จำเป็นต้องเริ่มต้นการโทรจากฝั่งไคลเอ็นต์
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 เสร็จแล้ว ให้ลองใช้หัวข้อสำหรับแพลตฟอร์มอื่นๆ โดยใช้คำแนะนำต่อไปนี้
เอกสารอ้างอิง
- การอ้างอิง Android API ( Java / Kotlin )
- การอ้างอิง iOS API ( ObjectiveC / Swift )
- การอ้างอิง Javascript API ( เวอร์ชัน 9 / เวอร์ชัน 8 )
- การอ้างอิง SDK ผู้ดูแลระบบ ( Node.js / Java / Python / .NET )