¿Por qué tantas aplicaciones requieren permiso para leer el estado y la identidad del teléfono?

88

¿Por qué tantas aplicaciones requieren permiso para leer el estado y la identidad del teléfono? Específicamente:

Phone calls
   read phone state and identity

Por ejemplo, Quickpedia es un portal de Wikipedia, pero quiere acceder al teléfono. ¿Cuál es la explicación para esto?

ingrese la descripción de la imagen aquí

Nam G VU
fuente
No es realmente, para "sí, sí, esta aplicación tiene este permiso para enviar sms y llamar a un número premium a sus espaldas", que es lo que la gente supone . ¡La respuesta de @ Christian a continuación ha dado en el clavo! Es legítimo en muchos casos, y con bastante frecuencia, los desarrolladores tienden a olvidarse de reducir los permisos (tal vez un retraso de los primeros días del desarrollo de una aplicación).
t0mm13b
1
@ t0mm13b No creo que haya mucha demanda de permisos reducidos fuera de los expertos en tecnología y privacidad (auto incluido). Entonces, si los fabricantes de aplicaciones simplemente hacen que la norma exija el conjunto completo de permisos, entonces los consumidores asumirán que muchos permisos están bien para cualquier aplicación. El gobierno no los está presionando para que usen permisos mínimos, y hasta ahora el mercado no los está presionando. Es decir, hay un costo bajo o nulo para que las aplicaciones requieran muchos permisos.
user29020

Respuestas:

59

Permite que la aplicación lea una identificación única (un identificador de teléfono llamado IMEI ) que está asociada con su teléfono.

Por lo tanto, puede ayudar con la protección contra copias o el intento de rastrear el número de usuarios.

Robar
fuente
3
Vea esta pregunta SO sobre cómo obtener una identificación única de un teléfono, parece la forma (actualmente) más confiable para que un desarrollador obtenga una identificación única de un teléfono requiere el permiso Leer estado del teléfono stackoverflow.com/questions/2785485/…
GAThrawn
40

Hay otra razón para esto que la identificación única. Supongo que la mitad de las aplicaciones no tienen acceso a esos valores en absoluto. El problema es que para una versión inferior hasta Android 1.5 este permiso no existe. Todos podían acceder a estos valores sin solicitar algo.

Por lo tanto, si crea una aplicación que sea compatible con 1.5, este permiso se agregará automáticamente para emular la menor seguridad de Android 1.5 debido a que podría ignorar este permiso en la mayoría de las ocasiones porque tiende a ser solo un problema de compatibilidad.

ce4
fuente
2
Lo mismo sucede con el acceso a la tarjeta SD.
Denis Nikolaenko
1
Eso es cierto, pero no explica por qué las aplicaciones para 2.xy versiones posteriores lo quieren con tanta frecuencia.
Izzy
19

La razón es que Android 1.5 y versiones anteriores no requerían que la aplicación solicitara específicamente esos permisos y los otorgó automáticamente. Desde Android 1.6, esos permisos deben ser solicitados específicamente por la aplicación. Sin embargo, si especifica que su aplicación puede ejecutarse en dispositivos con Android 1.5 y menos, entonces ese permiso se agrega a la aplicación de forma predeterminada y el mercado muestra ese permiso según lo solicitado por la aplicación.

En resumen, es posible que la aplicación no esté accediendo a su "estado e identidad del teléfono", pero si el desarrollador especificó que su aplicación puede ejecutarse en dispositivos con 1.5 o menos, se mostrará ese permiso.


fuente
¿Tienes un enlace a alguna documentación que muestre esto?
GAThrawn
developer.android.com/reference/android/os/… ofrece una lista completa de identificadores de versión de destino y los cambios en los permisos (entre otras diferencias) entre ellos.
Stewart
Derecha. Pero probablemente ya no sea "interesante", ya que las aplicaciones para 1.5 y versiones anteriores se volvieron bastante raras :)
Izzy
18

Esta pregunta me ha estado molestando bastante tiempo. Así que ahora, finalmente, decidí llegar al fondo del problema.

Playstore tiene una aplicación llamada permission.READ_PHONE_STATE , que solicita READ_PHONE_STATEcomo el único permiso, y no hace nada más que imprimir todos los datos a los que puede acceder con o sin usarlo. Lo instalé en mi LG Optimus 4X , rooteado de Android 4.0.3, y revoqué el permiso usando LBE. Los resultados fueron bastante interesantes, como muestran las siguientes capturas de pantalla:

Captura de pantalla 1 Captura de pantalla 2 Captura de pantalla 3
Información recopilada por el permiso de la aplicación. READ_PHONE_STATE (haga clic en las imágenes para ver las variantes más grandes)

Como puede ver fácilmente, incluso alguna información que el desarrollador, aunque inaccesible sin el permiso, era de acceso libre: mi número de buzón (comentario: Sí, es el correcto; con mi proveedor ese es el acceso directo cuando marca desde su propio dispositivo, para que pueda mostrarlo libremente;) Al final de la primera captura de pantalla, verá:

  • CALL_STATE_IDLE. Por lo tanto, no hay llamadas entrantes, salientes o en curso. Ninguna aplicación necesita este permiso para "en segundo plano" en las llamadas entrantes.

Incluso es posible ver si los datos móviles están activos ( DATA_DISCONNECTED; estaba en WiFi cuando tomé las capturas de pantalla, como puede ver en la barra de notificaciones), en qué país se encuentra, su proveedor (incluidos algunos datos técnicos sobre él), si tienes una tarjeta SIM o si estás en roaming.

