ทำไมแอปพลิเคชั่นมากมายต้องได้รับอนุญาตในการอ่านสถานะโทรศัพท์และข้อมูลระบุตัวตน


88

ทำไมแอปพลิเคชั่นมากมายต้องได้รับอนุญาตในการอ่านสถานะโทรศัพท์และข้อมูลระบุตัวตน โดยเฉพาะ:

Phone calls
   read phone state and identity

ตัวอย่างเช่น Quickpedia เป็นพอร์ทัล Wikipedia แต่ต้องการเข้าถึงโทรศัพท์ คำอธิบายสำหรับสิ่งนี้คืออะไร?

ป้อนคำอธิบายรูปภาพที่นี่


มันไม่ได้จริงๆสำหรับ "Yeah Yeah, app นี้ได้รับอนุญาตนี้ในการส่ง SMS และแหวนจำนวนพรีเมี่ยมด้านหลังของคุณ" ซึ่งเป็นสิ่งที่คนสมมติ @ คำตอบของคริสเตียนด้านล่างได้ตอกตะปูบนหัว! มันถูกต้องตามกฎหมายในหลายกรณีและบ่อยครั้งที่ devs มักจะลืมเรื่องการอนุญาตสิทธิ์ (อาจเป็นการหยุดชะงักจากการพัฒนาแอปในวันแรก ๆ
t0mm13b

1
@ t0mm13b ฉันไม่คิดว่าจะมีความต้องการสิทธิ์ที่ลดลงมากนักนอกเทคโนโลยีและความเป็นส่วนตัว (รวมถึงตัวเอง) ดังนั้นหากผู้ผลิตแอปกำหนดให้เป็นบรรทัดฐานที่จะต้องมีสิทธิ์ใช้งานแบบเต็มรูปแบบผู้บริโภคจะถือว่าสิทธิ์จำนวนมากใช้ได้สำหรับแอปใด ๆ ก็ตาม รัฐบาลไม่ได้กดดันพวกเขาให้ใช้สิทธิ์ขั้นต่ำและจนถึงขณะนี้ตลาดก็ไม่ได้กดดันพวกเขา เช่นมีค่าใช้จ่ายเพียงเล็กน้อยสำหรับแอปที่ต้องการสิทธิ์จำนวนมาก
user29020

คำตอบ:


59

อนุญาตให้แอปอ่าน ID เฉพาะ (ตัวระบุโทรศัพท์ชื่อIMEI ) ที่เชื่อมโยงกับโทรศัพท์ของคุณ

ดังนั้นจึงสามารถช่วยป้องกันการคัดลอกหรือพยายามติดตามจำนวนผู้ใช้


3
ดูคำถาม SO นี้เกี่ยวกับการรับ ID ที่ไม่ซ้ำกันของโทรศัพท์ดูเหมือนว่า (ในปัจจุบัน) วิธีที่เชื่อถือได้มากที่สุดสำหรับนักพัฒนาที่จะได้รับ ID ที่ไม่ซ้ำจากโทรศัพท์ต้องใช้สถานะการอนุญาต Read Phone State stackoverflow.com/questions/2785485/…
GAThrawn

40

มีเหตุผลอื่นที่ไม่ใช่รหัสที่ไม่ซ้ำกัน ฉันเดาว่าครึ่งหนึ่งของแอพไม่สามารถเข้าถึงค่าเหล่านั้นได้เลย ปัญหาคือว่าสำหรับรุ่นที่ต่ำกว่าถึง Android 1.5 ไม่มีสิทธิ์นี้ ทุกคนสามารถเข้าถึงค่าเหล่านี้ได้โดยไม่ต้องขออะไร

ดังนั้นหากคุณสร้างแอพที่เข้ากันได้กับ 1.5 การอนุญาตนี้จะถูกเพิ่มโดยอัตโนมัติเพื่อเลียนแบบความปลอดภัยที่ต่ำกว่าของ Android 1.5 เพราะคุณสามารถเพิกเฉยต่อการอนุญาตนี้ได้ในเกือบทุกครั้งเพราะมันมักจะเป็นปัญหาความเข้ากันได้


2
สิ่งเดียวกันนี้เกิดขึ้นกับการเข้าถึงการ์ด SD
เดนิส Nikolaenko

1
มันเป็นความจริง - แต่ไม่ได้อธิบายว่าทำไมแอพสำหรับ 2.x ขึ้นไปจึงต้องการบ่อยครั้ง
Izzy

19

เหตุผลก็คือ Android 1.5 และรุ่นก่อนหน้าไม่ต้องการแอปพลิเคชันเพื่อขอสิทธิ์เหล่านั้นโดยเฉพาะ ตั้งแต่ Android 1.6 ต้องได้รับการอนุญาตจากแอปโดยเฉพาะ อย่างไรก็ตามหากคุณระบุว่าแอปพลิเคชันของคุณสามารถทำงานบนอุปกรณ์ที่ใช้ Android 1.5 หรือต่ำกว่าได้สิทธิ์นั้นจะถูกเพิ่มเข้าไปในแอปพลิเคชันโดยค่าเริ่มต้นและตลาดจะแสดงการอนุญาตดังกล่าวตามคำขอของแอปพลิเคชัน

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


คุณมีลิงค์ไปยังเอกสารใด ๆ ที่แสดงสิ่งนี้หรือไม่?
GAThrawn


developer.android.com/reference/android/os/…ให้รายการตัวระบุเวอร์ชันเป้าหมายทั้งหมดและการเปลี่ยนแปลงสิทธิ์ (ระหว่างความแตกต่างอื่น ๆ ) ระหว่างพวกเขา
สจ๊วต

ขวา. แต่อาจจะไม่ "น่าสนใจ" อีกต่อไปเนื่องจากแอปสำหรับ 1.5 และต่ำกว่านั้นค่อนข้างหายาก :)
Izzy

