Android 13 (API ระดับ 33) ขึ้นไปรองรับสิทธิ์รันไทม์สำหรับการส่งการแจ้งเตือนที่ไม่ได้รับการยกเว้น (รวมถึงบริการที่ทำงานอยู่เบื้องหน้า (FGS)) จากแอป ดังนี้
POST_NOTIFICATIONS
การเปลี่ยนแปลงนี้ช่วยให้ผู้ใช้จดจ่อกับการแจ้งเตือนที่สำคัญที่สุด
ให้พวกเขา
เราขอแนะนําอย่างยิ่งให้คุณกําหนดเป้าหมายเป็น Android 13 ขึ้นไปโดยเร็วที่สุดเพื่อรับประโยชน์จากการควบคุมและความยืดหยุ่นเพิ่มเติมของฟีเจอร์นี้ หากยังคงกำหนดเป้าหมายเป็น 12L (API ระดับ 32) หรือต่ำกว่า คุณจะสูญเสียความยืดหยุ่นบางอย่างในการขอสิทธิ์ในบริบทของฟังก์ชันการทำงานของแอป
ประกาศสิทธิ์
หากต้องการขอสิทธิ์การแจ้งเตือนใหม่จากแอป ให้อัปเดตแอปเพื่อกำหนดเป้าหมายเป็น Android 13 แล้วทำตามกระบวนการที่คล้ายกับการขอสิทธิ์รันไทม์อื่นๆ ตามที่แสดงในส่วนต่อไปนี้
สิทธิ์ที่คุณต้องประกาศในไฟล์ Manifest ของแอปจะปรากฏในข้อมูลโค้ดต่อไปนี้
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
ความสามารถของแอปขึ้นอยู่กับตัวเลือกของผู้ใช้ในกล่องโต้ตอบสิทธิ์
ในกล่องโต้ตอบนี้ ผู้ใช้จะดำเนินการต่อไปนี้ได้
- เลือกอนุญาต
- เลือกไม่อนุญาต
- ปัดออกจากกล่องโต้ตอบโดยไม่ต้องกดปุ่มใดๆ
ส่วนต่อไปนี้จะอธิบายลักษณะการทํางานของแอปตามการดําเนินการที่ผู้ใช้ทํา
ผู้ใช้เลือก "อนุญาต"
หากผู้ใช้เลือกตัวเลือกอนุญาต แอปของคุณจะทำสิ่งต่อไปนี้ได้
- ส่งการแจ้งเตือน อนุญาตให้ใช้ช่องทางการแจ้งเตือนทั้งหมด
- โพสต์การแจ้งเตือนที่เกี่ยวข้องกับบริการที่ทำงานอยู่เบื้องหน้า เหล่านี้ การแจ้งเตือนจะปรากฏใน ลิ้นชักการแจ้งเตือน
ผู้ใช้เลือก "ไม่อนุญาต"
หากผู้ใช้เลือกตัวเลือกไม่อนุญาต แอปของคุณจะส่งการแจ้งเตือนไม่ได้ เว้นแต่จะมีสิทธิ์ได้รับการยกเว้น ทั้งหมด บล็อกช่องทางการแจ้งเตือนแล้ว ยกเว้นช่องทางเฉพาะ บทบาทใหม่ ซึ่งคล้ายกับลักษณะการทำงานที่เกิดขึ้นเมื่อผู้ใช้เปลี่ยน ปิดการแจ้งเตือนทั้งหมดสำหรับแอปของคุณในการตั้งค่าระบบ
ข้อควรระวัง: หากแอปกำหนดเป้าหมายเป็น 12L หรือต่ำกว่า และผู้ใช้แตะไม่อนุญาต แม้เพียงครั้งเดียวก็จะไม่ได้รับข้อความแจ้ง อีกครั้งจนกว่าจะเกิดเหตุการณ์ใดเหตุการณ์หนึ่งต่อไปนี้
- ผู้ใช้ถอนการติดตั้งแอปและติดตั้งอีกครั้ง
- คุณอัปเดตแอปให้กำหนดเป้าหมายเป็น Android 13 ขึ้นไป
ผู้ใช้ปัดกล่องโต้ตอบออก
หากผู้ใช้ปัดกล่องโต้ตอบออก นั่นคือไม่ได้เลือกอนุญาตหรือไม่อนุญาต สถานะของสิทธิ์การแจ้งเตือนจะไม่เปลี่ยนแปลง
ผลกระทบต่อแอปที่ติดตั้งใหม่
หากผู้ใช้ติดตั้งแอปของคุณในอุปกรณ์ที่ใช้ Android 13 ขึ้นไป การแจ้งเตือนของแอปจะปิดอยู่โดยค่าเริ่มต้น แอปของคุณต้องรอ ถึง ส่งการแจ้งเตือนจนกว่าคุณจะขอสิทธิ์ใหม่และผู้ใช้ ให้สิทธิ์นั้นกับแอปของคุณ
เวลาที่กล่องโต้ตอบสิทธิ์ปรากฏจะขึ้นอยู่กับเป้าหมายของแอป เวอร์ชัน SDK:
- หากแอปกำหนดเป้าหมายเป็น Android 13 ขึ้นไป แอปจะควบคุมได้อย่างเต็มที่ว่าเมื่อใดที่กล่องโต้ตอบสิทธิ์จะปรากฏขึ้น ใช้โอกาสนี้เพื่ออธิบายให้ผู้ใช้ทราบว่าเหตุใดแอปจึงต้องการสิทธิ์นี้ กระตุ้นให้พวกเขาอนุญาต
- หากแอปกำหนดเป้าหมายเป็น 12L (API ระดับ 32) หรือต่ำกว่า ระบบจะแสดง กล่องโต้ตอบสิทธิ์ในครั้งแรกที่แอปเริ่มกิจกรรมหลังจากที่คุณ สร้างช่องทางการแจ้งเตือน หรือเมื่อ แอปเริ่มกิจกรรมแล้วจึงสร้างช่องทางการแจ้งเตือนแรก ช่วงเวลานี้ มักอยู่ที่การเริ่มต้นแอป
ผลกระทบต่อการอัปเดตแอปที่มีอยู่
ระบบจะมอบสิทธิ์ล่วงหน้าให้กับแอปที่มีสิทธิ์ทั้งหมดโดยอัตโนมัติเมื่อผู้ใช้อัปเกรดอุปกรณ์เป็น Android 13 ขึ้นไป เพื่อลดการหยุดชะงักที่เกี่ยวข้องกับสิทธิ์การแจ้งเตือน กล่าวอีกนัยหนึ่งคือ แอปเหล่านี้สามารถ ส่งการแจ้งเตือนไปยังผู้ใช้ และผู้ใช้จะไม่เห็นข้อความแจ้งเกี่ยวกับสิทธิ์รันไทม์
การมีสิทธิ์รับสิทธิ์ก่อนได้รับ
หากต้องการให้แอปมีสิทธิ์รับสิทธิ์ล่วงหน้าโดยอัตโนมัติ แอปดังกล่าวต้องมี ช่องทางการแจ้งเตือนที่มีอยู่และไม่ได้ปิดการแจ้งเตือนอย่างชัดแจ้ง โดยผู้ใช้บนอุปกรณ์ที่ทำงาน 12 ลิตรหรือต่ำกว่า
หากผู้ใช้ปิดใช้การแจ้งเตือนสำหรับแอปของคุณในอุปกรณ์ที่ใช้ Android 12L หรือต่ำกว่า การปฏิเสธจะยังคงอยู่เมื่ออุปกรณ์อัปเกรดเป็น Android 13 ขึ้นไป
การยกเว้น
ส่วนนี้ประกอบด้วยชุดการแจ้งเตือนและแอปที่ได้รับการยกเว้นจาก การเปลี่ยนแปลงลักษณะการทำงานของสิทธิ์การแจ้งเตือน ใน Android 13 (API ระดับ 33) ขึ้นไป หากผู้ใช้ปฏิเสธสิทธิ์การแจ้งเตือน ผู้ใช้จะยังคงเห็นการแจ้งเตือนที่เกี่ยวข้อง บริการที่ทำงานอยู่เบื้องหน้าใน ตัวจัดการงาน แต่ไม่เห็นใน ลิ้นชักการแจ้งเตือน
เซสชันสื่อ
การแจ้งเตือนที่เกี่ยวข้องกับ เซสชันสื่อ ได้รับการยกเว้นจากการเปลี่ยนแปลงลักษณะการทำงานนี้
แอปที่กำหนดค่าให้จัดการการโทรด้วยตนเอง
หากแอปกำหนดค่าตัวเองให้จัดการการโทรด้วยตนเอง คุณไม่จำเป็นต้องมีสิทธิ์ POST_NOTIFICATIONS
เพื่อให้แอปส่งการแจ้งเตือนที่ใช้รูปแบบการแจ้งเตือน Notification.CallStyle
ระบบจะถือว่าแอปของคุณกําหนดค่าตัวเองสําหรับการจัดการการโทรด้วยตนเองหากแอปทําสิ่งต่อไปนี้
- ประกาศสิทธิ์
MANAGE_OWN_CALLS
- ใช้
ConnectionService
ของ Google - ลงทะเบียนกับผู้ให้บริการโทรคมนาคมของอุปกรณ์โดยโทรไปที่
registerPhoneAccount()
ทดสอบแอป
คุณจะประเมินได้ว่าสิทธิ์การแจ้งเตือนจะส่งผลต่อแอปอย่างไร ใช้ครั้งแรกในอุปกรณ์ที่ใช้ Android 13 ขึ้นไป ชุดคำสั่ง Android Debug Bridge (ADB) ต่อไปนี้ช่วยให้คุณจำลองลำดับตัวเลือกของผู้ใช้และการอัปเกรดอุปกรณ์ที่พบบ่อยที่สุดได้โดยไม่ต้องรีเซ็ตอุปกรณ์ทดสอบ
แอปเพิ่งติดตั้งในอุปกรณ์ที่เรียกใช้ Android 13 ขึ้นไป
adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-set
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
ผู้ใช้จะเปิดใช้การแจ้งเตือนไว้เมื่อมีการติดตั้งแอปใน อุปกรณ์ที่ใช้ 12L หรือต่ำกว่า อัปเกรดเป็น Android 13 ขึ้นไป
adb shell pm grant PACKAGE_NAME android.permission.POST_NOTIFICATIONS
adb shell pm set-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-set
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
ผู้ใช้ต้องปิดการแจ้งเตือนด้วยตนเองเมื่อติดตั้งแอปใน อุปกรณ์ที่ใช้ 12L หรือต่ำกว่า อัปเกรดเป็น Android 13 ขึ้นไป
adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
adb shell pm set-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-set
adb shell pm clear-permission-flags PACKAGE_NAME \ android.permission.POST_NOTIFICATIONS user-fixed
แนวทางปฏิบัติแนะนำ
ส่วนนี้จะอธิบายวิธีต่างๆ ที่คุณจะใช้การแจ้งเตือนใหม่ได้ มีประสิทธิภาพมากที่สุดในแอปของคุณ
อัปเดตเวอร์ชัน SDK เป้าหมายของแอป
หากต้องการให้แอปมีความยืดหยุ่นมากขึ้นเมื่อกล่องโต้ตอบสิทธิ์ปรากฏขึ้น ให้อัปเดตแอปให้กำหนดเป้าหมายเป็น Android 13 ขึ้นไป
รอให้ระบบแสดงข้อความแจ้งเกี่ยวกับสิทธิ์การแจ้งเตือน
ก่อนที่จะขอให้ผู้ใช้ให้สิทธิ์ใดๆ โปรดให้ผู้ใช้ทำความคุ้นเคยกับแอปของคุณ
ผู้ใช้ใหม่อาจต้องการสำรวจแอปและเรียนรู้ถึง ประโยชน์ของคำขอการแจ้งเตือนแต่ละรายการ คุณสามารถเรียกใช้ข้อความแจ้งสิทธิ์จากการดำเนินการของผู้ใช้ รายการต่อไปนี้แสดงตัวอย่างหลายกรณีที่ควรแสดงข้อความแจ้งสิทธิ์การแจ้งเตือน
- ผู้ใช้แตะปุ่ม "กระดิ่งแจ้งเตือน"
- ผู้ใช้เลือกติดตามบัญชีโซเชียลมีเดียของผู้อื่น
- ผู้ใช้ส่งคำสั่งซื้อสำหรับบริการจัดส่งอาหาร
รูปที่ 1 แสดงขั้นตอนการทำงานที่แนะนำสำหรับการขอการแจ้งเตือน
สิทธิ์ ยกเว้น
shouldShowRequestPermissionRationale()
ส่งคืน true
แอปของคุณไม่จำเป็นต้องแสดงหน้าจอกลาง
มีข้อความชื่อ "รับการแจ้งเตือน!"
อีกทางเลือกหนึ่งคือ คุณสามารถตั้งค่าคำขอให้แสดงหลังจากที่คุณให้โอกาสผู้ใช้แล้ว ทำความคุ้นเคยกับแอปของคุณ ตัวอย่างเช่น คุณอาจรอจนกว่า ครั้งที่ 3 หรือ 4 ที่ผู้ใช้เปิดแอปของคุณ
shouldShowRequestPermissionRationale()
แสดงผล true
ขอสิทธิ์ในบริบท
เมื่อคุณขอสิทธิ์การแจ้งเตือนภายในแอป โปรดดำเนินการใน เพื่อให้ชัดเจนยิ่งขึ้นว่าการแจ้งเตือนนั้นใช้ทำอะไร ทำไมผู้ใช้จึงควรเลือกใช้ ตัวอย่างเช่น แอปอีเมลอาจมีตัวเลือก ส่งการแจ้งเตือนสำหรับอีเมลใหม่ทุกครั้ง หรือเฉพาะอีเมลที่ผู้ใช้ ผู้รับเท่านั้น
ใช้ประโยชน์จากโอกาสนี้เพื่อแสดงความตั้งใจของคุณอย่างโปร่งใส และผู้ใช้ก็จะมีแนวโน้มที่จะให้สิทธิ์การแจ้งเตือนแก่แอปของคุณมากขึ้น
ตรวจสอบว่าแอปของคุณสามารถส่งการแจ้งเตือนได้หรือไม่
ก่อนที่แอปจะส่งการแจ้งเตือน ให้ตรวจสอบว่าผู้ใช้เปิดใช้การแจ้งเตือนสำหรับแอปของคุณหรือไม่ โดยเรียกใช้ areNotificationsEnabled()
ใช้สิทธิ์อย่างมีความรับผิดชอบ
หลังจากได้รับอนุมัติให้ส่งการแจ้งเตือนแล้ว โปรดใช้สิทธิ์อย่างมีความรับผิดชอบ ผู้ใช้จะเห็นจำนวนการแจ้งเตือนรายวันที่แอปของคุณ ส่ง และ ก็สามารถเพิกถอนสิทธิ์ ได้ทุกเมื่อ