Por lo tanto, lo único que no es accesible son los datos de identificación: IMEI, SIMID, IMSI y su propio número de teléfono.

Conclusión: Este permiso solo es necesario para fines de identificación, nada más.

¿Por qué tantas aplicaciones lo necesitan entonces?

  • Para los módulos de anuncios, lo más probable es que 1
  • Porque el desarrollador pensó que lo necesitaba (como señalan algunas respuestas aquí) 2
  • Debido a que la aplicación en cuestión está diseñada para (también) ejecutarse en Android 1.5 y versiones posteriores (es fácil de encontrar, ya que aparece en Google Play ).

Probabilidades exactamente en este orden, en mi humilde opinión.


1 Nota de la publicación de Dan en el chat :

La política de Google Play ahora prohíbe que las aplicaciones obtengan su IMEI para identificarlo con fines publicitarios. Todas las bibliotecas de anuncios se han actualizado ahora para usar el "ID de publicidad" proporcionado por Google-Play-Services, por lo que cualquier que todavía use el IMEI para este propósito debe informarse a Google.

Como es difícil para el usuario saber para qué está usando la aplicación el IMEI, primero debe pedirle al desarrollador que le explique.


2 Otro desarrollador me señaló una sutil diferencia: aunque no es necesario el permiso para leer el estado actual de la llamada (como he señalado), podría ser necesario registrar un oyente para recibir notificaciones sobre los cambios de la llamada estado (consulte: Detección de llamadas entrantes y salientes en Android ). Si bien parece haber medios para manejar esto automáticamente cuando el sistema llama onPause, eso no siempre es adecuado: piense en su reloj despertador. Es posible que no desee que eso se detenga automáticamente en una llamada entrante, especialmente cuando su perfil está configurado en volumen de timbre "silenciado".


3 Una vez más, una corrección de Dan : solo obtienes el permiso adicional predeterminado si la versión "objetivo" de tu aplicación es 1.5. Si apunta a una versión posterior pero su versión mínima es 1.5, no obtendrá el permiso agregado automáticamente.


Actualizaciones

  1. Es interesante que haya un problema abierto (21504) para dividir READ_PHONE_STATEen lo que se necesita para a) detectar llamadas entrantes y relacionadas (telefonía), y un segundo permiso para los detalles de identificación (IMEI, IMSI, etc.). Abierto 11/2011, todavía no ha trabajado. Marcar con estrella si está interesado :)
  2. Y sí, hay una manera de lograr lo mismo (detectar llamadas entrantes) sin el READ_PHONE_STATEpermiso, como, por ejemplo, señaló Arno Welzel . Como una llamada telefónica entrante activaría el timbre, ese evento podría usarse onAudioFocusChange(), lo que no requiere ningún permiso especial: si se activa por eso, la aplicación podría verificar el CallState (nuevamente, sin ningún permiso especial requerido) para ver si hay un llamada entrante.
Izzy
fuente
Creo que debe eliminar la parte donde dice que ninguna aplicación necesita este permiso para pasar a segundo plano en las llamadas entrantes. Usted ya hace este punto en la nota 2, pero es contradictorio. Ver también developer.android.com/reference/android/telephony/…
Mikel
@Mikel Tienes parcialmente razón. Usar este permiso es la forma "más fácil" de realizar la tarea, pero no es la única. Se puede hacer sin él, como señaló un desarrollador (¿fue en el chat? Desafortunadamente, he perdido el enlace). Al igual que con muchas cosas, el uso de las API de Google hace que algunas cosas sean mucho más fáciles de lograr (mientras que también vincula su aplicación al sistema ecológico de Google). No soy un desarrollador, por lo que no puedo decir cuánto más trabajo significaría lo contrario.
Izzy
Todavía no soy un desarrollador de Android, y estoy de acuerdo en que parece que algunos casos de uso están cubiertos por onPause (). Solo decir que "Ninguna aplicación necesita este permiso" me parece mal. Suena más como "algunas aplicaciones pueden necesitar este permiso", por ejemplo, si se ejecutan en segundo plano. También tenga en cuenta que recibir la intención de transmisión seguramente debe ser más eficiente que sondear repetidamente el estado del teléfono.
Mikel
@Mikel Ver mi actualización. Y sí, "no hay necesidad" podría ser un poco exagerado. Tal vez en el 0.5% de todas las solicitudes actuales, podría ser necesario, sin ninguna alternativa disponible #D Y sí otra vez: ¡ onPause()fue lo que discutimos en el chat para eso! Pero el uso onAudioFocusChange()puede ser menos costoso incluso (el pequeño sondeo puede ser ignorable).
Izzy
10

Muchos editores de anuncios utilizan este permiso para obtener la identificación del teléfono para todo tipo de fines de seguimiento. Hay otras formas de obtener una identificación única, pero desafortunadamente tienen errores en versiones anteriores de Android (la historia es más complicada, consulte, por ejemplo, https://stackoverflow.com/questions/2785485/is-there-a-unique-android- device-id o http://android-developers.blogspot.com/2011/03/identifying-app-installations.html para una historia más completa).

Por lo tanto, si la aplicación usa anuncios, existe una buena posibilidad de que la aplicación en sí no necesite el permiso READ_PHONE_STATE, solo el proveedor de anuncios lo necesita.

Kasper Peeters
fuente
1
Ese es, en mi humilde opinión, el principal problema detrás de todo! Bien pensado
Izzy