18

คำถามนี้รบกวนฉันมาระยะหนึ่งแล้ว ดังนั้นในที่สุดฉันก็ตัดสินใจไปที่จุดต่ำสุดของปัญหา

PlayStore มีแอปที่มีชื่ออนุญาต READ_PHONE_STATE ซึ่งร้องขอREAD_PHONE_STATEเป็นสิทธิ์เท่านั้นและไม่ทำอะไรนอกจากการพิมพ์ข้อมูลทั้งหมดที่สามารถเข้าถึงได้โดยมีหรือไม่มีการใช้งาน ฉันได้ติดตั้งในLG Optimus 4Xของฉันถูกรูตบนสต็อก Android 4.0.3 และเพิกถอนการอนุญาตโดยใช้ LBE ผลลัพธ์ที่น่าสนใจทีเดียวภาพหน้าจอต่อไปนี้แสดง:

ภาพหน้าจอ 1 ภาพหน้าจอ 2 ภาพหน้าจอ 3
ข้อมูลที่รวบรวมโดยแอปที่ได้รับอนุญาต READ_PHONE_STATE (คลิกที่ภาพเพื่อความหลากหลาย)

อย่างที่คุณเห็นได้อย่างง่ายดายแม้กระทั่งข้อมูลบางอย่างที่ dev ไม่สามารถเข้าถึงได้โดยไม่ได้รับอนุญาตก็สามารถเข้าถึงได้อย่างอิสระ: หมายเลขกล่องจดหมายของฉัน (หมายเหตุ: ใช่มันเป็นข้อมูลที่ถูกต้องกับผู้ให้บริการของฉัน แสดงได้อย่างอิสระ;) ในตอนท้ายของภาพหน้าจอแรกที่คุณเห็น:

  • CALL_STATE_IDLE. ดังนั้นจึงไม่มีสายโทรเข้าออกหรืออยู่ระหว่างดำเนินการ ไม่มีแอปที่ต้องการการอนุญาตนี้เพื่อ "แบ็คกราวน์" ในการโทรเข้า

เป็นไปได้ที่จะเห็นว่าข้อมูลมือถือทำงานอยู่DATA_DISCONNECTEDหรือไม่( ฉันอยู่ใน WiFi เมื่อถ่ายภาพหน้าจอดังที่คุณเห็นในแถบการแจ้งเตือน) คุณอยู่ในประเทศใดผู้ให้บริการของคุณ (รวมถึงข้อมูลทางเทคนิคบางอย่างกับเขา) คุณมีซิมการ์ดหรือโรมมิ่ง

