Estoy usando esta llamada:
Secure.getString(getApplicationContext().getContentResolver(), Secure.ANDROID_ID);
Para obtener un UID para el dispositivo. Sin embargo, creo que obtengo la misma 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
android
uuid
uniqueidentifier
FoamyGuy
fuente
fuente
Respuestas:
Mira esto 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 hilos de números duplicados . Dependiendo de lo que intente hacer, probablemente no usaría esto como UID.
fuente
A 64-bit number (as a hex string) that is randomly generated on the device's first boot and should remain constant for the lifetime of the device
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, la ID de Android (Settings.Secure.ANDROID_ID o SSAID) tiene un valor diferente para cada aplicación y cada usuario en el dispositivo. En su lugar, los desarrolladores que requieran un identificador de alcance de dispositivo deben usar un identificador que se pueda restablecer, como el ID de publicidad, lo que brinda a los usuarios más control. El ID de publicidad también proporciona una configuración de cara al usuario para limitar el seguimiento de anuncios.
Además en Android O:
eventos de desinstalación y reinstalación.
fuente
Entonces, si desea algo único para el dispositivo en sí,
TM.getDeviceId()
debería ser suficiente.Aquí está el código que muestra cómo obtener la identificación del administrador de telefonía. La ID del dispositivo Android que está utilizando puede cambiar en la configuración de fábrica y también algunos fabricantes tienen problemas para dar 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 obtener permisos para
TelephonyManager
usar<uses-permission android:name="android.permission.READ_PHONE_STATE" />
fuente
READ_PHONE_STATE
permiso es terrible. Úselo en suANDROID_ID
lugar.TM.getDeviceId()
enfoque, primero eche un vistazo a los nuevos requisitos de permisos para identificadores de dispositivos en dispositivos Android> = 10.He leído algunas cosas sobre esto y, desafortunadamente, no se debe confiar en ANDROID_ID para identificar un dispositivo individual de manera única.
No parece que se aplique en los requisitos de cumplimiento de Android, por lo que los fabricantes parecen implementarlo de la forma que eligen, incluidos algunos que lo usan más como una ID de 'modelo', 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 sobreviva a un restablecimiento de fábrica.
fuente
Existen múltiples soluciones pero ninguna de ellas es perfecta. vayamos uno por uno.
1. Unique Telephony Number (IMEI, MEID, ESN, IMSI)
Esta solución necesita solicitar android.permission.READ_PHONE_STATE a su usuario, lo que puede ser difícil de justificar siguiendo el tipo de aplicación que ha realizado.
Además, esta solución se limita a los teléfonos inteligentes porque las tabletas no cuentan con servicios de telefonía. Una ventaja es que el valor sobrevive a los restablecimientos de fábrica en los dispositivos.
2. MAC Address
3. Serial Number
4. Secure Android ID
En el primer arranque de un dispositivo, se genera y almacena un valor aleatorio. Este valor está disponible a través de Settings.Secure.ANDROID_ID. Es un número de 64 bits que debe permanecer constante durante la vida útil de un dispositivo. ANDROID_ID parece una buena opción para un identificador de dispositivo único porque está disponible para teléfonos inteligentes y tabletas.
String androidId = Settings.Secure.getString(getContentResolver(),Settings.Secure.ANDROID_ID);
Sin embargo, el valor puede cambiar si se realiza un restablecimiento de fábrica en el dispositivo. También hay un error conocido con un teléfono popular de un fabricante donde cada instancia tiene el mismo ANDROID_ID. Claramente, la solución no es 100% confiable.
5. Use UUID
Como el requisito para la mayoría de las aplicaciones es identificar una instalación en particular y no un dispositivo físico, una buena solución para obtener una identificación única para un usuario es utilizar la clase UUID. La siguiente solución ha sido presentada por Reto Meier de Google en una presentación de Google I / O:
private static String uniqueID = null; private static final String PREF_UNIQUE_ID = "PREF_UNIQUE_ID"; public synchronized static String id(Context context) { if (uniqueID == null) { SharedPreferences sharedPrefs = context.getSharedPreferences( PREF_UNIQUE_ID, Context.MODE_PRIVATE); uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null); if (uniqueID == null) { uniqueID = UUID.randomUUID().toString(); Editor editor = sharedPrefs.edit(); editor.putString(PREF_UNIQUE_ID, uniqueID); editor.commit(); } } return uniqueID; }
Identificar un dispositivo en particular en Android no es tarea fácil. Hay muchas buenas razones para evitarlo. La mejor solución probablemente sea identificar una instalación en particular mediante el uso de la solución UUID. crédito: blog
fuente
Simplemente enumere una solución alternativa aquí, el ID de publicidad:
https://support.google.com/googleplay/android-developer/answer/6048248?hl=en
Copiado del enlace de arriba:
El ID de publicidad es un ID de publicidad único que el usuario puede restablecer, proporcionado por los servicios de Google Play. Brinda a los usuarios mejores controles y brinda a los desarrolladores un sistema estándar simple para continuar monetizando sus aplicaciones. Permite a los usuarios restablecer su identificador u optar por no recibir anuncios personalizados (antes conocidos como anuncios basados en intereses) dentro de las aplicaciones de Google Play.
Las limitaciones son:
https://support.google.com/googleplay/android-developer/answer/113469?hl=en&rd=1#privacy
fuente
//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.
fuente