คำขอสิทธิ์จะปกป้องข้อมูลที่ละเอียดอ่อนจากอุปกรณ์ และควรใช้เฉพาะในกรณีที่การเข้าถึงข้อมูลจําเป็นสําหรับการทํางานของแอปเท่านั้น เอกสารนี้จะให้คําแนะนําเกี่ยวกับวิธีที่คุณอาจทํางานได้แบบเดิม (หรือดีกว่า) โดยไม่ต้องเข้าถึงข้อมูลดังกล่าว ทั้งนี้ไม่ได้เป็นการพูดคุยอย่างละเอียดเกี่ยวกับวิธีทํางานของสิทธิ์ในระบบปฏิบัติการ Android
หากต้องการดูภาพรวมของสิทธิ์ Android โปรดดูภาพรวมของสิทธิ์ สำหรับรายละเอียดเกี่ยวกับวิธีทำงานกับสิทธิ์ในโค้ด ดูการขอสิทธิ์ของแอป
สิทธิ์ใน Android 6.0 ขึ้นไป
ใน Android 6.0 (API ระดับ 23) ขึ้นไป แอปจะขอสิทธิ์จาก ผู้ใช้ขณะรันไทม์ ไม่ใช่ก่อนการติดตั้ง ซึ่งจะช่วยให้แอปขอสิทธิ์ได้เมื่อแอปต้องใช้บริการหรือข้อมูลที่บริการดังกล่าวคุ้มครอง แม้ว่าการดำเนินการนี้จะไม่เปลี่ยนแปลง (เสมอไป) ลักษณะการทํางานโดยรวมของแอป แต่ก็มีการเปลี่ยนแปลงบางอย่างที่เกี่ยวข้องกับวิธีจัดการข้อมูลที่ละเอียดอ่อนของผู้ใช้ ดังนี้
บริบทตามสถานการณ์ที่เพิ่มขึ้น
ในบริบทของแอป ระบบจะแจ้งให้ผู้ใช้ขอสิทธิ์ที่จะ เข้าถึงฟังก์ชันการทำงานที่อยู่ภายใต้กลุ่มสิทธิ์เหล่านั้น ผู้ใช้จะให้ความสำคัญกับบริบทที่ขอสิทธิ์มากกว่า และหากสิ่งที่คุณขอไม่ตรงกับวัตถุประสงค์ของแอป คุณยิ่งต้องอธิบายให้ผู้ใช้ทราบอย่างละเอียดถึงเหตุผลที่ขอสิทธิ์ คุณควรอธิบายคำขอทั้งในขณะที่ส่งคำขอและในกล่องโต้ตอบติดตามผลหากผู้ใช้ปฏิเสธคำขอทุกครั้งที่ทำได้
ส่งพรอมต์เท่านั้นเพื่อเพิ่มโอกาสที่คำขอสิทธิ์จะได้รับการยอมรับ เมื่อต้องใช้ฟีเจอร์หนึ่งๆ เช่น แจ้งสำหรับไมโครโฟนเท่านั้น เข้าถึงเมื่อผู้ใช้คลิกปุ่มไมโครโฟน ผู้ใช้มีแนวโน้มที่จะให้ความยินยอมในสิทธิ์ที่คาดหวังมากกว่า
การให้สิทธิ์มีความยืดหยุ่นมากขึ้น
ผู้ใช้สามารถปฏิเสธสิทธิ์เข้าถึงแต่ละรายการได้เมื่อมีการขอและในการตั้งค่า แต่ผู้ใช้อาจยังแปลกใจเมื่อฟังก์ชันการทำงานใช้งานไม่ได้ เป็นความคิดที่ดีที่จะตรวจสอบจำนวนผู้ใช้ที่ปฏิเสธ (เช่น การใช้ Google Analytics) ซึ่งคุณจะสามารถเปลี่ยนโครงสร้างภายในโค้ด เพื่อหลีกเลี่ยงการใช้สิทธิ์นั้นหรือให้ คำอธิบายเหตุผลที่คุณต้องขอสิทธิ์เพื่อให้แอปทำงานได้อย่างถูกต้อง นอกจากนี้ คุณควรตรวจสอบว่าแอปจัดการข้อยกเว้นเมื่อผู้ใช้ปฏิเสธคำขอสิทธิ์หรือปิดสิทธิ์ในการตั้งค่าด้วย
ภาระงานธุรกรรมที่เพิ่มขึ้น
ระบบจะขอให้ผู้ใช้ให้สิทธิ์เข้าถึงสำหรับกลุ่มสิทธิ์ทีละรายการ ไม่ใช่แบบเป็นชุด คุณจึงควรลดจำนวนสิทธิ์ที่ขอให้เหลือน้อยที่สุด ซึ่งเป็นการเพิ่มภาระให้ผู้ใช้ในการให้สิทธิ์ จะเพิ่มความเป็นไปได้ที่คำขออย่างน้อย 1 รายการจะถูกปฏิเสธ
สิทธิ์ที่กำหนดให้ต้องกลายเป็นตัวแฮนเดิลเริ่มต้น
แอปบางแอปอาศัยสิทธิ์เข้าถึงข้อมูลที่ละเอียดอ่อนของผู้ใช้ซึ่งเกี่ยวข้องกับประวัติการโทร และข้อความ SMS หากต้องการขอสิทธิ์เฉพาะสำหรับประวัติการโทร และข้อความ SMS และเผยแพร่แอปของคุณไปยัง Play Store คุณจะต้องแจ้ง ผู้ใช้สามารถตั้งค่าแอปของคุณเป็นตัวแฮนเดิลเริ่มต้นสําหรับฟังก์ชันหลักของระบบก่อน ที่ขอสิทธิ์รันไทม์เหล่านี้
ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแฮนเดิลเริ่มต้น รวมถึงคําแนะนําในการแสดงข้อความแจ้งของตัวแฮนเดิลเริ่มต้นต่อผู้ใช้ได้ที่ดูคู่มือเกี่ยวกับสิทธิ์ที่ใช้เฉพาะในตัวแฮนเดิลเริ่มต้น
รู้จักห้องสมุดที่คุณกำลังใช้งาน
บางครั้งไลบรารีที่คุณใช้ในแอปจำเป็นต้องใช้สิทธิ์ สำหรับ
เช่น ไลบรารีโฆษณาและไลบรารีการวิเคราะห์อาจต้องมีสิทธิ์เข้าถึง
LOCATION
กลุ่มสิทธิ์เพื่อติดตั้งใช้งานที่กำหนด
แต่จากมุมมองของผู้ใช้ คำขอสิทธิ์มาจาก
จากแอป ไม่ใช่ไลบรารี
เช่นเดียวกับที่ผู้ใช้เลือกแอปที่ใช้สิทธิ์น้อยกว่าสำหรับฟังก์ชันการทำงานเดียวกัน นักพัฒนาแอปควรตรวจสอบไลบรารีและเลือก SDK ของบุคคลที่สามที่ไม่ได้ใช้สิทธิ์ที่ไม่จำเป็น ตัวอย่างเช่น หาก
คุณกำลังใช้ไลบรารีที่ให้บริการข้อมูลตำแหน่ง ดูให้แน่ใจว่าคุณ
ไม่ได้ขอสิทธิ์ FINE_LOCATION
เว้นแต่ว่าคุณจะ
โดยใช้ฟังก์ชันการกำหนดเป้าหมายตามสถานที่
จำกัดการเข้าถึงตำแหน่งในเบื้องหลัง
เมื่อแอปทำงานอยู่เบื้องหลัง การเข้าถึงตำแหน่งควรมีความสําคัญต่อฟังก์ชันการทํางานหลักของแอปและแสดงประโยชน์ที่ชัดเจนต่อผู้ใช้
ทดสอบรูปแบบสิทธิ์ทั้ง 2 แบบ
ใน Android 6.0 (API ระดับ 23) ขึ้นไป ผู้ใช้จะให้สิทธิ์และเพิกถอนสิทธิ์ของแอปขณะรันไทม์แทนที่จะดำเนินการเมื่อติดตั้งแอป คุณจึงต้องทดสอบแอปภายใต้เงื่อนไขที่หลากหลายมากขึ้น ก่อนหน้า ของ Android 6.0 คุณอาจคาดเดาได้อย่างสมเหตุสมผลว่าหากแอปของคุณกำลังทำงาน ทั้งหมด ไฟล์ก็มีสิทธิ์ทั้งหมดที่ประกาศไว้ในไฟล์ Manifest ของแอป ตอนนี้ ผู้ใช้ สามารถเปิดหรือปิดสิทธิ์สำหรับแอปใดก็ได้โดยไม่คำนึงถึงระดับ API คุณควรทดสอบเพื่อให้แน่ใจว่าแอปทำงานได้อย่างถูกต้องในสถานการณ์ต่างๆ เกี่ยวกับสิทธิ์
เคล็ดลับต่อไปนี้จะช่วยคุณค้นหาปัญหาเกี่ยวกับโค้ดที่เกี่ยวข้องกับสิทธิ์ในอุปกรณ์ที่ใช้ API ระดับ 23 ขึ้นไป
- ระบุสิทธิ์ปัจจุบันของแอปและเส้นทางโค้ดที่เกี่ยวข้อง
- ทดสอบขั้นตอนของผู้ใช้ในบริการและข้อมูลที่ได้รับการปกป้องด้วยสิทธิ์
- ทดสอบด้วยชุดค่าผสมต่างๆ ของสิทธิ์ที่อนุญาตหรือเพิกถอน สำหรับ
เช่น แอปกล้องอาจแสดง
CAMERA
,READ_CONTACTS
และACCESS_FINE_LOCATION
ในไฟล์ Manifest คุณควรทดสอบแอปโดยเปิดและปิดสิทธิ์แต่ละรายการเหล่านี้ เพื่อให้แน่ใจว่าแอปสามารถจัดการการกำหนดค่าสิทธิ์ทั้งหมดได้อย่างราบรื่น - ใช้เครื่องมือ adb เพื่อจัดการสิทธิ์จากบรรทัดคำสั่ง ดังนี้
- แสดงรายการสิทธิ์และสถานะตามกลุ่ม:
$ adb shell pm list permissions -d -g
- ให้หรือเพิกถอนสิทธิ์อย่างน้อย 1 รายการ
$ adb shell pm [grant|revoke] <permission-name> ...
- แสดงรายการสิทธิ์และสถานะตามกลุ่ม:
- วิเคราะห์แอปเพื่อหาบริการที่ใช้สิทธิ์
แหล่งข้อมูลเพิ่มเติม
- หลักเกณฑ์การออกแบบ Material สำหรับสิทธิ์ของ Android
- Android Marshmallow 6.0: การขอสิทธิ์: วิดีโอนี้จะอธิบายถึง โมเดลสิทธิ์รันไทม์ของ Android และวิธีที่ถูกต้องในการถามผู้ใช้ สิทธิ์
- อธิบายเหตุผลที่แอปต้องการสิทธิ์
- แนวทางปฏิบัติแนะนำสำหรับตัวระบุที่ไม่ซ้ำกัน