คำขอสิทธิ์จะช่วยปกป้องข้อมูลที่ละเอียดอ่อนที่พร้อมใช้งานจากอุปกรณ์ และ ควรใช้เฉพาะเมื่อจำเป็นต้องเข้าถึงข้อมูลเพื่อให้แอปทำงานได้เท่านั้น เอกสารนี้มีเคล็ดลับเกี่ยวกับวิธีที่คุณอาจใช้ฟังก์ชันการทำงานแบบเดียวกัน (หรือดีกว่า) ได้โดยไม่ต้องเข้าถึงข้อมูลดังกล่าว ซึ่งไม่ได้เป็นการอธิบายอย่างละเอียดเกี่ยวกับวิธีการทำงานของสิทธิ์ในระบบปฏิบัติการ Android
หากต้องการดูข้อมูลทั่วไปเพิ่มเติมเกี่ยวกับสิทธิ์ของ Android โปรดดู ภาพรวมของสิทธิ์ ดูรายละเอียดเกี่ยวกับวิธีใช้สิทธิ์ในโค้ดได้ที่ หัวข้อการขอสิทธิ์ของแอป
สิทธิ์ใน Android 6.0 ขึ้นไป
ใน Android 6.0 (ระดับ API 23) ขึ้นไป แอปสามารถขอสิทธิ์จากผู้ใช้ในระหว่างรันไทม์ แทนที่จะขอสิทธิ์ก่อนการติดตั้ง ซึ่งจะช่วยให้แอปขอสิทธิ์ได้เมื่อแอปต้องการบริการหรือข้อมูลที่บริการเหล่านั้นปกป้องจริงๆ แม้ว่าวิธีนี้จะไม่เปลี่ยนแปลงลักษณะการทำงานโดยรวมของแอป (โดยจำเป็น) แต่ก็ทำให้เกิดการเปลี่ยนแปลงเล็กน้อยที่เกี่ยวข้องกับวิธีจัดการข้อมูลผู้ใช้ที่ละเอียดอ่อน ดังนี้
บริบทตามสถานการณ์ที่เพิ่มขึ้น
ระบบจะแจ้งให้ผู้ใช้ให้สิทธิ์เข้าถึงฟังก์ชันการทำงานที่กลุ่มสิทธิ์เหล่านั้นครอบคลุมในระหว่างรันไทม์ในบริบทของแอป ผู้ใช้จะให้ความสำคัญกับบริบทที่ขอสิทธิ์มากขึ้น และหากสิ่งที่คุณขอไม่ตรงกับวัตถุประสงค์ของแอป คุณจะต้องอธิบายรายละเอียดให้ผู้ใช้ทราบถึงเหตุผลที่คุณขอสิทธิ์ คุณควรให้คำอธิบายเกี่ยวกับคำขอทั้งในขณะที่ขอและในกล่องโต้ตอบติดตามผลหากผู้ใช้ปฏิเสธคำขอ
หากต้องการเพิ่มโอกาสที่คำขอสิทธิ์จะได้รับการยอมรับ ให้แจ้งเฉพาะ เมื่อจำเป็นต้องใช้ฟีเจอร์ที่เฉพาะเจาะจง เช่น แจ้งขอสิทธิ์เข้าถึงไมโครโฟน ก็ต่อเมื่อผู้ใช้คลิกปุ่มไมโครโฟน ผู้ใช้มีแนวโน้มที่จะ อนุญาตสิทธิ์ที่คาดหวังไว้
ความยืดหยุ่นที่มากขึ้นในการให้สิทธิ์
ผู้ใช้สามารถปฏิเสธการเข้าถึงสิทธิ์แต่ละรายการได้ในขณะที่ขอสิทธิ์ และในการตั้งค่า แต่ผู้ใช้อาจยังคงประหลาดใจเมื่อฟังก์ชันการทำงาน หยุดทำงานเนื่องจากเหตุการณ์ดังกล่าว คุณควรตรวจสอบจำนวนผู้ใช้ที่ปฏิเสธ สิทธิ์ (เช่น ใช้ Google Analytics) เพื่อที่คุณจะได้ปรับโครงสร้าง แอปใหม่เพื่อหลีกเลี่ยงการพึ่งพาสิทธิ์นั้น หรืออธิบายเหตุผลที่คุณต้องใช้สิทธิ์เพื่อให้แอปทำงานได้อย่างถูกต้องได้ดียิ่งขึ้น นอกจากนี้ คุณ ควรตรวจสอบว่าแอปจัดการข้อยกเว้นได้เมื่อผู้ใช้ ปฏิเสธคำขอสิทธิ์หรือปิดสิทธิ์ในการตั้งค่า
ภาระด้านธุรกรรมที่เพิ่มขึ้น
ระบบจะขอให้ผู้ใช้ให้สิทธิ์เข้าถึงกลุ่มสิทธิ์ทีละกลุ่ม ไม่ใช่เป็นชุด ดังนั้นคุณจึงต้องลดจำนวนสิทธิ์ที่ขอให้เหลือน้อยที่สุด ซึ่งจะเพิ่มภาระให้กับผู้ใช้ในการให้สิทธิ์ และจึง เพิ่มโอกาสที่ระบบจะปฏิเสธคำขออย่างน้อย 1 รายการ
สิทธิ์ที่ต้องใช้การเป็นตัวแฮนเดิลเริ่มต้น
บางแอปต้องอาศัยการเข้าถึงข้อมูลผู้ใช้ที่ละเอียดอ่อนที่เกี่ยวข้องกับบันทึกการโทรและข้อความ SMS หากต้องการขอสิทธิ์เฉพาะสำหรับบันทึกการโทรและข้อความ SMS และเผยแพร่แอปไปยัง Play Store คุณต้องแจ้งให้ผู้ใช้ตั้งค่าแอปของคุณเป็น ตัวแฮนเดิลเริ่มต้นสำหรับฟังก์ชันหลักของระบบก่อนที่จะขอสิทธิ์รันไทม์เหล่านี้
ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแฮนเดิลเริ่มต้น รวมถึงคำแนะนำในการแสดงข้อความแจ้งตัวแฮนเดิลเริ่มต้นแก่ผู้ใช้ได้ที่คู่มือเกี่ยวกับสิทธิ์ที่ใช้ในตัวแฮนเดิลเริ่มต้นเท่านั้น
ทำความรู้จักกับไลบรารีที่คุณใช้
บางครั้งไลบรารีที่คุณใช้ในแอปอาจต้องใช้สิทธิ์ For
ตัวอย่างเช่น ไลบรารีโฆษณาและ Analytics อาจต้องเข้าถึง the
LOCATION กลุ่มสิทธิ์ เพื่อใช้ the required
ฟังก์ชันการทำงานที่จำเป็น แต่ในมุมมองของผู้ใช้ คำขอสิทธิ์จะมาจากแอปของคุณ ไม่ใช่ไลบรารี
เช่นเดียวกับที่ผู้ใช้เลือกแอปที่ใช้สิทธิ์น้อยกว่าสำหรับฟังก์ชันการทำงานแบบเดียวกัน
นักพัฒนาแอปควรตรวจสอบไลบรารีและเลือก
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 Design สำหรับสิทธิ์ของ Android
- Android Marshmallow 6.0: Asking For Permission: วิดีโอนี้อธิบาย รูปแบบสิทธิ์รันไทม์ของ Android และวิธีที่ถูกต้องในการขอ สิทธิ์จากผู้ใช้
- อธิบายเหตุผลที่แอปต้องใช้สิทธิ์
- แนวทางปฏิบัติแนะนำสำหรับตัวระบุที่ไม่ซ้ำกัน