¿Secure.ANDROID_ID es único para cada dispositivo?

Estoy usando esta llamada:

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

Para obtener un UID para el dispositivo. Sin embargo, creo que estoy obteniendo el mismo ID de varios dispositivos. ¿Debería ser esto posible?

El ID en cuestión es: 9774d56d682e549c y aparentemente hay un problema con varios dispositivos que devuelven este ID http://code.google.com/p/android/issues/list?cursor=10603&updated=10603&ts=1295993403

Verifique en este hilo,. Sin embargo, debe tener cuidado ya que está documentado como “puede cambiar con el restablecimiento de fábrica”. Úselo bajo su propio riesgo, y se puede cambiar fácilmente en un teléfono rooteado. También parece que algunos fabricantes han tenido problemas con sus teléfonos con números duplicados. Dependiendo de lo que trates de hacer, probablemente no usaría esto como un UID.

Con Android O, el comportamiento de ANDROID_ID cambiará. El ANDROID_ID será diferente por aplicación por usuario en el teléfono.

Tomado de: https://android-developers.googleblog.com/2017/04/changes-to-device-identifiers-in.html

ID de Android

En O, Android ID (Settings.Secure.ANDROID_ID o SSAID) tiene un valor diferente para cada aplicación y cada usuario en el dispositivo. Los desarrolladores que requieren un identificador con ámbito de dispositivo, en su lugar, deben usar un identificador reiniciable, como ID de publicidad, dando a los usuarios un mayor control. La identificación publicitaria también proporciona una configuración orientada al usuario para limitar el seguimiento de anuncios.

Además en Android O:

  • El valor de ANDROID_ID no cambiará en la desinstalación / reinstalación del paquete, siempre que el nombre del paquete y la clave de firma sean los mismos. Las aplicaciones pueden confiar en este valor para mantener el estado de las reinstalaciones.
  • Si se instaló una aplicación en un dispositivo que ejecuta una versión anterior de Android, la ID de Android permanece igual cuando el dispositivo se actualiza a Android O, a menos que la aplicación se desinstale y vuelva a instalar.
  • El valor de ID de Android solo cambia si el dispositivo se restablece de fábrica o si la tecla de firma rota entre la desinstalación y
    reinstalar eventos.
  • Este cambio solo es necesario para los fabricantes de dispositivos que envían los servicios de Google Play y Advertising ID. Otros fabricantes de dispositivos pueden proporcionar una ID reiniciable alternativa o continuar proporcionando ID de ANDROID.

Por lo tanto, si desea algo exclusivo para el dispositivo en sí, TM.getDeviceId() debería ser suficiente.

Aquí está el código que muestra cómo obtener la ID del administrador de telefonía. La ID del dispositivo Android que está utilizando puede cambiar en la configuración de fábrica y, además, algunos fabricantes tienen problemas para proporcionar una identificación única.

 TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); String androidId = Secure.getString(this.getContentResolver(), Secure.ANDROID_ID); Log.d("ID", "Android ID: " + androidId); Log.d("ID", "Device ID : " + tm.getDeviceId()); 

Asegúrese de tomar los permisos de TelephonyManager mediante el uso de

  

He leído algunas cosas sobre esto y, lamentablemente, no se debe confiar en ANDROID_ID para identificar de forma única un dispositivo individual.

No parece aplicarse en los requisitos de cumplimiento de Android, por lo que los fabricantes parecen implementarlo de la manera que ellos elijan, incluso algunos lo usan más como ID de “modelo”, etc.

Además, tenga en cuenta que incluso si un fabricante ha escrito un generador para que sea un UUID (por ejemplo), no se garantiza que sobrevivirá a un restablecimiento de fábrica.

Simplemente haga una lista de una solución alternativa aquí, la ID de publicidad:

https://support.google.com/googleplay/android-developer/answer/6048248?hl=en

Copiado desde el enlace de arriba:

El ID de publicidad es una identificación única y restablecida por el usuario para publicidad, proporcionada por los servicios de Google Play. Da a los usuarios mejores controles y les proporciona a los desarrolladores un sistema simple y estándar para continuar monetizando sus aplicaciones. Permite a los usuarios restablecer su identificador o inhabilitar los anuncios personalizados (anteriormente conocidos como anuncios basados ​​en intereses) dentro de las aplicaciones de Google Play.

Las limitaciones son:

  1. Solo dispositivos habilitados para Google Play.
  2. Política de privacidad: https://support.google.com/googleplay/android-developer/answer/113469?hl=en&rd=1#privacy
 //Fields String myID; int myversion = 0; myversion = Integer.valueOf(android.os.Build.VERSION.SDK); if (myversion < 23) { TelephonyManager mngr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); myID= mngr.getDeviceId(); } else { myID = Settings.Secure.getString(getApplicationContext().getContentResolver(), Settings.Secure.ANDROID_ID); } 

Sí, Secure.ANDROID_ID es único para cada dispositivo.