แนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับสิทธิ์ของแอป

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

แหล่งข้อมูลเพิ่มเติม