1. บทนำ
เป้าหมาย
ในโค้ดแล็บนี้ คุณจะได้เรียนรู้วิธีวัดประสิทธิภาพแอปแบบหลายแพลตฟอร์มเพื่อให้ส่งข้อความพุชแบบหลายผู้รับไปยังกลุ่มย่อยต่างๆ ของอินสแตนซ์แอปได้โดยใช้หัวข้อ FCM
เมื่อเสร็จแล้ว คุณจะใช้ประโยชน์จากโครงสร้างพื้นฐานของ FCM เพื่อจัดการกลุ่มย่อยเหล่านี้ รวมถึงข้อความพุชแบบหลายผู้รับผ่านกลุ่มย่อยได้
ภาพรวมของหัวข้อ
หัวข้อเป็นวิธีที่โครงสร้างพื้นฐานของ FCM รองรับในการเข้าถึงกลุ่มย่อยของอินสแตนซ์แอปด้วยข้อความ
FCM มี API สำหรับส่งข้อความและจัดการการติดตามหัวข้อเหล่านี้ การเชื่อมโยงและยกเลิกการเชื่อมโยงอินสแตนซ์ของแอปกับหัวข้อเรียกว่าการสมัครรับข้อมูลและการยกเลิกการสมัครรับข้อมูลตามลำดับ
ควรใช้หัวข้อสำหรับเนื้อหาที่เผยแพร่ต่อสาธารณะ เช่น ข้อความเกี่ยวกับการอัปเดตสภาพอากาศ หากต้องการส่งข้อความที่ละเอียดอ่อนของผู้ใช้ ให้ใช้ Firebase Admin SDK สำหรับการส่งข้อความแบบหลายผู้รับไปยังอุปกรณ์หลายเครื่อง
การส่งแบบหลายผู้รับตามหัวข้อได้รับการเพิ่มประสิทธิภาพเพื่ออัตราการรับส่งข้อมูล
สิ่งที่คุณจะได้เรียนรู้
- วิธีติดตาม (และยกเลิกการติดตาม) หัวข้อของผู้ใช้จากแอปบนอุปกรณ์เคลื่อนที่
- วิธีส่งข้อความ Push แบบหลายผู้รับโดยใช้หัวข้อ
- วิธีส่งข้อความไปยังชุดค่าผสมของหัวข้อโดยใช้เงื่อนไขของหัวข้อ
- วิธีจัดการการสมัครรับข้อมูลหัวข้อในฝั่งเซิร์ฟเวอร์ รวมถึงการสมัครรับข้อมูลและการยกเลิกการสมัครรับข้อมูลแบบเป็นกลุ่ม
สิ่งที่คุณจะสร้าง
- แอป Android ที่สมัครรับข้อมูล/ยกเลิกการสมัครรับข้อมูลหัวข้อ และรับข้อความเมื่อมีการส่งไปยังหัวข้อ
- การผสานรวมฝั่งเซิร์ฟเวอร์โดยใช้ Firebase Admin SDK ซึ่งจะใช้เพื่อส่งข้อความตามหัวข้อผ่าน FCM API
สิ่งที่คุณต้องมี
- เบราว์เซอร์ที่คุณเลือก เช่น Chrome
- IDE IntelliJ IDEA สำหรับการพัฒนาแอปพลิเคชัน Java
- อย่าลืมเลือกใช้การรองรับ Gradle ขณะติดตั้ง
- IDE ของ Android Studio สำหรับการพัฒนาแอปพลิเคชัน 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
ทำตามขั้นตอนต่อไปนี้เพื่อเข้าถึงโค้ดเริ่มต้น โดยมี 2 ไดเรกทอรี ได้แก่ StockNewsApp
และ StockNewsServer
โดยโฟลเดอร์แรกมีแอป Android เริ่มต้น ส่วนโฟลเดอร์ที่ 2 มีโค้ดฝั่งเซิร์ฟเวอร์เริ่มต้น
git checkout fcm-topics-codelab cd messaging/fcm-topics-codelab/starter
เวอร์ชันที่เสร็จสมบูรณ์ของ Codelab นี้จะอยู่ในไดเรกทอรี messaging/fcm-topics-codelab/completed
สร้างโปรเจ็กต์ Firebase
- ลงชื่อเข้าใช้คอนโซล Firebase โดยใช้บัญชี Google
- คลิกปุ่มเพื่อสร้างโปรเจ็กต์ใหม่ แล้วป้อนชื่อโปรเจ็กต์ (เช่น
StockNews
)
- คลิกต่อไป
- หากได้รับแจ้ง ให้อ่านและยอมรับข้อกำหนดของ Firebase แล้วคลิกต่อไป
- (ไม่บังคับ) เปิดใช้ความช่วยเหลือจาก AI ในคอนโซล Firebase (เรียกว่า "Gemini ใน Firebase")
- สำหรับ Codelab นี้ คุณไม่จำเป็นต้องใช้ Google Analytics ดังนั้นให้ปิดตัวเลือก Google Analytics
- คลิกสร้างโปรเจ็กต์ รอให้ระบบจัดสรรโปรเจ็กต์ แล้วคลิกดำเนินการต่อ
ยินดีด้วย คุณเพิ่งสร้างโปรเจ็กต์ Firebase
3. การกำหนดค่าแอป Firebase เฉพาะแพลตฟอร์ม
การเปลี่ยนแปลงโค้ดส่วนใหญ่ที่จำเป็นต่อการเปิดใช้การรองรับ Firebase ได้รับการตรวจสอบในโปรเจ็กต์ที่คุณกำลังทํางานอยู่แล้ว อย่างไรก็ตาม หากต้องการเพิ่มการรองรับแพลตฟอร์มอุปกรณ์เคลื่อนที่ คุณต้องทำดังนี้
- ลงทะเบียนแพลตฟอร์มที่ต้องการในโปรเจ็กต์ Firebase
- ดาวน์โหลดไฟล์การกำหนดค่าเฉพาะแพลตฟอร์ม แล้วเพิ่มลงในโค้ด
ใน Codelab นี้ เราจะเพิ่มแอป Firebase สำหรับ Android
กำหนดค่า 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 ไม่ได้ติดตามการเปลี่ยนแปลงในเครื่องทั้งหมด คุณสามารถคลิก "Ignore" หรือ "X" ที่ด้านขวาบน (คุณจะไม่พุชการเปลี่ยนแปลงกลับไปยังที่เก็บ Git)
ที่มุมซ้ายบนของหน้าต่างโปรเจ็กต์ คุณควรเห็นสิ่งที่คล้ายกับรูปภาพด้านล่างหากอยู่ในมุมมอง Android (หากอยู่ในมุมมองโปรเจ็กต์ คุณจะต้องขยายโปรเจ็กต์เพื่อดูสิ่งเดียวกัน)
โปรดทราบว่า Android Studio อาจใช้เวลาหลายวินาทีในการคอมไพล์โปรเจ็กต์ในเบื้องหลังเป็นครั้งแรก ในระหว่างนี้ คุณจะเห็นวงกลมหมุนในแถบสถานะที่ด้านล่างของ Android Studio
เราขอแนะนำให้คุณรอจนกว่ากระบวนการนี้จะเสร็จสิ้นก่อนทำการเปลี่ยนแปลงโค้ด ซึ่งจะช่วยให้ Android Studio ดึงคอมโพเนนต์ที่จำเป็นทั้งหมดได้
นอกจากนี้ หากได้รับข้อความแจ้งว่า "โหลดซ้ำเพื่อให้การเปลี่ยนแปลงภาษามีผลไหม" หรือข้อความที่คล้ายกัน ให้เลือก "ใช่"
การตั้งค่าโปรแกรมจำลอง
หากต้องการความช่วยเหลือในการตั้งค่าโปรแกรมจำลอง Android โปรดดูบทความเรียกใช้แอป
ทำความเข้าใจโค้ดเริ่มต้นของแอป Android
- โค้ดเริ่มต้นคือแอป Android ขนาดเล็กที่มีฟังก์ชันการทำงานและ UI น้อยที่สุด
- ระบบได้เพิ่มการอ้างอิงไปยัง Firebase Messaging SDK ลงในไฟล์
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
class มีรายการหมวดหมู่หุ้นทั้งหมดและชื่อหัวข้อที่เกี่ยวข้อง
เรียกใช้แอปเริ่มต้น
- เชื่อมต่ออุปกรณ์ Android กับคอมพิวเตอร์หรือเริ่มโปรแกรมจำลอง
- ในแถบเครื่องมือด้านบน ให้เลือกอุปกรณ์ Android หรือโปรแกรมจำลองเป้าหมาย แล้วกดปุ่มเรียกใช้
- UI ของแอปจะมีลักษณะดังนี้
- แอปจะสร้างโทเค็นการลงทะเบียน FCM และบันทึกโทเค็น แต่ UI ของแอปจะไม่มีการเปลี่ยนแปลง
- คัดลอกและบันทึกโทเค็นการลงทะเบียน FCM เนื่องจากจะต้องใช้ในขั้นตอนถัดไป
5. ส่งข้อความทดสอบ
ตอนนี้คุณพร้อมที่จะส่งข้อความทดสอบไปยังอินสแตนซ์ของแอปที่คุณตั้งค่าไว้ในขั้นตอนสุดท้ายแล้ว
นำเข้าโค้ดเซิร์ฟเวอร์เริ่มต้น
เริ่ม IntelliJ IDEA แล้วเปิดmessaging/fcm-topics-codelab/starter/StockNewsServer
โปรเจ็กต์
มุมมองโปรเจ็กต์ในแถบนำทางด้านซ้ายควรมีลักษณะดังนี้
โปรดทราบว่า IntelliJ IDEA อาจใช้เวลาสักครู่ในการสร้างโปรเจ็กต์ รวมถึงดึงข้อมูลการอ้างอิงที่จำเป็น
ทำความเข้าใจโค้ดเริ่มต้นของเซิร์ฟเวอร์
- โค้ดเริ่มต้นของเซิร์ฟเวอร์คือโปรเจ็กต์ Java ที่ใช้ Gradle
- ไฟล์
build.gradle
มีทรัพยากร Dependency ใน Firebase Admin SDK เพิ่มอยู่แล้ว SDK นี้ให้สิทธิ์เข้าถึงฟังก์ชันการทำงานต่างๆ ในการส่งข้อความ FCM
- สุดท้ายนี้ มี 2 คลาส ได้แก่
FcmSender.java
: ชั้นเรียนนี้มีวิธีการจดบันทึกต่อไปนี้initFirebaseSDK
: เริ่มต้น SDK ของ firebase-adminsendMessageToFcmRegistrationToken
: ส่งข้อความไปยังโทเค็นการลงทะเบียน FCMsendMessageToFcmTopic
: ส่งข้อความไปยังหัวข้อ FCMsendMessageToFcmTopicCondition
: ส่งข้อความไปยังเงื่อนไขหัวข้อ FCM
FcmSubscriptionManager.java
: คลาสนี้มีเมธอดที่อนุญาตให้จัดการการสมัครใช้บริการหัวข้อจากฝั่งเซิร์ฟเวอร์initFirebaseSDK
: เริ่มต้น SDK ของ firebase-adminsubscribeFcmRegistrationTokensToTopic
: สมัครใช้โทเค็นการลงทะเบียน FCM กับหัวข้อ FCMunsubscribeFcmRegistrationTokensFromTopic
: ยกเลิกการสมัครรับข้อมูลโทเค็นการลงทะเบียน FCM จากหัวข้อ FCM
การตั้งค่าโค้ดเซิร์ฟเวอร์
- ก่อนอื่นเราต้องตั้งค่าบัญชีบริการ Firebase ที่อนุญาตให้ SDK ของ firebase-admin ให้สิทธิ์การเรียกใช้ 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
แล้วแทรกโทเค็นการลงทะเบียน FCM ที่คัดลอกจากส่วนเรียกใช้แอปเริ่มต้นลงในช่องregistrationToken
- ในฟังก์ชัน
main
ให้ยกเลิกการแสดงความคิดเห็นเฉพาะฟังก์ชันsendMessageToFcmRegistrationToken
แล้วคลิกเรียกใช้เพื่อดำเนินการโค้ด- สังเกตวิธีตั้งค่าโทเค็นการลงทะเบียน FCM ใน
Token
ฟิลด์ของออบเจ็กต์message
- นอกจากนี้ โปรดสังเกตว่าเราใช้ API ของ
send
ในอินเทอร์เฟซFirebaseMessaging
อย่างไร
- สังเกตวิธีตั้งค่าโทเค็นการลงทะเบียน FCM ใน
- ซึ่งควรส่งข้อความไปยังอินสแตนซ์ของแอปที่คุณตั้งค่าไว้ในขั้นตอนก่อนหน้า
- เมื่ออินสแตนซ์ของแอปอยู่เบื้องหน้า คุณควรเห็นเนื้อหาข้อความที่บันทึกไว้
- และเมื่ออินสแตนซ์ของแอปอยู่ในเบื้องหลัง คุณจะเห็นข้อความปรากฏในถาดการแจ้งเตือน
ยอดเยี่ยม คุณใช้ Firebase Admin SDK เพื่อส่งข้อความไปยังอินสแตนซ์แอป อ่านเพิ่มเติมเกี่ยวกับการใช้ Firebase Admin SDK ในเซิร์ฟเวอร์
6. ใช้การติดตาม / เลิกติดตามหัวข้อ
ในขั้นตอนนี้ คุณจะใช้การดำเนินการสมัครรับข้อมูลและยกเลิกการสมัครรับข้อมูลหัวข้อในปุ่มเปิด/ปิดหมวดหมู่หุ้นของแอป Android
เมื่อผู้ใช้แอปสลับสวิตช์สำหรับหมวดหมู่หุ้นที่เฉพาะเจาะจง ระบบจะทำการเรียกการสมัครรับข้อมูลหรือยกเลิกการสมัครรับข้อมูลหัวข้อ
รหัสรีวิว
- ไปที่คลาส
SubscriptionAdapter.java
ในโค้ดแอป Android แล้วค้นหาคลาสRecyclerViewViewHolder
- เครื่องมือสร้างคลาสจะตั้งค่า Listener สำหรับการสลับการติดตามโดยใช้
setOnCheckedChangeListener
- การดำเนินการสมัครรับข้อมูลและยกเลิกการสมัครรับข้อมูลจะดำเนินการโดยการเรียกใช้เมธอด
subscribeToStockCategory
และunsubscribeFromStockCategory
ตามลำดับ ทั้งนี้ขึ้นอยู่กับปุ่มเปิด/ปิดสวิตช์ setData
เมธอดจะถูกเรียกใช้โดยonBindViewHolder
ของ RecyclerView Adapter เพื่อเชื่อมโยง ViewHolder กับหมวดหมู่หุ้นที่เหมาะสม
ใช้การสมัครรับข้อมูลหัวข้อ
- ในเมธอด
subscribeToStockCategory
คุณจะใช้การเรียก APIsubscribeToTopic
ของออบเจ็กต์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 คุณจะใช้การเรียก API ของ
unsubscribeFromTopic
โดยมีลักษณะดังนี้
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
หัวข้อช่วยให้คุณแสดงการผสมผสานในรูปแบบของนิพจน์บูลีนได้โดยใช้โอเปอเรเตอร์ต่อไปนี้
- && : 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
class ค้นหาเมธอดที่ชื่อsubscribeFcmRegistrationTokensToTopic
คุณจะใช้การเรียก API ของsubscribeToTopic
ที่นี่
- มาสมัครรับข้อมูลอินสแตนซ์ของแอปในหัวข้อพลังงานกัน โดยก่อนอื่นให้ระบุข้อมูลสำหรับ 2 ฟิลด์ต่อไปนี้
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)
- เอกสารอ้างอิง Admin SDK ( Node.js / Java / Python / .NET)