ทำไมแอปพลิเคชั่นมากมายต้องได้รับอนุญาตในการอ่านสถานะโทรศัพท์และข้อมูลระบุตัวตน โดยเฉพาะ:
Phone calls
read phone state and identity
ตัวอย่างเช่น Quickpedia เป็นพอร์ทัล Wikipedia แต่ต้องการเข้าถึงโทรศัพท์ คำอธิบายสำหรับสิ่งนี้คืออะไร?
ทำไมแอปพลิเคชั่นมากมายต้องได้รับอนุญาตในการอ่านสถานะโทรศัพท์และข้อมูลระบุตัวตน โดยเฉพาะ:
Phone calls
read phone state and identity
ตัวอย่างเช่น Quickpedia เป็นพอร์ทัล Wikipedia แต่ต้องการเข้าถึงโทรศัพท์ คำอธิบายสำหรับสิ่งนี้คืออะไร?
คำตอบ:
อนุญาตให้แอปอ่าน ID เฉพาะ (ตัวระบุโทรศัพท์ชื่อIMEI ) ที่เชื่อมโยงกับโทรศัพท์ของคุณ
ดังนั้นจึงสามารถช่วยป้องกันการคัดลอกหรือพยายามติดตามจำนวนผู้ใช้
มีเหตุผลอื่นที่ไม่ใช่รหัสที่ไม่ซ้ำกัน ฉันเดาว่าครึ่งหนึ่งของแอพไม่สามารถเข้าถึงค่าเหล่านั้นได้เลย ปัญหาคือว่าสำหรับรุ่นที่ต่ำกว่าถึง Android 1.5 ไม่มีสิทธิ์นี้ ทุกคนสามารถเข้าถึงค่าเหล่านี้ได้โดยไม่ต้องขออะไร
ดังนั้นหากคุณสร้างแอพที่เข้ากันได้กับ 1.5 การอนุญาตนี้จะถูกเพิ่มโดยอัตโนมัติเพื่อเลียนแบบความปลอดภัยที่ต่ำกว่าของ Android 1.5 เพราะคุณสามารถเพิกเฉยต่อการอนุญาตนี้ได้ในเกือบทุกครั้งเพราะมันมักจะเป็นปัญหาความเข้ากันได้
เหตุผลก็คือ Android 1.5 และรุ่นก่อนหน้าไม่ต้องการแอปพลิเคชันเพื่อขอสิทธิ์เหล่านั้นโดยเฉพาะ ตั้งแต่ Android 1.6 ต้องได้รับการอนุญาตจากแอปโดยเฉพาะ อย่างไรก็ตามหากคุณระบุว่าแอปพลิเคชันของคุณสามารถทำงานบนอุปกรณ์ที่ใช้ Android 1.5 หรือต่ำกว่าได้สิทธิ์นั้นจะถูกเพิ่มเข้าไปในแอปพลิเคชันโดยค่าเริ่มต้นและตลาดจะแสดงการอนุญาตดังกล่าวตามคำขอของแอปพลิเคชัน
ดังนั้นโดยสรุปแล้วแอปพลิเคชันอาจไม่สามารถเข้าถึง "สถานะโทรศัพท์และข้อมูลระบุตัวตนของคุณ" ได้จริง แต่หากนักพัฒนาซอฟต์แวร์ระบุว่าแอปพลิเคชันของเขา / เธอสามารถทำงานบนอุปกรณ์ที่มี 1.5 หรือต่ำกว่าได้
คำถามนี้รบกวนฉันมาระยะหนึ่งแล้ว ดังนั้นในที่สุดฉันก็ตัดสินใจไปที่จุดต่ำสุดของปัญหา
PlayStore มีแอปที่มีชื่ออนุญาต READ_PHONE_STATE ซึ่งร้องขอREAD_PHONE_STATE
เป็นสิทธิ์เท่านั้นและไม่ทำอะไรนอกจากการพิมพ์ข้อมูลทั้งหมดที่สามารถเข้าถึงได้โดยมีหรือไม่มีการใช้งาน ฉันได้ติดตั้งในLG Optimus 4Xของฉันถูกรูตบนสต็อก Android 4.0.3 และเพิกถอนการอนุญาตโดยใช้ LBE ผลลัพธ์ที่น่าสนใจทีเดียวภาพหน้าจอต่อไปนี้แสดง:
ข้อมูลที่รวบรวมโดยแอปที่ได้รับอนุญาต READ_PHONE_STATE (คลิกที่ภาพเพื่อความหลากหลาย)
อย่างที่คุณเห็นได้อย่างง่ายดายแม้กระทั่งข้อมูลบางอย่างที่ dev ไม่สามารถเข้าถึงได้โดยไม่ได้รับอนุญาตก็สามารถเข้าถึงได้อย่างอิสระ: หมายเลขกล่องจดหมายของฉัน (หมายเหตุ: ใช่มันเป็นข้อมูลที่ถูกต้องกับผู้ให้บริการของฉัน แสดงได้อย่างอิสระ;) ในตอนท้ายของภาพหน้าจอแรกที่คุณเห็น:
CALL_STATE_IDLE
. ดังนั้นจึงไม่มีสายโทรเข้าออกหรืออยู่ระหว่างดำเนินการ ไม่มีแอปที่ต้องการการอนุญาตนี้เพื่อ "แบ็คกราวน์" ในการโทรเข้าเป็นไปได้ที่จะเห็นว่าข้อมูลมือถือทำงานอยู่DATA_DISCONNECTED
หรือไม่( ฉันอยู่ใน WiFi เมื่อถ่ายภาพหน้าจอดังที่คุณเห็นในแถบการแจ้งเตือน) คุณอยู่ในประเทศใดผู้ให้บริการของคุณ (รวมถึงข้อมูลทางเทคนิคบางอย่างกับเขา) คุณมีซิมการ์ดหรือโรมมิ่ง
สิ่งเดียวที่ไม่สามารถเข้าถึงได้คือการระบุข้อมูล: IMEI, SIMID, IMSI และหมายเลขโทรศัพท์ของคุณเอง
สรุป: การอนุญาตนี้จำเป็นสำหรับการระบุตัวตนเท่านั้นไม่มีอะไรอื่นอีก
ทำไมแอพจำนวนมากจึงจำเป็นต้องมี
ความเป็นไปได้ตามลำดับนี้ IMHO
1หมายเหตุโดยโพสต์ของ Dan ในการแชท :
นโยบายของ Google Play ห้ามมิให้แอพของคุณรับ IMEI เพื่อระบุตัวคุณเพื่อจุดประสงค์ในการโฆษณา ไลบรารีโฆษณาทั้งหมดได้รับการอัปเดตในขณะนี้เพื่อใช้ "รหัสโฆษณา" ของ Google-Play-Services ที่ให้บริการโดย Google ดังนั้นสิ่งใดก็ตามที่ยังคงใช้ IMEI เพื่อจุดประสงค์นี้ควรรายงานไปยัง Google
เนื่องจากเป็นการยากสำหรับผู้ใช้ที่จะบอกว่าแอปนี้กำลังใช้ IMEI อยู่คุณควรขอให้ผู้พัฒนาอธิบายก่อน
2นักพัฒนาอีกเพียงแค่ชี้ให้ฉันไปแตกต่างที่ลึกซึ้งในขณะที่ได้รับอนุญาตไม่จำเป็นต้องอ่านสถานะการโทรปัจจุบัน (ที่ผมได้ชี้ให้เห็น) ก็อาจจะต้องลงทะเบียนผู้ฟังเพื่อที่จะได้รับการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงของการโทร สถานะ (ดู: การตรวจจับสายเรียกเข้าและขาออกบน Android ) แม้ว่าจะมีวิธีการจัดการสิ่งนี้โดยอัตโนมัติเมื่อระบบโทรออกonPause
ซึ่งอาจไม่เหมาะสมเสมอ: ลองคิดถึงนาฬิกาปลุกของคุณ คุณอาจไม่ต้องการให้มีการหยุดโดยอัตโนมัติเมื่อมีสายเรียกเข้า - โดยเฉพาะเมื่อโปรไฟล์ของคุณถูกตั้งค่าเป็นระดับเสียงสั่น "ปิดเสียง"
3การแก้ไขจากแดนอีกครั้ง: คุณจะได้รับการอนุญาตพิเศษเริ่มต้นหากเวอร์ชัน "เป้าหมาย" ของแอปของคุณคือ 1.5 หากคุณกำหนดเป้าหมายเวอร์ชันที่ใหม่กว่า แต่เวอร์ชันขั้นต่ำของคุณคือ 1.5 คุณจะไม่ได้รับสิทธิ์เพิ่มโดยอัตโนมัติ
READ_PHONE_STATE
สิ่งที่จำเป็นต่อการ a) ตรวจจับสายเรียกเข้าและที่เกี่ยวข้อง (โทรศัพท์) และการอนุญาตครั้งที่สองสำหรับรายละเอียดการระบุตัวตน (IMEI, IMSI ฯลฯ ) เปิดเมื่อวันที่ 11/2011 ยังไม่สามารถใช้งานได้ ติดดาวถ้าสนใจ :)READ_PHONE_STATE
ได้รับอนุญาตเป็นเช่นแหลมออกโดยอาร์โน Welzel ในฐานะที่เป็นสายเรียกเข้าจะเรียกสั่น, ว่าเหตุการณ์ที่สามารถนำมาใช้กับการonAudioFocusChange()
ที่ไม่ต้องได้รับอนุญาตพิเศษใด ๆ ถ้าเรียกโดยที่แอปสามารถตรวจสอบCallState (อีกครั้งไม่ได้รับอนุญาตพิเศษใด ๆ ที่จำเป็น) เพื่อดูว่ามีการ สายเรียกเข้า.onPause()
เป็นสิ่งที่เราคุยกันในการแชท! แต่การใช้onAudioFocusChange()
อาจจะมีค่าใช้จ่ายน้อยกว่าแม้ (การสำรวจเล็ก ๆ น้อย ๆ นั้นอาจจะไม่สนใจ)
ผู้เผยแพร่โฆษณาจำนวนมากใช้สิทธิ์นี้เพื่อรับรหัสโทรศัพท์เพื่อจุดประสงค์ในการติดตามทุกประเภท มีวิธีอื่นในการรับ 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 จริง ๆ มีเพียงผู้ให้บริการโฆษณาเท่านั้น