สิ่งเดียวที่ไม่สามารถเข้าถึงได้คือการระบุข้อมูล: IMEI, SIMID, IMSI และหมายเลขโทรศัพท์ของคุณเอง

สรุป: การอนุญาตนี้จำเป็นสำหรับการระบุตัวตนเท่านั้นไม่มีอะไรอื่นอีก

ทำไมแอพจำนวนมากจึงจำเป็นต้องมี

  • สำหรับโมดูลโฆษณาน่าจะเป็น1
  • เพราะผู้พัฒนาคิดว่าเขาต้องการมัน (ตามที่ได้รับคำตอบจากที่นี่) 2
  • เนื่องจากแอปดังกล่าวได้รับการออกแบบมาเพื่อ (ทำงาน) บน Android 1.5 และด้านล่าง (หาง่ายเช่นที่แสดงในGoogle Play )

ความเป็นไปได้ตามลำดับนี้ IMHO


1หมายเหตุโดยโพสต์ของ Dan ในการแชท :

นโยบายของ Google Play ห้ามมิให้แอพของคุณรับ IMEI เพื่อระบุตัวคุณเพื่อจุดประสงค์ในการโฆษณา ไลบรารีโฆษณาทั้งหมดได้รับการอัปเดตในขณะนี้เพื่อใช้ "รหัสโฆษณา" ของ Google-Play-Services ที่ให้บริการโดย Google ดังนั้นสิ่งใดก็ตามที่ยังคงใช้ IMEI เพื่อจุดประสงค์นี้ควรรายงานไปยัง Google

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


2นักพัฒนาอีกเพียงแค่ชี้ให้ฉันไปแตกต่างที่ลึกซึ้งในขณะที่ได้รับอนุญาตไม่จำเป็นต้องอ่านสถานะการโทรปัจจุบัน (ที่ผมได้ชี้ให้เห็น) ก็อาจจะต้องลงทะเบียนผู้ฟังเพื่อที่จะได้รับการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงของการโทร สถานะ (ดู: การตรวจจับสายเรียกเข้าและขาออกบน Android ) แม้ว่าจะมีวิธีการจัดการสิ่งนี้โดยอัตโนมัติเมื่อระบบโทรออกonPauseซึ่งอาจไม่เหมาะสมเสมอ: ลองคิดถึงนาฬิกาปลุกของคุณ คุณอาจไม่ต้องการให้มีการหยุดโดยอัตโนมัติเมื่อมีสายเรียกเข้า - โดยเฉพาะเมื่อโปรไฟล์ของคุณถูกตั้งค่าเป็นระดับเสียงสั่น "ปิดเสียง"


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


อัพเดท

  1. น่าสนใจว่ามีปัญหาแบบเปิด (21504)เพื่อแบ่งREAD_PHONE_STATEสิ่งที่จำเป็นต่อการ a) ตรวจจับสายเรียกเข้าและที่เกี่ยวข้อง (โทรศัพท์) และการอนุญาตครั้งที่สองสำหรับรายละเอียดการระบุตัวตน (IMEI, IMSI ฯลฯ ) เปิดเมื่อวันที่ 11/2011 ยังไม่สามารถใช้งานได้ ติดดาวถ้าสนใจ :)
  2. และใช่มีวิธีการเพื่อให้บรรลุ (โทรเข้ามาตรวจสอบ) เดียวกันโดยไม่ต้องREAD_PHONE_STATEได้รับอนุญาตเป็นเช่นแหลมออกโดยอาร์โน Welzel ในฐานะที่เป็นสายเรียกเข้าจะเรียกสั่น, ว่าเหตุการณ์ที่สามารถนำมาใช้กับการonAudioFocusChange()ที่ไม่ต้องได้รับอนุญาตพิเศษใด ๆ ถ้าเรียกโดยที่แอปสามารถตรวจสอบCallState (อีกครั้งไม่ได้รับอนุญาตพิเศษใด ๆ ที่จำเป็น) เพื่อดูว่ามีการ สายเรียกเข้า.

