สิทธิ์รันไทม์ของการแจ้งเตือน

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>

ความสามารถของแอปขึ้นอยู่กับตัวเลือกของผู้ใช้ในกล่องโต้ตอบสิทธิ์

ในกล่องโต้ตอบนี้ ผู้ใช้จะดำเนินการต่อไปนี้ได้

ส่วนต่อไปนี้จะอธิบายลักษณะการทํางานของแอปตามการดําเนินการที่ผู้ใช้ทํา

ผู้ใช้เลือก "อนุญาต"

หากผู้ใช้เลือกตัวเลือกอนุญาต แอปจะทำสิ่งต่อไปนี้ได้

ผู้ใช้เลือก "ไม่อนุญาต"

หากผู้ใช้เลือกตัวเลือกไม่อนุญาต แอปจะส่งการแจ้งเตือนไม่ได้ เว้นแต่จะมีคุณสมบัติได้รับการยกเว้น ช่องทางการแจ้งเตือนทั้งหมดจะถูกบล็อก ยกเว้นบทบาทเฉพาะ 2-3 บทบาท ซึ่งคล้ายกับลักษณะการทำงานที่เกิดขึ้นเมื่อผู้ใช้ปิดการแจ้งเตือนทั้งหมดสำหรับแอปด้วยตนเองในการตั้งค่าระบบ

ข้อควรระวัง: หากแอปกำหนดเป้าหมายเป็น 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

ระบบจะถือว่าแอปของคุณกําหนดค่าตัวเองสําหรับการจัดการการโทรด้วยตนเองหากแอปทําสิ่งต่อไปนี้

  1. ประกาศสิทธิ์ MANAGE_OWN_CALLS
  2. ใช้อินเทอร์เฟซ ConnectionService
  3. ลงทะเบียนกับผู้ให้บริการโทรคมนาคมของอุปกรณ์โดยโทรไปที่ 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

หลังจากลงชื่อเข้าใช้แล้ว ผู้ใช้จะเห็นคำเชิญให้รับการแจ้งเตือนข้อมูลอัปเดตเกี่ยวกับการเดินทาง หลังจากผู้ใช้กดปุ่ม &quot;ฉันตกลง&quot; แอปจะขอสิทธิ์ใหม่ ซึ่งจะทำให้กล่องโต้ตอบของระบบปรากฏขึ้น
รูปที่ 1 เวิร์กโฟลว์ที่แนะนําซึ่งผู้ใช้เป็นผู้ดำเนินการเพื่อขอสิทธิ์การแจ้งเตือน หน้าจอกลางจำเป็นเฉพาะในกรณีที่ shouldShowRequestPermissionRationale() แสดงผลเป็น true

ขอสิทธิ์ในบริบท

เมื่อขอสิทธิ์การแจ้งเตือนภายในแอป ให้ขอในบริบทที่ถูกต้องเพื่อให้ผู้ใช้ทราบอย่างชัดเจนว่าจะใช้การแจ้งเตือนเพื่ออะไรและเหตุใดจึงควรเลือกใช้ เช่น แอปอีเมลอาจมีตัวเลือกในการส่งการแจ้งเตือนสำหรับอีเมลใหม่ทุกฉบับ หรือเฉพาะอีเมลที่ผู้ใช้เป็นผู้รับเพียงคนเดียว

ใช้ประโยชน์จากโอกาสนี้เพื่อแสดงความตั้งใจของคุณอย่างโปร่งใส และผู้ใช้ก็จะมีแนวโน้มที่จะให้สิทธิ์การแจ้งเตือนแก่แอปของคุณมากขึ้น

ตรวจสอบว่าแอปส่งการแจ้งเตือนได้หรือไม่

ก่อนที่แอปจะส่งการแจ้งเตือน ให้ยืนยันว่าผู้ใช้ได้เปิดใช้การแจ้งเตือนสำหรับแอปแล้วหรือไม่ โดยโทรไปที่ areNotificationsEnabled()

ใช้สิทธิ์อย่างมีความรับผิดชอบ

หลังจากได้รับอนุมัติให้ส่งการแจ้งเตือน อย่าลืมใช้สิทธิ์อย่างมีความรับผิดชอบ ผู้ใช้ดูจำนวนการแจ้งเตือนรายวันที่แอปของคุณส่ง และเพิกถอนสิทธิ์ได้ได้ทุกเมื่อ