ขอสิทธิ์พิเศษ

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

วันที่
ภาพที่ 1: หน้าจอสิทธิ์เข้าถึงพิเศษของแอปในระบบ การตั้งค่า

ตัวอย่างของการอนุญาตพิเศษ ได้แก่

  • กำลังตั้งเวลาปลุกในเวลาที่แน่นอน
  • การแสดงและการวาดทับแอปอื่นๆ
  • กำลังเข้าถึงข้อมูลในพื้นที่เก็บข้อมูลทั้งหมด

แอปที่ประกาศสิทธิ์พิเศษจะแสดงในสิทธิ์เข้าถึงพิเศษของแอป ในการตั้งค่าระบบ (รูปที่ 1) หากต้องการให้สิทธิ์พิเศษแก่แอป ผู้ใช้ต้องไปที่หน้านี้: การตั้งค่า > แอป > สิทธิ์เข้าถึงพิเศษของแอป

ขั้นตอนการทำงาน

ในการขอสิทธิ์พิเศษ ให้ทำดังนี้

  1. ในไฟล์ Manifest ของแอป ให้ประกาศแบบพิเศษ สิทธิ์ที่แอปของคุณอาจต้อง อีกครั้ง
  2. ออกแบบ UX ของแอปเพื่อให้เชื่อมโยงการดำเนินการบางอย่างในแอป โดยมีสิทธิ์พิเศษบางอย่าง แจ้งให้ผู้ใช้ทราบว่าการดำเนินการใดอาจ จำเป็นต้องให้สิทธิ์แอปเข้าถึงข้อมูลส่วนตัวของผู้ใช้
  3. รอให้ผู้ใช้เรียกใช้ งานหรือการดำเนินการในแอปของคุณที่ต้องการสิทธิ์เข้าถึงส่วนตัวที่เฉพาะเจาะจง ในเวลานั้น แอปของคุณสามารถขอสิทธิ์พิเศษที่ ที่จำเป็นสำหรับการเข้าถึงข้อมูลนั้น
  4. ตรวจสอบว่าผู้ใช้ได้ให้สิทธิ์พิเศษที่ แอปจำเป็นต้องใช้ โดยใช้การตรวจสอบที่กำหนดเองของแต่ละสิทธิ์ ฟังก์ชัน หากได้รับอนุญาต แอปของคุณจะเข้าถึงผู้ใช้ส่วนตัวได้ หากยัง ให้ไปยังขั้นตอนถัดไป หมายเหตุ: คุณต้องตรวจสอบว่า ได้รับอนุญาตทุกครั้งที่คุณดำเนินการ สิทธิ์
  5. แสดงเหตุผลต่อผู้ใช้ในองค์ประกอบ UI ที่แสดงให้เห็นชัดเจน อธิบายข้อมูลที่แอปของคุณพยายามเข้าถึงและประโยชน์ของแอป สามารถแสดงต่อผู้ใช้ได้หากให้สิทธิ์พิเศษ นอกจากนี้ เนื่องจากแอปของคุณจะส่งผู้ใช้ไปที่การตั้งค่าระบบเพื่อให้สิทธิ์ด้วย มีคำแนะนำสั้นๆ ที่อธิบายว่าผู้ใช้สามารถให้สิทธิ์ได้อย่างไร จากที่นั่น UI เหตุผลควรมีตัวเลือกที่ชัดเจนให้ผู้ใช้ ยกเลิกการให้สิทธิ์ดังกล่าว หลังจากที่ผู้ใช้รับทราบ เหตุผล ให้ไปยังขั้นตอนถัดไป
  6. ขอสิทธิ์พิเศษที่แอปของคุณต้องใช้เพื่อเข้าถึง ข้อมูลส่วนตัวของผู้ใช้ ซึ่งน่าจะเกี่ยวข้องกับ ในการตั้งค่าระบบที่ผู้ใช้สามารถให้สิทธิ์ได้ เลิกชอบ สิทธิ์รันไทม์ ไม่มีกล่องโต้ตอบสิทธิ์ป๊อปอัป
  7. ตรวจสอบคำตอบของผู้ใช้ ไม่ว่าผู้ใช้จะเลือกที่จะให้หรือปฏิเสธข้อเสนอพิเศษ สิทธิ์ – ในเมธอด onResume()
  8. หากผู้ใช้ให้สิทธิ์แอปของคุณ คุณก็จะเข้าถึง ข้อมูลผู้ใช้ ถ้าผู้ใช้ปฏิเสธการอนุญาตแทน ให้ ลดระดับอย่างสุภาพ ประสบการณ์การใช้งานแอปเพื่อให้ ให้ฟังก์ชันแก่ผู้ใช้ โดยไม่ต้องมีข้อมูล ได้รับการปกป้องโดยสิทธิ์นั้น
