92 votos

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

¿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 de esto?

enter image description here

19voto

Izzy Puntos 45544

Esta pregunta me preocupa desde hace tiempo. Así que ahora, finalmente, he decidido llegar al fondo de la cuestión.

El Playstore tiene una aplicación llamada permission.READ_PHONE_STATE que solicita READ_PHONE_STATE como único permiso, y no hace otra cosa que imprimir todos los datos a los que puede acceder con o sin usarlo. He instalado eso en mi LG Optimus 4X , estando rooteado en Android 4.0.3 stock, y revocando el permiso usando LBE. Los resultados fueron bastante interesantes, como muestran las siguientes capturas de pantalla:

Screenshot 1 Screenshot 2 Screenshot 3
Información recogida por la aplicación permission.READ_PHONE_STATE (haga clic en las imágenes para ampliarlas)

Como se puede ver fácilmente, incluso alguna información que el dev aunque inaccesible sin el permiso, era de libre acceso: mi número de buzón de correo (observación: Sí, es el correcto; con mi proveedor ese es el acceso directo al marcar desde tu propio dispositivo, así que puedo mostrarlo libremente.) Al final de la primera captura de pantalla se ve:

  • CALL_STATE_IDLE . Así que no hay llamadas entrantes, salientes o en curso. Ninguna aplicación necesita este permiso para estar en "segundo plano" en las llamadas entrantes.

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

Las únicas cosas no accesibles, por lo que son datos identificativos: IMEI, SIMID, IMSI y su propio número de teléfono.

Conclusión: Este permiso sólo es necesario a efectos de identificación, nada más.

Entonces, ¿por qué lo necesitan tantas aplicaciones?

  • Para los módulos publicitarios, lo más probable es que 1
  • Porque el dev pensamiento lo necesita (como señalan algunas respuestas aquí) 2
  • Debido a que la aplicación en cuestión está diseñada para (también) funcionar en Android 1.5 y por debajo (fácil de averiguar, ya que está en la lista de Google Play ).

Probabilidades exactamente en este orden, IMHO.


1 Nota de Mensaje de Dan en el chat :

La política de Google Play prohíbe ahora que las aplicaciones obtengan tu IMEI para identificarte con fines publicitarios. Todas las bibliotecas de anuncios se han actualizado para utilizar el "identificador de publicidad" proporcionado por Google-Play-Services, por lo que las que sigan utilizando el IMEI con este fin deben ser denunciadas a Google.

Como es difícil que el usuario sepa para qué utiliza la aplicación el IMEI, deberías pedirle al desarrollador que te lo explique primero.


2 Otro desarrollador me acaba de señalar una sutil diferencia: mientras que el permiso no es necesario para leer el estado actual de la llamada (como he señalado), podría ser necesario registrar un oyente con el fin de ser notificado en cambia del estado de la llamada (ver: Detección de llamadas telefónicas entrantes y salientes en Android ). Aunque parece que hay medios para manejar esto automáticamente cuando el sistema llama a onPause Pero eso no siempre es conveniente: piense en su despertador. Es posible que no quiera tenerlo automáticamente se detuvo en una llamada entrante, sobre todo cuando tu perfil está configurado con el volumen del timbre "silenciado".


3 De nuevo un corrección de Dan : Sólo obtienes el permiso extra por defecto si la versión "objetivo" de tu aplicación es la 1.5. Si tu objetivo es una versión posterior pero tu versión mínima es la 1.5, no obtendrás el permiso añadido automáticamente.


Actualizaciones

  1. Es interesante que haya un asunto pendiente (21504) para dividir READ_PHONE_STATE en lo que se necesita para a) detectar las 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 se ha trabajado. Iniciadlo si estáis interesados :)
  2. Y sí, hay una forma de conseguir lo mismo (detectar las llamadas entrantes) sin el READ_PHONE_STATE permiso, como por ejemplo señalado por Arno Welzel . Como una llamada telefónica entrante activaría el timbre, que podría utilizarse con onAudioFocusChange() que no requiere ningún permiso especial: si se desencadena por eso, la aplicación podría comprobar el Estado de la llamada (de nuevo, sin necesidad de ningún permiso especial) para ver si hay una llamada entrante.

10voto

muffel Puntos 1186

Muchos editores de publicidad utilizan este permiso para obtener el ID del teléfono para todo tipo de fines de seguimiento. Hay otras formas de obtener un ID único, pero desgraciadamente tienen fallos en las versiones más antiguas de Android (la historia es más complicada, véase por ejemplo http://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 utiliza anuncios, es muy probable que la propia aplicación no necesite el permiso READ_PHONE_STATE, sino el proveedor de los anuncios.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X