คุณมี 2 ตัวเลือกในการกำหนดลำดับความสำคัญในการส่งข้อความปลายทาง ใน Android: ได้แก่ ลำดับความสำคัญปกติและลำดับความสำคัญสูง การส่งข้อความที่มีลำดับความสำคัญปกติและสูงมีลักษณะดังนี้
ลำดับความสำคัญปกติ นี่คือลำดับความสำคัญเริ่มต้นสำหรับข้อความข้อมูลและการแจ้งเตือน ระบบจะส่งข้อความที่มีลำดับความสำคัญปกติทันทีเมื่ออุปกรณ์ไม่ได้อยู่ในโหมดสลีป เมื่ออุปกรณ์อยู่ในโหมดพักเครื่อง ระบบอาจส่งข้อความล่าช้าเพื่อประหยัดแบตเตอรี่จนกว่าอุปกรณ์จะออกจากโหมดพักเครื่อง สำหรับข้อความที่ไม่เร่งด่วน เช่น การแจ้งเตือนอีเมลใหม่ การซิงค์ UI หรือการซิงค์ข้อมูลแอปใน เบื้องหลัง ให้เลือกการส่งที่มีลำดับความสำคัญปกติ
ลำดับความสำคัญสูงFCM พยายามส่งข้อความที่มีลำดับความสำคัญสูงทันที ซึ่งช่วยให้ FCM ปลุกอุปกรณ์ที่อยู่ในโหมดสลีปได้เมื่อจำเป็น และเรียกใช้การประมวลผลบางอย่างแบบจำกัด (รวมถึงการเข้าถึงเครือข่ายแบบจำกัดมาก) โดยทั่วไปแล้ว ข้อความที่มีลำดับความสำคัญสูงควรส่งผลให้ผู้ใช้โต้ตอบ กับแอปหรือการแจ้งเตือนของแอป
การเลือกระหว่างข้อความที่มีลำดับความสำคัญสูงและปกติ
แม้ว่าข้อความที่มีลำดับความสำคัญปกติจะเหมาะสำหรับการอัปเดตทั่วไป แต่ให้เลือกข้อความที่มีลำดับความสำคัญสูงเมื่อคุณต้องการให้ส่งข้อความทันทีสำหรับเรื่องหรือการดำเนินการเร่งด่วน เนื่องจากโหมด Doze อาจส่งผลต่อเวลานำส่งข้อความที่มีลำดับความสำคัญปกติ การตั้งค่าการแจ้งเตือนส่วนใหญ่ที่ผู้ใช้เห็นเป็นลำดับความสำคัญสูงจะช่วยให้มั่นใจได้ว่าระบบจะส่งข้อความอย่างรวดเร็ว ตัวอย่างเช่น การแจ้งเตือน เช่น ข้อความแชท ปัญหาเกี่ยวกับบัญชี หรือการอัปเดตการจัดส่งอาหาร ควรตั้งค่าเป็นลำดับความสำคัญสูง
การประมวลผลข้อความสำหรับข้อความที่มีลำดับความสำคัญสูงและปกติ
สำหรับข้อความที่มีลำดับความสำคัญสูงและปกติที่ได้รับในอุปกรณ์ Android ระบบจะให้เวลาหลายวินาทีในการประมวลผลเพย์โหลดของข้อความในแฮนเดิลเลอร์ onMessageReceived โดยจะจัดสรรเวลาสำหรับข้อความที่มีลำดับความสำคัญสูงมากกว่าข้อความที่มีลำดับความสำคัญปกติเล็กน้อย เวลาที่จัดสรรไว้ควรเพียงพอต่อการแสดงการแจ้งเตือนทันที หากคุณต้องดำเนินการเพิ่มเติม เช่น โหลดรูปภาพจากพื้นที่เก็บข้อมูลของอุปกรณ์หรือเรียกเซิร์ฟเวอร์เพื่อรวบรวมเนื้อหาเพิ่มเติม คุณจะต้องทำตามขั้นตอนเพิ่มเติม
ระบบจะเรียกใช้เมธอด onMessageReceived ในเทรดผู้ปฏิบัติงานแยกต่างหาก แนวทางปฏิบัติแนะนำคือคุณควรประมวลผลเพย์โหลดของข้อความและแสดงการแจ้งเตือนทันทีภายในเมธอด onMessageReceived คุณไม่ควรทำการเรียกเครือข่ายแบบอะซิงโครนัสเพิ่มเติมหรือประมวลผลเพย์โหลดในเธรดแยกต่างหากภายในเมธอด onMessageReceived การดำเนินการดังกล่าวอาจทำให้แอปพลิเคชันอยู่นอกวงจรการทำงานที่ถูกต้องก่อนที่จะประมวลผลเพย์โหลดเสร็จสมบูรณ์ หากเกิดกรณีนี้ คุณอาจเห็นว่าข้อความ FCM บางรายการที่ส่งไปทำให้การแจ้งเตือนล่าช้าหรือหายไป
หากคุณต้องการเวลาเพิ่มเติมในการประมวลผลข้อความ เช่น เพื่อดึงข้อมูล imageUrl ที่อยู่ในเพย์โหลดของข้อความ คุณจะต้องใช้โครงสร้าง เช่น WorkManager หรือบริการที่ทำงานอยู่เบื้องหน้าเพื่อขยายวงจรการทำงานของแอปพลิเคชัน คุณควรใช้คำแนะนำต่อไปนี้เมื่อคุณ
ลบล้างเมธอด onMessageReceived เพื่อยืนยันว่าระบบประมวลผลการแจ้งเตือนเสร็จสมบูรณ์แล้ว
- สำหรับการแจ้งเตือนที่มีลำดับความสำคัญสูง: เริ่ม
งานด่วน
โดยใช้
WorkManagerของ Android เพื่อยืนยันว่าการแจ้งเตือนที่มีลำดับความสำคัญสูงได้รับเวลาในการประมวลผลที่มีลำดับความสำคัญสูง เพื่อยืนยันว่าการแสดงการแจ้งเตือนทำงานจนเสร็จสมบูรณ์ ข่าวดีคือคุณไม่ต้องกังวลว่าโควต้า งานด่วน จะหมดเนื่องจากการประมวลผล FCM ที่มีลำดับความสำคัญสูง เนื่องจากมีข้อยกเว้นชั่วคราวสำหรับงานด่วนที่กำหนดเวลาไว้ทันทีหลังจากส่งonMessageReceivedของ FCM ที่มีลำดับความสำคัญสูง - สำหรับการแจ้งเตือนที่มีลำดับความสำคัญปกติ: ให้เริ่ม
ปกติ
WorkRequestโดยใช้ AndroidWorkManagerแทน ซึ่งจะยืนยันว่าระบบจะประมวลผลงานเพิ่มเติมที่จำเป็นในการประมวลผลการแจ้งเตือนในที่สุด โดยไม่ต้องใช้การประมวลผลที่มีลำดับความสำคัญสูงและทำให้เกิดปัญหาการใช้งานแบตเตอรี่โดยไม่จำเป็น
การตั้งค่าลำดับความสำคัญสำหรับข้อความ
คุณสามารถส่งการแจ้งเตือนไปยังผู้ใช้ได้โดยใช้ Admin SDK FCM REST API และคอนโซล Firebase หากต้องการเปลี่ยนการตั้งค่าลำดับความสำคัญ จาก Admin SDK และ FCM REST API คุณต้องอัปเดตเพย์โหลด JSON ของข้อความ คุณสามารถใช้ตัวอย่างโค้ดต่อไปนี้เพื่อดูวิธีตั้งค่าลำดับความสำคัญเป็นสูง ระบบไม่รองรับการตั้งค่าช่องการแจ้งเตือนเฉพาะ Android สำหรับการแจ้งเตือนที่ส่งจากคอนโซล
{
"message": {
"notification": {
"body": "Purchase exceeding $500 detected",
"title": "Credit card purchase"
},
"data": {
"purchaser": "Your child",
"items": "Gravity Defier Sneakers"
},
"android": {
"priority": "high"
},
"apns": {
"headers": {
"apns-priority": "5"
}
}
}
}
ทดสอบการแจ้งเตือนที่มีลำดับความสำคัญสูงในโหมดพักเครื่อง
หากต้องการตรวจสอบว่าผู้ใช้ได้รับและประมวลผลการแจ้งเตือนที่มีลำดับความสำคัญสูงอย่างถูกต้อง ให้ทำตามวิธีการต่อไปนี้เพื่อทดสอบการแจ้งเตือน
- ตั้งค่าอุปกรณ์เป็นโหมดพักเครื่องโดยใช้คำแนะนำใน หัวข้อทดสอบแอปด้วยโหมดพักเครื่อง
- เข้าถึงโทเค็นการลงทะเบียน FCM จากแอปในอุปกรณ์ทดสอบ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีเข้าถึงโทเค็นได้ที่หัวข้อ ส่งข้อความทดสอบไปยังแอปเบื้องหลัง
- เมื่อได้โทเค็น FCM แล้ว ให้ส่งการแจ้งเตือนที่มีลำดับความสำคัญสูง ไปยังอุปกรณ์ทดสอบโดยใช้โค้ดการส่งการแจ้งเตือน FCM หรือ คำสั่ง cURL ที่มีพารามิเตอร์การกำหนดค่าที่ตรงกับการแจ้งเตือนที่มีลำดับความสำคัญสูง
การลดลำดับความสำคัญของ FCM ที่มีลำดับความสำคัญสูงใน Android
ข้อความที่มีลำดับความสำคัญสูงใน Android มีไว้สำหรับเนื้อหาที่เร่งด่วนและผู้ใช้มองเห็นได้ และควรส่งผลให้เกิดการแจ้งเตือนที่ผู้ใช้เห็น หาก FCM ตรวจพบรูปแบบที่ข้อความไม่ส่งผลให้เกิดการแจ้งเตือนที่ผู้ใช้เห็น ระบบอาจลดลำดับความสำคัญของข้อความเป็นลำดับความสำคัญปกติหรือ มอบหมาย ให้บริการ Google Play จัดการ
FCM จะใช้พฤติกรรมของข้อความในช่วง 7 วัน เมื่อพิจารณาว่าจะลดลำดับความสำคัญหรือส่งข้อความผ่านพร็อกซี หรือไม่ โดยจะพิจารณาแยกกันสำหรับแอปพลิเคชันแต่ละอินสแตนซ์ หากระบบแสดงการแจ้งเตือนในลักษณะที่ผู้ใช้เห็นได้เพื่อตอบสนองต่อข้อความที่มีลำดับความสำคัญสูง ข้อความที่มีลำดับความสำคัญสูงในอนาคตจะไม่ได้รับผลกระทบ
การมอบหมายการแจ้งเตือนให้บริการ Google Play
บริการ Google Play จะส่งข้อความแจ้งเตือนที่มีลำดับความสำคัญสูงซึ่งเป็นไปตามเกณฑ์บางอย่างผ่านพร็อกซีแทนที่จะลดลำดับความสำคัญ ซึ่งหมายความว่าบริการ Google Play จะแสดงการแจ้งเตือนในนามของแอปโดยไม่จำเป็นต้องเริ่มแอป การดำเนินการนี้มีขึ้นเพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานโดยรวมที่ดีขึ้นในอุปกรณ์ Android
โปรดทราบว่าข้อความแจ้งเตือนที่ส่งผ่านพร็อกซีจะทำให้เกิดการเปลี่ยนแปลงในวิธีรายงานข้อมูลวิเคราะห์ที่เกี่ยวข้องกับข้อความที่ได้รับ
- แอปของคุณต้องใช้ FCM SDK เวอร์ชัน 24.0.0 ขึ้นไปเพื่อให้ระบบรายงานการวิเคราะห์สำหรับการแจ้งเตือนที่ส่งผ่านพร็อกซี
- คุณอาจสังเกตเห็นความล่าช้าหรือจำนวนข้อความที่ได้รับลดลงเมื่อเทียบกับจำนวนก่อนที่จะมีการแจ้งเตือนที่ส่งผ่านพร็อกซี เนื่องจากระบบจะรายงานการวิเคราะห์สำหรับการแจ้งเตือนที่ส่งผ่านพร็อกซีเมื่อแอปของคุณเริ่มทำงานเท่านั้น และอาจไม่รายงานเลยหากการแจ้งเตือนไม่ทำให้แอปเปิดขึ้น
การส่งข้อความแจ้งเตือนผ่านพร็อกซีในลักษณะนี้เป็นลักษณะการทำงานเริ่มต้นสำหรับแอปที่ใช้ Android Q ขึ้นไปและบริการ Google Play เวอร์ชัน 19054000 ขึ้นไป ระบบจะส่งข้อความที่ส่งผ่าน HTTP v1 API ผ่านพร็อกซี แต่ จะไม่ส่ง ข้อความที่ส่งผ่านคอนโซล Firebase หรือ API แบบเดิมผ่านพร็อกซี โปรดทราบว่าฟีเจอร์นี้ยังอยู่ในเวอร์ชันเบต้าและอาจมีการเปลี่ยนแปลง
แม้ว่าเราจะขอแนะนำอย่างยิ่งให้เปิดใช้การมอบสิทธิ์ไว้เพื่อประโยชน์ต่อแบตเตอรี่และหน่วยความจำของอุปกรณ์ แต่คุณก็เลือกไม่ใช้ลักษณะการทำงานนี้ได้ด้วยวิธีต่อไปนี้
- ในระดับแอป: เพิ่มคำสั่ง
<meta-data android:name= "delivery_metrics_exported_to_big_query_enabled" android:value="false"/>ในไฟล์ Manifest ของแอป - ในระดับอินสแตนซ์ของแอป: ตั้งค่า
fun setNotificationDelegationEnabled(disable: Boolean): Task<Void!>ในโฟลว์ UI ของแอปสำหรับอินสแตนซ์ของแอป โดยขึ้นอยู่กับ Use Case ที่เฉพาะเจาะจง - ในระดับข้อความ: ตั้งค่าคีย์
proxyเป็นDENYในออบเจ็กต์AndroidNotificationสำหรับคำขอส่ง
การวัดการลดลำดับความสำคัญของข้อความใน Android
ข้อความแต่ละรายการ เมื่อส่งแล้ว คุณจะ ตรวจสอบได้ว่าระบบลดลำดับความสำคัญของข้อความแต่ละรายการหรือไม่โดยเปรียบเทียบ ลำดับความสำคัญที่ส่งแล้วจาก getPriority() กับลำดับความสำคัญเดิม จาก getOriginalPriority()
ข้อความทั้งหมด FCM FCM Aggregate Delivery Data API สามารถรายงานเปอร์เซ็นต์ของข้อความทั้งหมดที่ส่งไปยัง Android ซึ่งระบบลดลำดับความสำคัญ ระบบอาจละเว้นข้อความบางรายการจากรายงานข้อมูลรวม แต่โดยรวมแล้วรายงานควรแสดงภาพรวมของอัตราการลดลำดับความสำคัญของข้อความ ดูข้อมูลเพิ่มเติมและโค้ดตัวอย่างสำหรับการค้นหา API ได้ในบทความเกี่ยวกับ ข้อมูลการส่งรวม หรือจะสำรวจจาก API Explorer ก็ได้
การแจ้งเตือนที่ส่งผ่านพร็อกซี ระบบจะไม่นับการแจ้งเตือนที่ส่งผ่านพร็อกซีในเมตริกการส่ง FCM หรือ GA ปัจจุบัน ดังนั้นคุณอาจเห็นเมตริกการส่งการแจ้งเตือนลดลงสูงสุด 15% หากต้องการรายงานข้อความที่ส่งผ่านพร็อกซี ให้ใช้ FCM Aggregate Delivery Data API
ProxyNotificationInsightPercentsจะรายงานเปอร์เซ็นต์ของการแจ้งเตือนที่ส่งผ่านพร็อกซีสำเร็จ รวมถึงรายละเอียดสำหรับข้อความที่ส่งผ่านพร็อกซีไม่สำเร็จ
การแก้ปัญหาการแจ้งเตือนล่าช้า
ตรวจสอบว่าอินสแตนซ์ของแอปเปิดใช้การแจ้งเตือนแล้ว หากผู้ใช้ปิดใช้สิทธิ์การแจ้งเตือนสำหรับแอป ระบบจะไม่โพสต์การแจ้งเตือนใดๆ และระบบจะลดลำดับความสำคัญของข้อความ คุณควรตรวจสอบว่าเปิดใช้การแจ้งเตือนแล้วก่อนที่จะส่งข้อความที่มีลำดับความสำคัญสูงไปยังอินสแตนซ์ของแอปพลิเคชัน
หลีกเลี่ยงการเรียกเครือข่ายเพิ่มเติมเมื่อประมวลผลการแจ้งเตือน เนื่องจากผู้ใช้โทรศัพท์มือถือ Android บางส่วนใช้เครือข่ายที่มีเวลาในการตอบสนองสูง ให้หลีกเลี่ยงการเปิดการเชื่อมต่อกับเซิร์ฟเวอร์ก่อนที่จะแสดงการแจ้งเตือน การเรียกกลับไปยังเซิร์ฟเวอร์ก่อนสิ้นสุดเวลาประมวลผลที่อนุญาตอาจมีความเสี่ยงสำหรับผู้ใช้ในเครือข่ายที่มีเวลาในการตอบสนองสูง
ให้ใส่เนื้อหาการแจ้งเตือนในข้อความ FCM และแสดงเนื้อหาทันที หากต้องการซิงค์เนื้อหาเพิ่มเติมในแอปบน Android คุณสามารถกำหนดเวลาให้งานทำงานด้วย WorkManager เพื่อจัดการเนื้อหาดังกล่าวในเบื้องหลัง