หากคุณใช้ FCM API เพื่อสร้างคำขอส่งทางโปรแกรม คุณอาจพบว่าเมื่อเวลาผ่านไป คุณกำลังสูญเสียทรัพยากรโดยการส่งข้อความไปยังอุปกรณ์ที่ไม่ได้ใช้งานด้วยโทเค็นการลงทะเบียนที่ไม่ใช้งาน สถานการณ์นี้อาจส่งผลต่อข้อมูลการส่งข้อความที่รายงานในคอนโซล Firebase หรือข้อมูลที่ส่งออกไปยัง BigQuery ซึ่งแสดงให้เห็นว่าอัตราการส่งลดลงอย่างมาก (แต่ไม่ถูกต้องจริง) คู่มือนี้กล่าวถึงมาตรการบางอย่างที่คุณสามารถทำได้เพื่อช่วยให้มั่นใจว่าการกำหนดเป้าหมายข้อความมีประสิทธิภาพและการรายงานการจัดส่งที่ถูกต้อง
แนวทางปฏิบัติที่ดีที่สุดขั้นพื้นฐาน
มีแนวทางปฏิบัติพื้นฐานบางอย่างที่คุณควรปฏิบัติตามในแอปใดๆ ที่ใช้ FCM API เพื่อสร้างคำขอส่งทางโปรแกรม หลักปฏิบัติที่ดีที่สุดคือ:
- จัดเก็บโทเค็นการลงทะเบียนบนเซิร์ฟเวอร์ของคุณ บทบาทที่สำคัญสำหรับเซิร์ฟเวอร์คือการติดตามโทเค็นของลูกค้าแต่ละรายและเก็บรายการโทเค็นที่ใช้งานที่อัปเดต เราขอแนะนำอย่างยิ่งให้ใช้การประทับเวลาโทเค็นในโค้ดและเซิร์ฟเวอร์ของคุณ และอัปเดตการประทับเวลานี้เป็นระยะๆ
- ลบโทเค็นที่เก็บไว้ที่เก่า นอกเหนือจากการลบโทเค็นออกในกรณีที่โทเค็นตอบสนองไม่ถูกต้อง คุณอาจต้องตรวจสอบสัญญาณอื่นๆ ที่บ่งบอกว่าโทเค็นนั้นล้าสมัย คู่มือนี้จะกล่าวถึงตัวเลือกบางอย่างของคุณในการบรรลุเป้าหมายนี้
ดึงและจัดเก็บโทเค็นการลงทะเบียน
ในการเริ่มต้นแอปของคุณครั้งแรก FCM SDK จะสร้างโทเค็นการลงทะเบียนสำหรับอินสแตนซ์ของแอปไคลเอ็นต์ นี่คือโทเค็นที่คุณต้องรวมไว้ในคำขอส่งเป้าหมายจาก API หรือเพิ่มการสมัครสมาชิกหัวข้อสำหรับหัวข้อการกำหนดเป้าหมาย
ตามที่ระบุไว้ในคู่มือการตั้งค่าไคลเอ็นต์ของเรา แอปของคุณควรดึงโทเค็นนี้เมื่อเริ่มต้นใช้งานครั้งแรก และบันทึกลงในเซิร์ฟเวอร์แอปพร้อมกับการประทับเวลา การประทับเวลานี้ต้องนำไปใช้โดยโค้ดและเซิร์ฟเวอร์ของคุณ เนื่องจาก FCM SDK ไม่ได้จัดเตรียมไว้ให้คุณ
นอกจากนี้ สิ่งสำคัญคือต้องบันทึกโทเค็นลงในเซิร์ฟเวอร์และอัปเดตการประทับเวลาทุกครั้งที่มีการเปลี่ยนแปลง เช่น เมื่อ:
- แอปได้รับการกู้คืนบนอุปกรณ์ใหม่
- ผู้ใช้ถอนการติดตั้ง/ติดตั้งแอปอีกครั้ง
- ผู้ใช้ล้างข้อมูลแอป
ตรวจหาการตอบสนองโทเค็นที่ไม่ถูกต้องจากแบ็กเอนด์ FCM
ตรวจสอบให้แน่ใจว่าตรวจพบการตอบกลับโทเค็นที่ไม่ถูกต้องจาก FCM และตอบสนองด้วยการลบโทเค็นการลงทะเบียนใดๆ ที่ทราบว่าไม่ถูกต้องออกจากระบบของคุณ ด้วย HTTP v1 API ข้อความแสดงข้อผิดพลาดเหล่านี้อาจระบุว่าคำขอส่งของคุณเป็นเป้าหมายเก่าหรือโทเค็นไม่ถูกต้อง:
-
UNREGISTERED
(HTTP 404) -
INVALID_ARGUMENT
(HTTP 400)
ดู ErrorCodes สำหรับข้อมูลเพิ่มเติม
หากคุณได้รับการตอบกลับอย่างใดอย่างหนึ่งสำหรับโทเค็นเป้าหมาย คุณสามารถลบบันทึกโทเค็นนี้ได้อย่างปลอดภัย เนื่องจากโทเค็นจะไม่สามารถใช้ได้อีกต่อไป อย่างไรก็ตาม โปรดทราบว่าจะยังมีบางกรณีที่โทเค็นไม่ถูกต้อง แต่ไม่มีข้อบ่งชี้ถึงโทเค็นดังกล่าว ตัวอย่างเช่น บางครั้งแบ็กเอนด์ FCM ไม่สามารถตรวจสอบได้ว่าอุปกรณ์ออฟไลน์อย่างถาวรหรือไม่
รับรองความสดของโทเค็นการลงทะเบียน
การพิจารณาว่าโทเค็นใหม่หรือเก่านั้นไม่ตรงไปตรงมาเสมอไป เพื่อให้ครอบคลุมทุกกรณี คุณควรใช้เกณฑ์เมื่อคุณพิจารณาว่าโทเค็นล้าสมัย คำแนะนำของเราคือสองเดือน โทเค็นใดๆ ที่เก่ากว่าสองเดือนมีแนวโน้มที่จะเป็นอุปกรณ์ที่ไม่ได้ใช้งาน อุปกรณ์ที่ใช้งานจะมีการรีเฟรชโทเค็น
อัปเดตโทเค็นเป็นประจำ
เราขอแนะนำให้คุณดึงและอัปเดตโทเค็นการลงทะเบียนทั้งหมดบนเซิร์ฟเวอร์ของคุณเป็นระยะๆ คุณต้อง:
- เพิ่มตรรกะของแอปในแอปไคลเอนต์ของคุณเพื่อดึงโทเค็นปัจจุบันโดยใช้การเรียก API ที่เหมาะสม (เช่น
token(completion):
สำหรับแพลตฟอร์ม Apple หรือgetToken()
สำหรับ Android) จากนั้นส่งโทเค็นปัจจุบันไปยังเซิร์ฟเวอร์แอปของคุณเพื่อจัดเก็บ (พร้อมการประทับเวลา ). นี่อาจเป็นงานรายเดือนที่กำหนดค่าให้ครอบคลุมไคลเอ็นต์/โทเค็นทั้งหมด - เพิ่มลอจิกเซิร์ฟเวอร์เพื่ออัปเดตการประทับเวลาของโทเค็นตามช่วงเวลาปกติ ไม่ว่าโทเค็นจะเปลี่ยนไปหรือไม่ก็ตาม
ไม่ว่าคุณจะติดตามรูปแบบเวลาใด อย่าลืมอัปเดตโทเค็นเป็นระยะๆ ความถี่ในการอัปเดตเดือนละครั้งน่าจะทำให้เกิดความสมดุลที่ดีระหว่างผลกระทบของแบตเตอรี่กับการตรวจจับโทเค็นการลงทะเบียนที่ไม่ได้ใช้งาน ด้วยการรีเฟรชนี้ คุณยังมั่นใจได้ว่าอุปกรณ์ใดๆ ที่ไม่ได้ใช้งานจะรีเฟรชการลงทะเบียนเมื่อกลับมาใช้งานอีกครั้ง ไม่มีประโยชน์ที่จะรีเฟรชบ่อยกว่าทุกสัปดาห์
ยกเลิกการสมัครโทเค็นเก่าจากหัวข้อ
การจัดการการสมัครรับข้อมูลหัวข้อเพื่อลบโทเค็นการลงทะเบียนเก่าเป็นข้อควรพิจารณาอีกประการหนึ่ง ประกอบด้วยสองขั้นตอน:
- แอปของคุณควรสมัครรับหัวข้ออีกครั้งเดือนละครั้ง และ/หรือเมื่อใดก็ตามที่มีการเปลี่ยนแปลงโทเค็นการลงทะเบียน นี่เป็นแนวทางแก้ไขด้วยตนเอง ซึ่งการสมัครรับข้อมูลจะปรากฏขึ้นอีกครั้งโดยอัตโนมัติเมื่อแอปกลับมาทำงานอีกครั้ง
- หากอินสแตนซ์ของแอปไม่ได้ใช้งานเป็นเวลา 2 เดือน (หรือกรอบเวลาที่ไม่อัปเดตของคุณเอง) คุณควรยกเลิกการสมัครจากหัวข้อโดยใช้ Firebase Admin SDK เพื่อลบการแมปโทเค็น/หัวข้อจากแบ็กเอนด์ FCM
ข้อดีของสองขั้นตอนนี้คือ Fanouts ของคุณจะเกิดขึ้นเร็วขึ้น เนื่องจากมีโทเค็นเก่าให้กระจายน้อยลง และอินสแตนซ์แอปเก่าของคุณจะสมัครใหม่โดยอัตโนมัติเมื่อเปิดใช้งานอีกครั้ง
การวัดความสำเร็จของการส่งมอบ
โดยทั่วไป เราแนะนำให้กำหนดเป้าหมายข้อความตามการกระทำที่สังเกตหรือบันทึกจากอินสแตนซ์แอปที่ใช้งานอยู่ นี่เป็นสิ่งสำคัญอย่างยิ่งหากคุณส่งข้อความถึงหัวข้อที่มีสมาชิกจำนวนมากเป็นประจำ หากสมาชิกบางส่วนไม่ได้ใช้งานจริงๆ ผลกระทบต่อสถิติการจัดส่งของคุณอาจมีนัยสำคัญเมื่อเวลาผ่านไป
ก่อนกำหนดเป้าหมายข้อความเป็นโทเค็น ให้พิจารณา:
- Google Analytics, ข้อมูลที่บันทึกใน BigQuery หรือสัญญาณการติดตามอื่นๆ ระบุว่าโทเค็นทำงานอยู่หรือไม่
- ความพยายามในการจัดส่งก่อนหน้านี้ล้มเหลวอย่างต่อเนื่องในช่วงระยะเวลาหนึ่งหรือไม่
- โทเค็นการลงทะเบียนได้รับการอัปเดตบนเซิร์ฟเวอร์ของคุณในช่วงสองเดือนที่ผ่านมาหรือไม่?
- สำหรับอุปกรณ์ Android FCM Data API รายงานความล้มเหลวในการส่งข้อความเป็นเปอร์เซ็นต์สูงเนื่องจาก
droppedDeviceInactive
หรือไม่
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการจัดส่ง โปรดดูที่ การทำความเข้าใจเกี่ยวกับการส่งข้อความ