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