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