ย่อคำขอสิทธิ์

เราขอแนะนำให้คุณลดการใช้สิทธิ์ในแอปเพื่อเป็นส่วนหนึ่งของการปรับปรุงคุณภาพแอป และปกป้องความเป็นส่วนตัวของผู้ใช้ ซึ่งจะช่วยให้ผู้ใช้ค้นพบและใช้แอปคุณภาพสูงที่มอบ สภาพแวดล้อมที่ปลอดภัยและมั่นคงสำหรับผู้ใช้

การขอสิทธิ์จากผู้ใช้จะขัดจังหวะขั้นตอนของผู้ใช้ และผู้ใช้สามารถปฏิเสธคำขอของคุณได้ นอกจากนี้ ทุกครั้งที่คุณประกาศสิทธิ์ใหม่ คุณต้องตรวจสอบวิธีที่แอปขอและแชร์ข้อมูลผู้ใช้ สิทธิ์และ API ที่มีความละเอียดอ่อนเป็นพิเศษบางรายการ กำหนดให้คุณต้องเปิดเผยข้อมูลในแอปเกี่ยวกับการเข้าถึง การเก็บรวบรวม การใช้งาน และการแชร์ข้อมูล

คุณสามารถลดการใช้สิทธิ์ได้หลายวิธีดังนี้

  • ประกาศสิทธิ์ที่ให้ข้อมูลตำแหน่งคร่าวๆ แทน ข้อมูลตำแหน่งที่แน่นอน หากแอปต้องการเพียงตำแหน่งโดยประมาณ
  • เรียกใช้ API ที่อนุญาตให้แอปของคุณทําฟังก์ชันการทํางานที่ต้องการได้โดยไม่ต้องประกาศสิทธิ์
  • เรียกใช้ Intent หรือตัวแฮนเดิลเหตุการณ์ที่เฉพาะเจาะจงเพื่อดำเนินการฟังก์ชันการทำงานแทนการประกาศสิทธิ์
  • ระบบมี สัญญาในตัว สำหรับการดำเนินการกับไฟล์ต่างๆ และยังรองรับสัญญาที่กำหนดเองด้วย

หากต้องประกาศสิทธิ์ ให้เคารพการตัดสินใจของผู้ใช้เสมอ และหาวิธีลดประสบการณ์การใช้งานแอปอย่างค่อยเป็นค่อยไป

หน้านี้อธิบายกรณีการใช้งานหลายอย่างที่แอปของคุณสามารถทำได้โดยไม่ต้องประกาศความจำเป็นในการขอสิทธิ์ใดๆ

แสดงสถานที่ใกล้เคียง

แอปอาจต้องทราบตำแหน่งโดยประมาณของผู้ใช้ ซึ่งมีประโยชน์ในการ แสดงข้อมูลที่รับรู้ตำแหน่ง เช่น ร้านอาหารใกล้เคียง

กรณีการใช้งานบางอย่างต้องการเพียงการประมาณตำแหน่งของอุปกรณ์อย่างคร่าวๆ ในกรณีเหล่านี้ ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้ ทั้งนี้ขึ้นอยู่กับความถี่ที่แอปต้องการข้อมูลที่รับรู้ตำแหน่ง

  • หากแอปของคุณต้องใช้ตำแหน่งบ่อยครั้ง ให้ประกาศสิทธิ์ ACCESS_COARSE_LOCATION สิทธิ์นี้จะให้ค่าประมาณตำแหน่งของอุปกรณ์จากบริการตำแหน่งตามที่อธิบายไว้ในเอกสารประกอบเกี่ยวกับความแม่นยำของตำแหน่งโดยประมาณ
  • หากแอปของคุณต้องการตำแหน่งไม่บ่อยนักหรือเพียงครั้งเดียว ให้พิจารณาขอให้ผู้ใช้ ป้อนที่อยู่หรือรหัสไปรษณีย์แทน