ฉันคิดว่าคุณจำเป็นต้องลบส่วนที่คุณบอกว่าไม่มีแอปใดต้องการสิทธิ์นี้ในการโทรเข้าพื้นหลัง คุณได้ทำประเด็นนี้ในเชิงอรรถ 2 แล้ว แต่มันขัดแย้งกัน ดูเพิ่มเติมdeveloper.android.com/reference/android/telephony/…
มิเคล

@Mikel คุณถูกต้องบางส่วน การใช้การอนุญาตนี้เป็นวิธีที่ "ง่ายที่สุด" ในการทำงานให้สำเร็จ แต่ไม่ใช่วิธีเดียว มันสามารถทำได้โดยไม่ต้องเป็นนักพัฒนาบางคนชี้ให้เห็น (มันเป็นในการแชท แต่น่าเสียดายที่ฉันได้สูญเสียการเชื่อมโยง) เช่นเดียวกับหลาย ๆ สิ่งการใช้ API ของ Google ทำให้การทำสิ่งต่าง ๆ ง่ายขึ้น (ในขณะที่มันผูกแอปของคุณกับระบบ Google eco) ฉันไม่ใช่นักพัฒนาซอฟต์แวร์ดังนั้นฉันจึงไม่สามารถบอกได้ว่างานอื่น ๆ จะมีความหมายมากขึ้นเพียงใด
Izzy

ฉันยังไม่ใช่นักพัฒนา Android และฉันเห็นด้วยเหมือนบางกรณีการใช้งานได้รับการคุ้มครองโดย onPause () เพียงแค่บอกว่า "ไม่มีแอปที่ต้องการการอนุญาตนี้" ฟังดูผิดสำหรับฉัน ดูเหมือนว่า "แอพบางตัวอาจต้องการการอนุญาตนี้" เช่นหากแอปทำงานในพื้นหลัง นอกจากนี้โปรดทราบว่าการรับความตั้งใจออกอากาศต้องมีประสิทธิภาพมากกว่าการสำรวจสถานะโทรศัพท์ซ้ำหลายครั้ง
Mikel

@Mikel ดูการอัปเดตของฉัน และใช่ "ไม่จำเป็นเลย" อาจจะพูดเกินจริงไปเล็กน้อย อาจเป็น 0.5% ของคำขอปัจจุบันทั้งหมดอาจจำเป็นจริง ๆ แล้วไม่มี #D สำรองและใช่อีกครั้ง: onPause()เป็นสิ่งที่เราคุยกันในการแชท! แต่การใช้onAudioFocusChange()อาจจะมีค่าใช้จ่ายน้อยกว่าแม้ (การสำรวจเล็ก ๆ น้อย ๆ นั้นอาจจะไม่สนใจ)
Izzy

10

ผู้เผยแพร่โฆษณาจำนวนมากใช้สิทธิ์นี้เพื่อรับรหัสโทรศัพท์เพื่อจุดประสงค์ในการติดตามทุกประเภท มีวิธีอื่นในการรับ ID ที่ไม่ซ้ำกัน แต่น่าเสียดายที่พวกเขามีรถใน Android รุ่นเก่า (เรื่องราวมีความซับซ้อนมากขึ้นดูเช่นhttps://stackoverflow.com/questions/2785485/is-there-a-unique-android- device-idหรือhttp://android-developers.blogspot.com/2011/03/identifying-app-installations.htmlสำหรับเรื่องราวที่สมบูรณ์ยิ่งขึ้น)

ดังนั้นหากแอปใช้โฆษณามีโอกาสพอสมควรที่ตัวแอปไม่จำเป็นต้องได้รับอนุญาต READ_PHONE_STATE จริง ๆ มีเพียงผู้ให้บริการโฆษณาเท่านั้น


1
นั่นคือ IMHO ซึ่งเป็นประเด็นหลักที่อยู่เบื้องหลังมันทั้งหมด! คิดได้ดี
Izzy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.