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

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

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