Use Case อื่นๆ ต้องมีการประมาณตำแหน่งของอุปกรณ์ที่แม่นยำยิ่งขึ้น สถานการณ์เหล่านั้นเป็นกรณีเดียวที่อนุญาตให้ประกาศสิทธิ์ ACCESS_FINE_LOCATION

สร้างและเข้าถึงไฟล์

Android ช่วยให้คุณสร้างและเข้าถึงไฟล์ได้โดยไม่ต้องประกาศสิทธิ์ใดๆ ที่เกี่ยวข้องกับพื้นที่เก็บข้อมูลหรือเซ็นเซอร์

เปิดไฟล์สื่อ

แอปของคุณอาจอนุญาตให้ผู้ใช้เลือกจากรูปภาพและวิดีโอของตนเอง เช่น สำหรับ ไฟล์แนบในข้อความหรือรูปโปรไฟล์

หากต้องการรองรับฟังก์ชันการทำงานนี้ ให้ใช้ photo picker เครื่องมือเลือกรูปภาพไม่ ต้องใช้สิทธิ์รันไทม์ใดๆ เมื่อผู้ใช้โต้ตอบกับเครื่องมือเลือกรูปภาพเพื่อเลือกรูปภาพหรือวิดีโอที่จะแชร์กับแอป ระบบจะให้สิทธิ์เข้าถึงแบบอ่านชั่วคราวแก่ URI ที่เชื่อมโยงกับไฟล์สื่อที่เลือก

หากแอปของคุณต้องเข้าถึงไฟล์สื่อโดยไม่ใช้เครื่องมือเลือกรูปภาพ คุณไม่จำเป็นต้องประกาศสิทธิ์เข้าถึงพื้นที่เก็บข้อมูลใดๆ โดยทำดังนี้

เปิดเอกสาร

แอปของคุณอาจแสดงเอกสารที่ผู้ใช้สร้างขึ้น ไม่ว่าจะในแอปของคุณหรือใน แอปอื่น ตัวอย่างที่พบบ่อยคือไฟล์ข้อความ

ในกรณีนี้ ให้ประกาศ READ_EXTERNAL_STORAGE เพื่อความเข้ากันได้กับอุปกรณ์รุ่นเก่าเท่านั้น ตั้งค่า android:maxSdkVersion เป็น 28

ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้ โดยขึ้นอยู่กับแอปที่สร้างเอกสาร

ถ่ายรูป

ผู้ใช้อาจถ่ายภาพในแอปของคุณโดยใช้แอปกล้องถ่ายรูประบบที่ติดตั้งไว้ล่วงหน้า

ในกรณีนี้ อย่าประกาศCAMERA แต่ให้เรียกใช้การดำเนินการของอินเทนต์ ACTION_IMAGE_CAPTURE แทน

บันทึกวิดีโอ

ผู้ใช้อาจบันทึกวิดีโอในแอปของคุณโดยใช้แอปกล้องของระบบที่ติดตั้งไว้ล่วงหน้า

ในกรณีนี้ อย่าประกาศCAMERA แต่ให้เรียกใช้การดำเนินการของอินเทนต์ ACTION_VIDEO_CAPTURE แทน

ระบุอุปกรณ์ที่เรียกใช้อินสแตนซ์ของแอป

อินสแตนซ์หนึ่งๆ ของแอปอาจต้องทราบว่าแอปทำงานในอุปกรณ์ใด ซึ่งจะเป็นประโยชน์สำหรับแอปที่มีค่ากำหนดหรือการรับส่งข้อความเฉพาะอุปกรณ์ เช่น เพลย์ลิสต์ที่แตกต่างกันสำหรับอุปกรณ์ทีวีและอุปกรณ์ที่สวมใส่ได้

ในกรณีนี้ อย่าเข้าถึง IMEI ของอุปกรณ์โดยตรง แต่ใน Android 10 คุณจะทำเช่นนั้นไม่ได้ ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้แทน

  • รับตัวระบุอุปกรณ์ที่ไม่ซ้ำกันสำหรับอินสแตนซ์ของแอปโดยใช้ไลบรารี Instance ID
  • สร้างตัวระบุของคุณเองซึ่งกำหนดขอบเขตไว้ที่พื้นที่เก็บข้อมูลของแอป ใช้ฟังก์ชันระบบพื้นฐาน เช่น randomUUID()

