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