รูปที่ 2: เวิร์กโฟลว์การประกาศและส่งคำขอพิเศษ สิทธิ์บน Android

ขอสิทธิ์พิเศษ

ซึ่งแตกต่างจากสิทธิ์รันไทม์ตรงที่ ผู้ใช้ต้องให้สิทธิ์พิเศษจากหน้าสิทธิ์เข้าถึงพิเศษของแอปใน การตั้งค่าระบบ แอปจะส่งผู้ใช้ไปยังเป้าหมายได้โดยใช้ Intent ซึ่งจะหยุดแอปชั่วคราว แล้วเปิดหน้าการตั้งค่าที่เกี่ยวข้องสำหรับสิทธิ์พิเศษนั้น หลังจากที่ผู้ใช้กลับไปที่แอป แอปจะตรวจสอบได้ว่าได้ขอสิทธิ์ดังกล่าวแล้วหรือไม่ ที่ให้ไว้ในฟังก์ชัน onResume()

โค้ดตัวอย่างต่อไปนี้แสดงวิธีขอ SCHEDULE_EXACT_ALARMS สิทธิ์พิเศษจากผู้ใช้:

val alarmManager = getSystemService<AlarmManager>()!!
when {
   // if permission is granted, proceed with scheduling exact alarms…
   alarmManager.canScheduleExactAlarms() -> {
       alarmManager.setExact(...)
   }
   else -> {
       // ask users to grant the permission in the corresponding settings page
       startActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))
   }
}

โค้ดตัวอย่างสำหรับตรวจสอบสิทธิ์และจัดการการตัดสินใจของผู้ใช้ใน onResume()

override fun onResume() {
   // ...

   if (alarmManager.canScheduleExactAlarms()) {
       // proceed with the action (setting exact alarms)
       alarmManager.setExact(...)
   }
   else {
       // permission not yet approved. Display user notice and gracefully degrade
       your app experience.
       alarmManager.setWindow(...)
   }
}

แนวทางปฏิบัติแนะนำและเคล็ดลับ

ส่วนต่อไปนี้จะอธิบายแนวทางปฏิบัติที่ดีที่สุดและข้อควรพิจารณาเมื่อ การขอสิทธิ์พิเศษ

สิทธิ์แต่ละรายการมีวิธีการตรวจสอบของตัวเอง

การอนุญาตพิเศษดำเนินการแตกต่างจากรันไทม์ สิทธิ์ แต่ ให้ดูที่เอกสารอ้างอิง API สิทธิ์ และใช้การตรวจสอบการเข้าถึงที่กำหนดเอง สำหรับสิทธิ์พิเศษแต่ละรายการ ตัวอย่างเช่น AlarmManager#canScheduleExactAlarms() สำหรับ SCHEDULE_EXACT_ALARMS สิทธิ์และ Environment#isExternalStorageManager() สำหรับ MANAGE_EXTERNAL_STORAGE สิทธิ์

ขอในบริบท

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

อธิบายคำขอ

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