จับคู่กับอุปกรณ์ผ่านบลูทูธ

แอปของคุณอาจมอบประสบการณ์การใช้งานที่ดียิ่งขึ้นได้ด้วยการโอนข้อมูลไปยังอุปกรณ์อื่นผ่านบลูทูธ

หากต้องการรองรับฟังก์ชันการทำงานนี้ โปรดอย่าประกาศสิทธิ์ ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATIION หรือ BLUETOOTH_ADMIN แต่ให้ใช้การจับคู่อุปกรณ์เสริมแทน

ป้อนหมายเลขบัตรชำระเงินโดยอัตโนมัติ

บริการ Google Play มีคลังที่ช่วยให้คุณป้อนหมายเลขบัตรชำระเงินได้โดยอัตโนมัติ คุณสามารถใช้ไลบรารีการจดจำบัตรเดบิตและบัตรเครดิต แทนการประกาศCAMERAสิทธิ์ได้

จัดการการโทรและข้อความ SMS

บริการของ Android และ Google Play มีไลบรารีที่ช่วยให้คุณจัดการการโทร และข้อความได้โดยไม่ต้องประกาศสิทธิ์ใดๆ ที่เกี่ยวข้องกับการโทร หรือข้อความ SMS

ป้อนรหัสผ่านแบบใช้ครั้งเดียวโดยอัตโนมัติ

เพื่อเพิ่มประสิทธิภาพเวิร์กโฟลว์การตรวจสอบสิทธิ์แบบ 2 ปัจจัย แอปอาจป้อนรหัสผ่านแบบใช้ครั้งเดียวที่ส่งไปยังอุปกรณ์ของผู้ใช้โดยอัตโนมัติเพื่อยืนยันตัวตน

หากต้องการรองรับฟังก์ชันนี้ในอุปกรณ์ที่ขับเคลื่อนโดยบริการ Google Play คุณไม่ควร ประกาศสิทธิ์ READ_SMS แต่ให้ใช้ SMS Retriever API แทน

ในอุปกรณ์อื่นๆ หากแอปกำหนดเป้าหมายเป็น Android 8.0 (API ระดับ 26) ขึ้นไป ให้สร้างโทเค็นเฉพาะแอปโดยใช้ createAppSpecificSmsToken() ส่งโทเค็นนี้ไปยัง แอปหรือบริการอื่นที่ส่งข้อความ SMS ยืนยันได้

ป้อนหมายเลขโทรศัพท์ของผู้ใช้โดยอัตโนมัติ

แอปของคุณอาจอนุญาตให้ผู้ใช้ป้อนหมายเลขโทรศัพท์ของอุปกรณ์โดยอัตโนมัติเพื่อให้บริการการขายหรือการสนับสนุนที่มีประสิทธิภาพมากขึ้น

หากต้องการรองรับฟังก์ชันนี้ในอุปกรณ์ที่ขับเคลื่อนโดยบริการ Google Play คุณไม่ควร ประกาศสิทธิ์ READ_PHONE_STATE แต่ให้ใช้ไลบรารีหมายเลขโทรศัพท์ คำแนะนำแทน

กรองการโทร

แอปอาจกรองการโทรเพื่อหาการโทรที่เป็นสแปมเพื่อลดการหยุดชะงักที่ไม่จำเป็นสำหรับผู้ใช้

หากต้องการรองรับฟังก์ชันการทำงานนี้ อย่าประกาศสิทธิ์ READ_PHONE_STATE แต่ให้ใช้ API ของ CallScreeningService แทน

โทรออก

แอปของคุณอาจมีฟีเจอร์ที่ช่วยให้โทรออกได้โดยแตะข้อมูลของรายชื่อติดต่อ

