Errores de identificar un dispositivo Android


Algunos desarrolladores pueden necesitar identificar los dispositivos Android de sus usuarios. La mayoría de las veces esto se hace no para reconocer el dispositivo, sino para determinar la instalación específica de la aplicación. También conocí varios casos cuando era necesario, si el desarrollador tenía varias aplicaciones y quería comprender que funcionan en el mismo entorno.

Google dice que identificar un dispositivo es fácil. Pero estamos hablando de Android :)

Este artículo se centra en aplicaciones o bibliotecas que no desean adjuntarse a los servicios de Google.

Entonces, vamos a sumergirnos en esta maravillosa aventura de obtener un identificador de dispositivo único.

Aquí vemos varias formas:


  • Identificación publicitaria
  • IMEI
  • Dirección MAC
  • Número de serie
  • ID de Android

No se ve mal hasta ahora, ¿verdad? Hay hasta cinco formas de obtener un identificador único para un dispositivo Android. Estoy seguro de que si sigues buscando en la red, seguramente encontrarás un par de formas más, pero aquí hice las más populares. Así que vamos en orden.

Identificación publicitaria


Este es un identificador publicitario único proporcionado por los servicios de Google Play. Es necesario que la publicidad funcione, para que Google comprenda qué anuncios se pueden mostrar a un usuario específico y qué anuncios ya se han mostrado utilizando los banners publicitarios integrados en las aplicaciones. Y esto también significa que perderá este identificador si su aplicación se descarga, por ejemplo, de Amazon, y además tendrá que arrastrar las bibliotecas de Google a su aplicación.

dependencies { compile 'com.android.support:appcompat-v7:21.0.3' compile 'com.google.android.gms:play-services:6.5.87' } 

Conclusión: no identificamos el dispositivo en todos los casos.

Pero queremos estar seguros, ¿verdad? Entonces sigue adelante.

IMEI


Este es el identificador internacional para equipos móviles utilizados en teléfonos GSM. Las redes usan el número IMEI para identificar teléfonos inteligentes y bloquear el acceso a una red de dispositivos robados o en la lista negra. Pero desafortunadamente con IMEI pueden surgir una serie de problemas:


 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { String imei = telephonyMgr.getImei(); } else { String imei = telephonyMgr.getDeviceId(); } 

Conclusión: no identificamos el dispositivo en todos los casos, y también pueden engañarnos: C

Dirección MAC


No es 100% confiable. Google mismo habla de esto , pero, desafortunadamente, realmente conocí un par de aplicaciones que dependían de la dirección MAC del dispositivo. No lo hagas.
Es posible recuperar una dirección Mac del hardware WiFi o Bluetooth de un dispositivo. No recomendamos usar esto como un identificador único. Para empezar, no todos los dispositivos tienen WiFi. Además, si el WiFi no está encendido, el hardware puede no informar la dirección Mac.

Número de serie


Se considera un número de serie único del dispositivo, que permanece con él hasta el "final". Puede obtenerlo de esta manera:

 //Until Android 7.1 (SDK 25) Build.SERIAL //Android 8 (SDK 26) ++ Build.getSerial() 

Y ahora sobre los problemas. Primero, para obtener un número de serie, deberá solicitar permiso al usuario READ_PHONE_STATE , y el usuario puede negarse. En segundo lugar, se puede cambiar el número de serie.

Conclusión: no identificamos el dispositivo en todos los casos, debemos solicitar permiso al usuario, quien lo engaña y aún puede engañarnos.

ID de Android


- ¡Aquí está! - debemos gritar. - ¡La solución a todos nuestros problemas!

La ID de Android también es un identificador de dispositivo único. Es un valor de 64 bits que se genera y almacena durante el primer inicio del dispositivo.
Puedes obtenerlo así:

 Secure.getString(getContentResolver(), Secure.ANDROID_ID); 

Parece que una línea tan corta nos salva de un dolor de cabeza al identificar el dispositivo. Incluso los chicos de Google usan Android_ID para LVL en el ejemplo.

Y aquí nuestras esperanzas se están desmoronando y nada será igual. Después de actualizar a Android 8, Android_ID ahora se ha vuelto único para cada aplicación instalada. Pero, además de esto, Google se preocupa por nosotros, por lo que las aplicaciones que se instalaron antes de la actualización permanecerán con los mismos identificadores que Google guarda utilizando un servicio especialmente escrito para esto. Pero si la aplicación se desinstala y luego se reinstala, Android_ID será diferente. Para evitar que esto suceda, debe usar KeyValueBackup.


Pero este servicio de copia de seguridad debe estar registrado, también el nombre del paquete para especificar. Además, la documentación dice que esto puede no funcionar por ningún motivo. ¿Y quién tiene la culpa? Nadie, solo así.

Conclusión general


Si tiene un buen backend, solo recopile el reparto del dispositivo (aplicaciones instaladas, servicios, cualquier información sobre el dispositivo que pueda obtener) y compare los parámetros que ya existen, considere aceptable un porcentaje de los cambios.

PD: publico todas las colecciones como siempre en el canal de telegramas @paradisecurity , y el enlace se puede encontrar en mi perfil, o en la búsqueda de telegramas por nombre.

Feliz :)

Source: https://habr.com/ru/post/es434726/


All Articles