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

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 ขึ้นไป

ผู้ใช้ปัดออกจากกล่องโต้ตอบ

หากผู้ใช้ปัดออกจากกล่องโต้ตอบ ซึ่งหมายความว่าผู้ใช้ไม่ได้เลือกอย่างใดอย่างหนึ่ง allow หรือ don ไม่อนุญาต - สถานะของสิทธิ์การแจ้งเตือนจะไม่ เปลี่ยน

ผลกระทบต่อแอปที่ติดตั้งใหม่

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

เวลาที่กล่องโต้ตอบสิทธิ์ปรากฏจะขึ้นอยู่กับเป้าหมายของแอป เวอร์ชัน SDK:

  • หากแอปกำหนดเป้าหมายเป็น Android 13 ขึ้นไป แสดงว่าแอปได้ดำเนินการเรียบร้อยแล้ว ควบคุมว่าจะแสดงกล่องโต้ตอบสิทธิ์เมื่อใด ใช้โอกาสนี้เพื่ออธิบายให้ผู้ใช้ทราบว่าเหตุใดแอปจึงต้องการสิทธิ์นี้ กระตุ้นให้พวกเขาอนุญาต
  • หากแอปกำหนดเป้าหมายเป็น 12L (API ระดับ 32) หรือต่ำกว่า ระบบจะแสดง กล่องโต้ตอบสิทธิ์ในครั้งแรกที่แอปเริ่มกิจกรรมหลังจากที่คุณ สร้างช่องทางการแจ้งเตือน หรือเมื่อ แอปเริ่มกิจกรรมแล้วจึงสร้างช่องทางการแจ้งเตือนแรก ช่วงเวลานี้ มักอยู่ที่การเริ่มต้นแอป

ผลกระทบต่อการอัปเดตแอปที่มีอยู่

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

สิทธิ์ในการขออนุญาตล่วงหน้า

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

หากผู้ใช้ปิดการแจ้งเตือนสำหรับแอปของคุณในอุปกรณ์ที่เรียกใช้ 12L หรือต่ำกว่า การปฏิเสธนั้นยังคงอยู่เมื่ออุปกรณ์ อัปเกรดเป็น Android 13 ขึ้นไป

การยกเว้น

ส่วนนี้ประกอบด้วยชุดการแจ้งเตือนและแอปที่ได้รับการยกเว้นจาก การเปลี่ยนแปลงลักษณะการทำงานของสิทธิ์การแจ้งเตือน ใน Android 13 (API ระดับ 33) ขึ้นไป หากผู้ใช้ปฏิเสธสิทธิ์การแจ้งเตือน ผู้ใช้จะยังคงเห็นการแจ้งเตือนที่เกี่ยวข้อง บริการที่ทำงานอยู่เบื้องหน้าใน ตัวจัดการงาน แต่ไม่เห็นใน ลิ้นชักการแจ้งเตือน

เซสชันสื่อ

การแจ้งเตือนที่เกี่ยวข้องกับ เซสชันสื่อ ได้รับการยกเว้นจากการเปลี่ยนแปลงลักษณะการทำงานนี้

แอปที่กำหนดค่าให้จัดการการโทรด้วยตนเอง

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

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

  1. ประกาศ MANAGE_OWN_CALLS สิทธิ์
  2. ใช้ ConnectionService ของ Google
  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()

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

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