หากต้องการรองรับฟังก์ชันการทำงานนี้ ให้ใช้การดำเนินการ Intent ACTION_DIAL แทนการดำเนินการ ACTION_CALL ACTION_CALL ต้องใช้สิทธิ์CALL_PHONEในเวลาติดตั้ง ซึ่งจะป้องกันไม่ให้อุปกรณ์ที่โทรออกไม่ได้ เช่น แท็บเล็ตบางรุ่น ติดตั้งแอปพลิเคชันของคุณ

หยุดสื่อชั่วคราวเมื่อแอปถูกขัดจังหวะ

หากผู้ใช้ได้รับโทรศัพท์หรือมีการปลุกที่ผู้ใช้กำหนดค่าไว้ แอปของคุณควรหยุดการเล่นสื่อชั่วคราวจนกว่าแอปจะได้รับโฟกัสเสียงอีกครั้ง

หากต้องการรองรับฟังก์ชันการทำงานนี้ ให้ประกาศ READ_PHONE_STATE permission ให้ใช้ตัวแฮนเดิลเหตุการณ์ onAudioFocusChange() แทน ซึ่งจะทำงานโดยอัตโนมัติเมื่อระบบเปลี่ยนโฟกัสเสียง ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้โฟกัส เสียง

สแกนบาร์โค้ด

Android รองรับ Google Code Scanner API ซึ่งขับเคลื่อนโดยบริการ Google Play และช่วยให้คุณถอดรหัสบาร์โค้ดได้โดยไม่ต้อง ประกาศสิทธิ์เข้าถึงกล้อง API นี้ช่วยรักษาความเป็นส่วนตัวของผู้ใช้และลดโอกาสที่คุณจะต้องสร้าง UI ที่กำหนดเองสำหรับกรณีการใช้งานการสแกนบาร์โค้ด

API จะสแกนบาร์โค้ดและส่งคืนเฉพาะผลการสแกนไปยังแอปของคุณเท่านั้น ระบบจะประมวลผลรูปภาพในอุปกรณ์ และ Google จะไม่จัดเก็บข้อมูลหรือผลการสแกนใดๆ

หากแอปต้องรองรับกรณีการใช้งานหรือรูปแบบบาร์โค้ดที่ซับซ้อน หรือหากต้องใช้ UI ที่กำหนดเอง ให้ใช้ API การสแกนบาร์โค้ดของ ML Kit แทน

รีเซ็ตสิทธิ์ที่ไม่ได้ใช้

Android มีหลายวิธีในการรีเซ็ตสิทธิ์รันไทม์ที่ไม่ได้ใช้กลับไปเป็น สถานะเริ่มต้นที่ถูกปฏิเสธ

อ่านคำแนะนำด้านการออกแบบ

ขอสิทธิ์รันไทม์

เมื่อประเมินแล้วว่าแอปของคุณต้องประกาศและขอสิทธิ์รันไทม์ ให้ทำตามเวิร์กโฟลว์ที่เฉพาะเจาะจงเพื่อดำเนินการดังกล่าว

อ่านคำแนะนำด้านการออกแบบ

อธิบายเหตุผลที่แอปของคุณต้องมีสิทธิ์

การใช้ requestPermissions() จะแสดงกล่องโต้ตอบที่ระบุสิทธิ์ที่แอปของคุณต้องการใช้ แต่ไม่ได้อธิบายเหตุผล ซึ่งอาจทำให้ผู้ใช้สับสน

โปรดอ่านรายละเอียดและคำแนะนำเพิ่มเติมเกี่ยวกับวิธีและเวลาที่ควรแสดงกล่องโต้ตอบนี้ในคำแนะนำด้านการออกแบบ

จัดการการปฏิเสธสิทธิ์

แอปของคุณควรช่วยให้ผู้ใช้เข้าใจผลกระทบของการปฏิเสธสิทธิ์ ทั้งก่อนและหลังจากที่ผู้ใช้เลือกปฏิเสธ

อ่านคำแนะนำด้านการออกแบบ