คุณมี 2 ตัวเลือกในการกำหนดลำดับความสำคัญในการนำส่งข้อความดาวน์สตรีมใน Android ได้แก่ ลำดับความสำคัญปกติและสูง การส่งข้อความที่มีลำดับความสำคัญปกติและสูงจะทำงานดังนี้
ลำดับความสำคัญตามปกติ นี่คือลำดับความสำคัญเริ่มต้นสำหรับข้อความข้อมูลและข้อความแจ้งเตือน ระบบจะส่งข้อความที่มีลำดับความสำคัญปกติทันทีเมื่ออุปกรณ์ไม่ได้อยู่ในโหมดสลีป เมื่ออุปกรณ์อยู่ในโหมด Doze การส่งข้อความอาจล่าช้าเพื่อประหยัดแบตเตอรี่จนกว่าอุปกรณ์จะออกจากโหมด Doze สำหรับข้อความที่ไม่ได้ขึ้นอยู่กับเวลามากนัก เช่น การแจ้งเตือนอีเมลใหม่ การซิงค์ UI หรือการซิงค์ข้อมูลแอปในเบื้องหลัง ให้เลือกลำดับความสำคัญในการแสดงโฆษณาแบบปกติ
ลำดับความสำคัญสูงFCM พยายามส่งข้อความที่มีลำดับความสำคัญสูงทันที โดยอนุญาตให้ FCM ปลุกอุปกรณ์ที่อยู่ในโหมดสลีปเมื่อจำเป็น และเรียกใช้การประมวลผลแบบจำกัด (รวมถึงการเข้าถึงเครือข่ายที่จำกัดมาก) โดยทั่วไปแล้ว ข้อความที่มีลำดับความสำคัญสูงควรส่งผลให้ผู้ใช้โต้ตอบกับแอปหรือการแจ้งเตือนของแอป
การเลือกระหว่างข้อความที่มีลำดับความสำคัญสูงและปกติ
แม้ว่าข้อความที่มีลำดับความสำคัญปกติจะเหมาะสำหรับการอัปเดตทั่วไป แต่ให้เลือกลำดับความสำคัญสูงเมื่อคุณต้องการให้แน่ใจว่าข้อความจะส่งถึงทันทีสำหรับเรื่องหรือการดำเนินการที่เร่งด่วน เนื่องจากโหมด Doze อาจส่งผลต่อเวลานำส่งข้อความที่มีลำดับความสำคัญปกติ การตั้งค่าการแจ้งเตือนที่ผู้ใช้มองเห็นส่วนใหญ่ให้มีลำดับความสำคัญสูงจะช่วยให้มั่นใจได้ว่าระบบจะนำส่งข้อความเหล่านั้นโดยทันที ตัวอย่างเช่น การแจ้งเตือน เช่น ข้อความแชท ปัญหาเกี่ยวกับบัญชี หรือการอัปเดตการนำส่งอาหาร ควรตั้งค่าเป็นลำดับความสำคัญสูง
การประมวลผลข้อความสำหรับข้อความที่มีลำดับความสำคัญสูงและปกติ
สำหรับทั้งข้อความที่มีลำดับความสำคัญสูงและลำดับความสำคัญปกติที่ได้รับในอุปกรณ์ Android ระบบจะให้เวลาหลายวินาทีในการประมวลผลเพย์โหลดข้อความในแฮนเดิลเลอร์ onMessageReceived โดยจัดสรรเวลาสำหรับข้อความที่มีลำดับความสำคัญสูงมากกว่าข้อความที่มีลำดับความสำคัญปกติเล็กน้อย ระยะเวลานี้คาดว่าจะนานพอที่จะแสดงผลการแจ้งเตือนได้ทันทีเท่านั้น หากต้องทำงานเพิ่มเติม เช่น โหลดรูปภาพจากพื้นที่เก็บข้อมูลของอุปกรณ์หรือเรียกใช้เซิร์ฟเวอร์เพื่อรวบรวมเนื้อหาเพิ่มเติม คุณจะต้องทำตามขั้นตอนเพิ่มเติม
ระบบจะเรียกใช้เมธอด onMessageReceived ในเทรดผู้ปฏิบัติงานแยกต่างหาก แนวทางปฏิบัติแนะนำคือคุณควรประมวลผลเพย์โหลดข้อความและแสดงการแจ้งเตือนทันทีภายในเมธอด onMessageReceived คุณไม่ควรทำการเรียกใช้เครือข่ายแบบอะซิงโครนัสเพิ่มเติมหรือประมวลผลเพย์โหลดในเทรดแยกต่างหากภายในเมธอด onMessageReceived เนื่องจากอาจทำให้แอปพลิเคชันอยู่นอกวงจรของกระบวนการที่ถูกต้องก่อนที่เพย์โหลดจะได้รับการประมวลผลอย่างสมบูรณ์ หากเกิดกรณีนี้ขึ้น คุณอาจเห็นว่าข้อความ FCM บางข้อความที่ส่งไปส่งผลให้การแจ้งเตือนล่าช้าหรือขาดหายไป
หากต้องการเวลาเพิ่มเติมในการประมวลผลข้อความ เช่น เพื่อดึงข้อมูล imageUrl ที่อยู่ในเพย์โหลดข้อความ คุณจะต้องใช้โครงสร้าง เช่น WorkManager หรือบริการที่ทำงานอยู่เบื้องหน้าเพื่อขยายวงจรของแอปพลิเคชัน คุณควรใช้คำแนะนำต่อไปนี้เมื่อลบล้างเมธอด onMessageReceived เพื่อยืนยันว่าการแจ้งเตือนได้รับการประมวลผลอย่างสมบูรณ์
- สำหรับการแจ้งเตือนที่มีลำดับความสำคัญสูง: เริ่มงานด่วนโดยใช้
WorkManagerของ Android เพื่อยืนยันว่าการแจ้งเตือนที่มีลำดับความสำคัญสูงได้รับการจัดลำดับความสำคัญของเวลาในการประมวลผลเพื่อยืนยันว่าการแสดงผลการแจ้งเตือนทำงานจนเสร็จสมบูรณ์ ข่าวดีก็คือหากคุณกังวลว่าโควตางานด่วนจะหมดลงเนื่องจากการประมวลผล FCM ที่มีลำดับความสำคัญสูง คุณก็ไม่ต้องกังวลอีกต่อไป มีการยกเว้นสั้นๆ สำหรับงานด่วนที่กำหนดเวลาไว้ทันทีหลังจากส่ง FCMonMessageReceivedที่มีลำดับความสำคัญสูง - สำหรับการแจ้งเตือนที่มีลำดับความสำคัญปกติ: ให้เริ่ม
WorkRequestปกติโดยใช้WorkManagerของ Android แทน ซึ่งจะช่วยยืนยันว่างานเพิ่มเติมที่จำเป็นในการประมวลผลการแจ้งเตือนจะได้รับการประมวลผลในที่สุด โดยไม่ต้องใช้การประมวลผลที่มีลำดับความสำคัญสูงและทำให้เกิดปัญหาการใช้งานแบตเตอรี่โดยไม่จำเป็น
การตั้งค่าลำดับความสำคัญของข้อความ
คุณสามารถส่งการแจ้งเตือนไปยังผู้ใช้โดยใช้ 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"
}
}
}
}
ทดสอบการแจ้งเตือนที่มีลำดับความสำคัญสูงในโหมด Doze
หากต้องการตรวจสอบว่าการแจ้งเตือนที่มีลำดับความสำคัญสูงได้รับการรับและประมวลผลอย่างถูกต้องเมื่อผู้ใช้ได้รับ ให้ทำตามวิธีการต่อไปนี้เพื่อทดสอบการแจ้งเตือน
- ตั้งค่าอุปกรณ์เป็นโหมด Doze โดยทำตามวิธีการในทดสอบแอปด้วย Doze
- เข้าถึงโทเค็นการลงทะเบียน 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 Aggregate Delivery Data API สามารถรายงานเปอร์เซ็นต์ของข้อความทั้งหมดที่คุณส่งไปยัง Android ที่ถูกลดลำดับความสำคัญ ระบบอาจละเว้นข้อความบางรายการจากรายงานข้อมูลรวม แต่โดยรวมแล้วรายงานควรแสดงภาพรวมของอัตราการลดลำดับความสำคัญของข้อความ ดูข้อมูลเพิ่มเติมและโค้ดตัวอย่างสำหรับการค้นหา API ได้ที่บทความเกี่ยวกับข้อมูลการแสดงโฆษณาแบบรวม หรือจะสำรวจจากโปรแกรมสำรวจ API ก็ได้
การแจ้งเตือนผ่านพร็อกซี ระบบจะไม่นับการแจ้งเตือนที่ส่งผ่านพร็อกซีในเมตริกการนำส่ง FCM หรือ GA ปัจจุบัน ดังนั้นคุณอาจเห็นว่าเมตริกการนำส่งการแจ้งเตือนลดลงสูงสุด 15% สำหรับการรายงานเกี่ยวกับข้อความที่ส่งผ่านพร็อกซี ให้ใช้ FCM Aggregate Delivery Data API
ProxyNotificationInsightPercentsจะรายงานเปอร์เซ็นต์ของการแจ้งเตือนที่ส่งผ่านพร็อกซีได้สำเร็จ รวมถึงรายละเอียดของข้อความที่ส่งผ่านพร็อกซีไม่สำเร็จ
การแก้ปัญหาความล่าช้าของการแจ้งเตือน
ตรวจสอบว่าอินสแตนซ์แอปเปิดใช้การแจ้งเตือนแล้ว หากผู้ใช้ปิดใช้สิทธิ์การแจ้งเตือนสำหรับแอปของคุณ ระบบจะไม่โพสต์การแจ้งเตือนใดๆ ของคุณ ด้วยเหตุนี้ ข้อความของคุณจึงจะถูกลดลำดับความสำคัญ คุณควรยืนยันว่าได้เปิดใช้การแจ้งเตือนแล้วก่อนส่งข้อความที่มีลำดับความสำคัญสูงไปยังอินสแตนซ์ของแอปพลิเคชัน
หลีกเลี่ยงการเรียกใช้เครือข่ายเพิ่มเติมเมื่อประมวลผลการแจ้งเตือน เนื่องจากผู้ใช้ Android จำนวนไม่มากนักใช้เครือข่ายที่มีเวลาในการตอบสนองสูง คุณจึงควรหลีกเลี่ยงการเปิดการเชื่อมต่อกับเซิร์ฟเวอร์ก่อนที่จะแสดงการแจ้งเตือน การโทรกลับไปยังเซิร์ฟเวอร์ก่อนสิ้นสุดเวลาประมวลผลที่อนุญาตอาจมีความเสี่ยงสำหรับผู้ใช้ในเครือข่ายที่มีเวลาในการตอบสนองสูง
แต่ให้ใส่เนื้อหาการแจ้งเตือนในข้อความ FCM และแสดงทันทีแทน หากต้องการซิงค์เนื้อหาในแอปเพิ่มเติมบน Android คุณสามารถกำหนดเวลางานด้วย WorkManager เพื่อจัดการเนื้อหานั้นในเบื้องหลังได้