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 ขึ้นไป กล่าวคือ แอปเหล่านี้จะยังคง ส่งการแจ้งเตือนไปยังผู้ใช้ได้ และผู้ใช้จะไม่เห็นข้อความแจ้งขอสิทธิ์รันไทม์
การมีสิทธิ์สำหรับการให้สิทธิ์ล่วงหน้า
หากต้องการให้แอปมีสิทธิ์รับการให้สิทธิ์ล่วงหน้าโดยอัตโนมัติ แอปต้องมีช่องทางการแจ้งเตือนอยู่แล้วและผู้ใช้ต้องไม่ได้ปิดใช้การแจ้งเตือนอย่างชัดแจ้งในอุปกรณ์ที่ใช้ 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_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()
ใช้สิทธิ์อย่างมีความรับผิดชอบ
หลังจากได้รับอนุมัติให้ส่งการแจ้งเตือนแล้ว โปรดอย่าลืมใช้สิทธิ์อย่างมีความรับผิดชอบ ผู้ใช้จะเห็นจำนวนการแจ้งเตือนรายวันที่แอปของคุณส่ง และสามารถเพิกถอนสิทธิ์ได้ทุกเมื่อ