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