2011-01-25 5 views
50

estoy usando esta llamada:¿Es Secure.ANDROID_ID único para cada dispositivo?

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 al parecer hay un problema con varios dispositivos de regresar este ID http://code.google.com/p/android/issues/list?cursor=10603&updated=10603&ts=1295993403

+0

¿Lo piensa? o estas seguro? –

+0

Después de buscar la identificación en cuestión y ver un hilo al respecto, estoy seguro. Al principio, pensé que era posible que el dispositivo devolviera el valor nulo y lo había colocado como un valor predeterminado en algún lugar. Pero este no es el caso. Sé con certeza que obtengo el mismo valor en múltiples dispositivos. – FoamyGuy

+0

Encontré perfecto: http://stackoverflow.com/a/16929647/1318946 –

Respuesta

25

Compruebe en este thread,. 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 que tienen números duplicados thread. Dependiendo de lo que trates de hacer, probablemente no usaría esto como un UID.

+12

es una pena que la implementación de ANDROID_ID sea tan ... ¡coja! A juzgar por la documentación de Google, la intención era una ID de mayor duración: 'Un número de 64 bits (como una cadena hexadecimal) que se genera aleatoriamente en el primer arranque del dispositivo y debe permanecer constante durante la vida útil del dispositivo' –

+1

Según este hilo [link] (http://android-developers.blogspot.in/2011/03/identifying-app-installations.html) ** "Además, ha habido al menos un error ampliamente observado en un teléfono popular de un fabricante importante, donde cada instancia tiene el mismo ANDROID_ID. "** ** Mejor no usarlo ** –

+1

Eso fue desde 2011 durante Froyo. Es irrelevante ahora. –

5

He leído algunas cosas acerca de esto y por desgracia, el ANDROID_ID no debe ser invocado para identificar de forma única una dispositivo individual.

No parece ser forzada en los requisitos de cumplimiento de Android y lo que los fabricantes parecen ponerlo en práctica la forma que elijan entre ellos algunos de usarlo más como un 'modelo' Identificación etc.

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

+3

Creo que está garantizado que NO sobrevivirá al restablecimiento de fábrica por diseño, se menciona en algún lugar de los documentos. Y esa es la forma correcta de implementarlo. –

13

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); 

Log.d("ID", "Android ID: " + Secure.getString(getContentResolver(), Secure.ANDROID_ID)); 
Log.d("ID", "Device ID : " + tm.getDeviceId()); 

Asegúrese de tener permisos para TelephonyManager utilizando

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

Sí, usar el getDeviceId() también funciona. Pero debes tener mucho cuidado ya que puede ser nulo. (En dispositivos sin un módem de teléfono 3g) Una solución que uso es recurrir a la mac-dirección de Wifi (que por supuesto también podría faltar, pero generalmente no en el mismo dispositivo) – vdstw

+11

Se requiere el permiso 'READ_PHONE_STATE' horrible.Use 'ANDROID_ID' en su lugar. – dolmen

+0

Sí, podría devolver nulo en dispositivos sin 3g (muchos de ellos en el mercado), entonces debería usar WiFi: su GUID también podría ser nulo hasta que lo encienda/apague al menos una vez después de reiniciar el dispositivo. Y si no había wifi ... verdadera pesadilla, en Windows Ce había GUID para cada dispositivo y la vida era hermosa. – marcinj

1

Basta con enumerar una solución alternaitve aquí, el ID de publicidad:

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

Copiado del foro:

La publicidad ID 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. Google Play dispositivos habilitados solamente. Política de Privacidad
  2. : https://support.google.com/googleplay/android-developer/answer/113469?hl=en&rd=1#privacy
10

Con Android O el comportamiento de la 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 Android

En O, ID Android (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 de Android O:

  • El valor ANDROID_ID no va a cambiar en el paquete de instalación/reinstalación, como siempre y cuando el nombre del paquete y la clave de firma son los mismos. Las aplicaciones pueden confiar en en este valor para mantener el estado de las reinstalaciones.
  • Si se instaló una aplicación en un dispositivo con una versión anterior de Android, la ID de Android sigue siendo la misma cuando el dispositivo está actualizado a Android O, a menos que la aplicación se desinstale y se instale .
  • El valor de ID de Android solo cambia si el dispositivo está restablecido de fábrica o si la clave de firma rota entre desinstalación y
    vuelve a instalar los eventos.
  • Este cambio solo es necesario para los fabricantes de dispositivos con los servicios de Google Play y la ID de publicidad. Otros fabricantes de dispositivos pueden proporcionar una ID con restablecimiento alternativo o continuar proporcionando una ID DE ANDROID.
Cuestiones relacionadas