¿Los dispositivos Android tienen una identificación única? De ser así, ¿cuál es una forma sencilla de acceder a ella utilizando Java?
android
uniqueidentifier
Tyler
fuente
fuente
ANDROID_ID
asegúrese de leer esta respuesta y este error .Respuestas:
Settings.Secure#ANDROID_ID
devuelve la ID de Android como única para cada usuario de una cadena hexadecimal de 64 bits.fuente
ACTUALIZACIÓN : a partir de versiones recientes de Android, muchos de los problemas
ANDROID_ID
se han resuelto, y creo que este enfoque ya no es necesario. Por favor, eche un vistazo a la respuesta de Anthony .Divulgación completa: mi aplicación usó originalmente el siguiente enfoque, pero ya no usa este enfoque, y ahora usamos el enfoque descrito en la entrada del Blog para desarrolladores de Android a la que los enlaces de respuesta de emmby (es decir, generar y guardar a
UUID#randomUUID()
).Hay muchas respuestas a esta pregunta, la mayoría de las cuales solo funcionarán "algunas" veces, y desafortunadamente eso no es lo suficientemente bueno.
Según mis pruebas de dispositivos (todos los teléfonos, al menos uno de los cuales no está activado):
TelephonyManager.getDeviceId()
TelephonyManager.getSimSerialNumber()
getSimSerialNumber()
(como se esperaba)ANDROID_ID
ANDROID_ID
yTelephonyManager.getDeviceId()
, siempre y cuando se haya agregado una cuenta de Google durante la configuración.Entonces, si desea algo único para el dispositivo en sí,
TM.getDeviceId()
debería ser suficiente. Obviamente, algunos usuarios son más paranoicos que otros, por lo que puede ser útil hacer hash 1 o más de estos identificadores, para que la cadena siga siendo prácticamente exclusiva del dispositivo, pero no identifique explícitamente el dispositivo real del usuario. Por ejemplo, usandoString.hashCode()
, combinado con un UUID:podría resultar en algo como:
00000000-54b3-e7c7-0000-000046bffd97
Funciona bastante bien para mí.
Como Richard menciona a continuación, no olvide que necesita permiso para leer las
TelephonyManager
propiedades, así que agregue esto a su manifiesto:importar libs
fuente
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
al archivo de manifiesto. Si se almacena en una base de datos, la cadena devuelta tiene 36 caracteres de longitud.Última actualización: 6/2/15
Después de leer cada publicación de Stack Overflow sobre la creación de una ID única, el blog para desarrolladores de Google y la documentación de Android, siento que la 'Pseudo ID' es la mejor opción posible.
Problema principal: hardware vs software
Hardware
Software
Desglose general con Android
- Garantizar la unicidad (incluir dispositivos rooteados) para API> = 9/10 (99.5% de dispositivos Android)
- Sin permisos adicionales
Código Psuedo:
Gracias a @stansult por publicar todas nuestras opciones (en esta pregunta de desbordamiento de pila).
Lista de opciones - razones por las cuales / por qué no usarlas:
Correo electrónico del usuario - Software
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
o<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
( Cómo obtener la dirección de correo electrónico principal del dispositivo Android )Número de teléfono del usuario - Software
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
IMEI - Hardware (solo teléfonos, necesidades
android.permission.READ_PHONE_STATE
)<uses-permission android:name="android.permission.READ_PHONE_STATE" />
ID de Android: hardware (puede ser nulo, puede cambiar con el restablecimiento de fábrica, puede modificarse en un dispositivo rooteado)
Dirección MAC de WLAN - Hardware (necesidades
android.permission.ACCESS_WIFI_STATE
)<uses-permission android:name="android.permission.ACCESS_WIFI_STATE "/>
Dirección MAC de Bluetooth: hardware (dispositivos con Bluetooth, necesidades
android.permission.BLUETOOTH
)<uses-permission android:name="android.permission.BLUETOOTH "/>
ID pseudounica: software (para todos los dispositivos Android)
Sé que no hay ninguna forma 'perfecta' de obtener una identificación única sin usar permisos; sin embargo, a veces solo necesitamos rastrear la instalación del dispositivo. Cuando se trata de crear una identificación única, podemos crear una 'identificación pseudo única' basada únicamente en la información que la API de Android nos brinda sin usar permisos adicionales. De esta forma, podemos mostrar respeto al usuario e intentar ofrecer una buena experiencia de usuario también.
Con una identificación pseudo-única, realmente solo te encuentras con el hecho de que puede haber duplicados basados en el hecho de que hay dispositivos similares. Puede ajustar el método combinado para hacerlo más exclusivo; sin embargo, algunos desarrolladores necesitan rastrear las instalaciones de dispositivos y esto hará el truco o el rendimiento en función de dispositivos similares.
API> = 9:
Si su dispositivo Android es API 9 o superior, se garantiza que será único debido al campo 'Build.SERIAL'.
RECUERDE , técnicamente solo se está perdiendo alrededor del 0.5% de los usuarios que tienen API <9 . Para que pueda concentrarse en el resto: ¡esto es el 99.5% de los usuarios!
API <9:
Si el dispositivo Android del usuario es inferior a la API 9; con suerte, no han hecho un restablecimiento de fábrica y su 'Secure.ANDROID_ID' se conservará o no 'nulo'. (ver http://developer.android.com/about/dashboards/index.html )
Si todo lo demás falla:
Si todo lo demás falla, si el usuario tiene un valor inferior a API 9 (inferior a Gingerbread), ha reiniciado su dispositivo o 'Secure.ANDROID_ID' devuelve 'nulo', entonces el ID devuelto se basará únicamente en la información de su dispositivo Android. Aquí es donde pueden ocurrir las colisiones.
Cambios:
Por favor, eche un vistazo al siguiente método:
Nuevo (para aplicaciones con anuncios Y servicios de Google Play):
Desde la consola del desarrollador de Google Play:
implementación :
Permiso:
Código:
Fuente / Documentos:
http://developer.android.com/google/play-services/id.html http://developer.android.com/reference/com/google/android/gms/ads/identifier/AdvertisingIdClient.html
Importante:
Advertencia, los usuarios pueden restablecer:
http://en.kioskea.net/faq/34732-android-reset-your-advertising-id
He tratado de hacer referencia a cada enlace del que tomé información. Si falta y necesita ser incluido, ¡por favor comente!
ID de instancia de Google Player Services
https://developers.google.com/instance-id/
fuente
Build
clase con la actualización del sistema operativo? ¿Especialmente si la API se actualizó? Si es así, ¿cómo garantiza que esto sea único? (Hablando sobre el método que escribió)Como Dave Webb menciona, el Blog para desarrolladores de Android tiene un artículo que cubre esto. Su solución preferida es rastrear las instalaciones de aplicaciones en lugar de los dispositivos, y eso funcionará bien para la mayoría de los casos de uso. La publicación del blog le mostrará el código necesario para que funcione, y le recomiendo que lo revise.
Sin embargo, la publicación del blog continúa discutiendo soluciones si necesita un identificador de dispositivo en lugar de un identificador de instalación de la aplicación. Hablé con alguien en Google para obtener algunas aclaraciones adicionales sobre algunos elementos en caso de que necesite hacerlo. Esto es lo que descubrí sobre los identificadores de dispositivos que NO se mencionan en la publicación de blog mencionada anteriormente:
Con base en las recomendaciones de Google, implementé una clase que generará un UUID único para cada dispositivo, usando ANDROID_ID como la semilla donde corresponda, recurriendo a TelephonyManager.getDeviceId () según sea necesario, y si eso falla, recurriendo a un UUID único generado aleatoriamente que persiste en los reinicios de la aplicación (pero no en las reinstalaciones de la aplicación).
Tenga en cuenta que para los dispositivos que han de repliegue en el identificador de dispositivo, el ID único SE persistir a través de reinicios de fábrica. Esto es algo a tener en cuenta. Si necesita asegurarse de que un restablecimiento de fábrica restablecerá su ID única, puede considerar recurrir directamente al UUID aleatorio en lugar de la ID del dispositivo.
Nuevamente, este código es para una ID de dispositivo, no para una ID de instalación de aplicación. Para la mayoría de las situaciones, una identificación de instalación de la aplicación es probablemente lo que está buscando. Pero si necesita una ID de dispositivo, entonces el siguiente código probablemente funcionará para usted.
fuente
Aquí está el código que Reto Meier usó en la presentación de E / S de Google este año para obtener una identificación única para el usuario:
Si combina esto con una estrategia de copia de seguridad para enviar preferencias a la nube (también se describe en la charla de Reto , debe tener una identificación que se vincule a un usuario y permanezca después de que el dispositivo haya sido borrado, o incluso reemplazado. Planeo usar esto en análisis en el futuro (en otras palabras, aún no he hecho eso :).
fuente
También puede considerar la dirección MAC del adaptador Wi-Fi. Recuperado así:
Requiere permiso
android.permission.ACCESS_WIFI_STATE
en el manifiesto.Se informó que está disponible incluso cuando el Wi-Fi no está conectado. Si Joe de la respuesta anterior prueba este en sus muchos dispositivos, sería bueno.
En algunos dispositivos, no está disponible cuando el Wi-Fi está apagado.
NOTA: Desde Android 6.x, devuelve una dirección mac falsa consistente:
02:00:00:00:00:00
fuente
android.permission.ACCESS_WIFI_STATE
02:00:00:00:00:00
Hay información bastante útil aquí .
Cubre cinco tipos de ID diferentes:
android.permission.READ_PHONE_STATE
)android.permission.ACCESS_WIFI_STATE
)android.permission.BLUETOOTH
)fuente
El blog oficial de desarrolladores de Android ahora tiene un artículo completo sobre este mismo tema, Identificación de instalaciones de aplicaciones .
fuente
En Google I / O Reto Meier lanzó una respuesta sólida sobre cómo abordar esto, que debería satisfacer la mayoría de los desarrolladores para rastrear a los usuarios en todas las instalaciones. Anthony Nolan muestra la dirección en su respuesta, pero pensé que escribiría el enfoque completo para que otros puedan ver fácilmente cómo hacerlo (me tomó un tiempo descubrir los detalles).
Este enfoque le proporcionará una identificación de usuario anónima y segura que será persistente para el usuario en diferentes dispositivos (según la cuenta principal de Google) y en todas las instalaciones. El enfoque básico es generar una identificación de usuario aleatoria y almacenarla en las preferencias compartidas de las aplicaciones. Luego, utiliza el agente de respaldo de Google para almacenar las preferencias compartidas vinculadas a la cuenta de Google en la nube.
Veamos el enfoque completo. Primero, necesitamos crear una copia de seguridad para nuestras Preferencias Compartidas usando el Servicio de Copia de Seguridad de Android. Comience por registrar su aplicación a través de
http://developer.android.com/google/backup/signup.html
.Google le dará una clave de servicio de respaldo que deberá agregar al manifiesto. También debe indicarle a la aplicación que use el Agente de respaldo de la siguiente manera:
Luego debe crear el agente de respaldo y decirle que use el agente auxiliar para las preferencias compartidas:
Para completar la copia de seguridad, debe crear una instancia de BackupManager en su Actividad principal:
Finalmente, cree una ID de usuario, si aún no existe, y almacénela en SharedPreferences:
Este User_ID ahora será persistente en todas las instalaciones, incluso si el usuario mueve el dispositivo.
Para obtener más información sobre este enfoque, consulte la charla de Reto .
Y para obtener detalles completos sobre cómo implementar el agente de copia de seguridad, consulte Copia de seguridad de datos . Recomiendo especialmente la sección en la parte inferior de las pruebas, ya que la copia de seguridad no se realiza instantáneamente, por lo que para realizar la prueba debe forzar la copia de seguridad.
fuente
Creo que esta es una forma segura de construir un esqueleto para una identificación única ... échale un vistazo.
ID pseudo-único, que funciona en todos los dispositivos Android Algunos dispositivos no tienen un teléfono (por ejemplo, tabletas) o, por alguna razón, no desea incluir el permiso READ_PHONE_STATE. Todavía puede leer detalles como la versión de ROM, el nombre del fabricante, el tipo de CPU y otros detalles de hardware, que serán adecuados si desea utilizar la ID para una verificación de clave de serie u otros fines generales. La ID calculada de esta manera no será única: es posible encontrar dos dispositivos con la misma ID (basada en el mismo hardware e imagen de ROM), pero los cambios en las aplicaciones del mundo real son insignificantes. Para este propósito, puede usar la clase Build:
La mayoría de los miembros de Build son cadenas, lo que estamos haciendo aquí es tomar su longitud y transformarla a través de un módulo en un dígito. Tenemos 13 de estos dígitos y estamos agregando dos más al frente (35) para tener la misma ID de tamaño que el IMEI (15 dígitos). Hay otras posibilidades aquí están bien, solo eche un vistazo a estas cadenas. Devuelve algo como
355715565309247
. No se requiere un permiso especial, lo que hace que este enfoque sea muy conveniente.(Información adicional: la técnica proporcionada anteriormente se copió de un artículo sobre Pocket Magic ).
fuente
El siguiente código devuelve el número de serie del dispositivo utilizando una API de Android oculta. Pero este código no funciona en Samsung Galaxy Tab porque "ro.serialno" no está configurado en este dispositivo.
fuente
ro.serialno
se usa para generar elSettings.Secure.ANDROID_ID
. Entonces son básicamente representaciones diferentes del mismo valor.ANDROID_ID
se deriva un nuevo valor para .android.os.Build.SERIAL
android.os.Build.SERIAL
quedará en desuso en Android O, consulte android-developers.googleblog.com/2017/04/…Es una pregunta simple, sin respuesta simple.
Además, todas las respuestas existentes aquí son obsoletas o poco confiables.
Entonces, si estás buscando una solución en 2020 .
Aquí hay algunas cosas a tener en cuenta:
Todos los identificadores basados en hardware (SSAID, IMEI, MAC, etc.) no son confiables para dispositivos que no son de Google (todo excepto píxeles y nexos), que son más del 50% de los dispositivos activos en todo el mundo. Por lo tanto, las mejores prácticas de los identificadores oficiales de Android establecen claramente:
Eso hace que la mayoría de las respuestas anteriores no sean válidas. También debido a las diferentes actualizaciones de seguridad de Android, algunas de ellas requieren permisos de ejecución más nuevos y más estrictos, que el usuario puede simplemente negar.
Como ejemplo
CVE-2018-9489
que afecta a todas las técnicas basadas en WIFI mencionadas anteriormente.Eso hace que esos identificadores no solo sean poco confiables, sino también inaccesibles en muchos casos.
En palabras más simples: no uses esas técnicas .
Muchas otras respuestas aquí sugieren usar el
AdvertisingIdClient
, que también es incompatible, ya que por diseño solo debe usarse para la creación de perfiles publicitarios. También se indica en la referencia oficial.No solo no es confiable para la identificación del dispositivo, sino que también debe respetar la privacidad del usuario con respecto al seguimiento de anuncios política de , que establece claramente que el usuario puede restablecerla o bloquearla en cualquier momento.
Así que tampoco lo uses .
Dado que no puede tener el identificador de dispositivo estático globalmente único y confiable deseado. La referencia oficial de Android sugiere:
Es único para la instalación de la aplicación en el dispositivo, por lo que cuando el usuario desinstala la aplicación, se borra, por lo que no es 100% confiable, pero es la mejor opción.
Para usar,
FirebaseInstanceId
agregue la última dependencia de mensajería firebase en su gradleY use el siguiente código en un hilo de fondo:
Si necesita almacenar la identificación del dispositivo en su servidor remoto, no la guarde tal cual (texto sin formato), sino un hash con sal .
Hoy no es solo una mejor práctica, sino que debe hacerlo por ley de acuerdo con GDPR: identificadores y regulaciones similares.
fuente
Usando el código a continuación, puede obtener la ID única del dispositivo de un dispositivo con sistema operativo Android como una cadena.
fuente
Se agregó un campo Serie a la
Build
clase en el nivel API 9 (Android 2.3 - Gingerbread) La documentación dice que representa el número de serie del hardware. Por lo tanto, debe ser único, si existe en el dispositivo.Sin embargo, no sé si realmente es compatible (= no nulo) con todos los dispositivos con nivel de API> = 9.
fuente
Añadiré una cosa: tengo una de esas situaciones únicas.
Utilizando:
Resulta que a pesar de que mi tableta Viewsonic G informa un DeviceID que no es nulo, cada tableta G informa el mismo número.
Lo hace interesante jugar "Pocket Empires", que le brinda acceso instantáneo a la cuenta de alguien en función del DeviceID "único".
Mi dispositivo no tiene una radio celular.
fuente
9774d56d682e549c
?Para obtener instrucciones detalladas sobre cómo obtener un identificador único para cada dispositivo Android desde el que se instala su aplicación, consulte el blog oficial de desarrolladores de Android que publica las instalaciones de aplicaciones de identificación .
Parece que la mejor manera es generar uno usted mismo después de la instalación y luego leerlo cuando se reinicia la aplicación.
Personalmente encuentro esto aceptable pero no ideal. Ningún identificador proporcionado por Android funciona en todos los casos, ya que la mayoría depende de los estados de radio del teléfono (activación / desactivación de Wi-Fi, activación / desactivación de celular, activación / desactivación de Bluetooth). Los demás, como
Settings.Secure.ANDROID_ID
deben ser implementados por el fabricante y no se garantiza que sean únicos.El siguiente es un ejemplo de escritura de datos en un archivo de instalación que se almacenaría junto con cualquier otro dato que la aplicación guarde localmente.
fuente
Agregue el siguiente código en el archivo de clase:
Agregar en AndroidManifest.xml:
fuente
El ID de dispositivo único de un dispositivo con sistema operativo Android como String, usando
TelephonyManager
yANDROID_ID
, se obtiene mediante:Pero recomiendo encarecidamente un método sugerido por Google, consulte Identificación de instalaciones de aplicaciones .
fuente
Hay muchos enfoques diferentes para
ANDROID_ID
solucionar esos problemas (anull
veces, los dispositivos de un modelo específico siempre devuelven la misma ID) con pros y contras:Yo mismo prefiero usar una implementación de OpenUDID existente (consulte https://github.com/ylechelle/OpenUDID ) para Android (consulte https://github.com/vieux/OpenUDID ). Es fácil de integrar y hace uso de los
ANDROID_ID
retrocesos para los problemas mencionados anteriormente.fuente
¿Qué tal el IMEI ? Eso es único para Android u otros dispositivos móviles.
fuente
Así es como estoy generando la identificación única:
fuente
Mis dos centavos, NB, esto es para una identificación única del dispositivo (err) , no para la instalación, como se discutió en el blog de desarrolladores de Android .
Tenga en cuenta que la solución proporcionada por @emmby recae en un ID por aplicación, ya que SharedPreferences no se sincronizan en todos los procesos (consulte aquí y aquí ). Así que evité esto por completo.
En cambio, encapsulé las diversas estrategias para obtener una ID de (dispositivo) en una enumeración: cambiar el orden de las constantes de enumeración afecta la prioridad de las diversas formas de obtener la ID. Se devuelve el primer ID no nulo o se lanza una excepción (según las buenas prácticas de Java de no dar un significado nulo). Entonces, por ejemplo, primero tengo el TELEPHONY, pero una buena opción predeterminada sería la beta ANDROID_ID :
fuente
Aquí hay más de 30 respuestas y algunas son iguales y otras son únicas. Esta respuesta se basa en pocas de esas respuestas. Uno de ellos es la respuesta de @Lenn Dolling.
Combina 3 ID y crea una cadena hexadecimal de 32 dígitos. Me ha funcionado muy bien.
3 ID son:
Pseudo-ID : se genera en función de las especificaciones del dispositivo físico
ANDROID_ID -
Settings.Secure.ANDROID_ID
Dirección de Bluetooth - Dirección del adaptador de Bluetooth
Devolverá algo como esto: 551F27C060712A72730B0A0F734064B1
Nota: Siempre puede agregar más ID a la
longId
cadena. Por ejemplo, número de serie. Dirección del adaptador wifi. IMEI De esta manera, lo está haciendo más único por dispositivo.fuente
longId
y almacenarlo en un archivo, lo hará el identificador más exclusivo:String uuid = UUID.randomUUID().toString();
longId
. Cambie esa línea de esta manera:String longId = pseudoId + androidId + btId + UUID.randomUUID().toString();
esto garantiza que la ID generada será única.Otra forma es usar
/sys/class/android_usb/android0/iSerial
en una aplicación sin ningún tipo de permiso.Para hacer esto en Java, uno simplemente usaría FileInputStream para abrir el archivo iSerial y leer los caracteres. Solo asegúrese de incluirlo en un controlador de excepciones, porque no todos los dispositivos tienen este archivo.
Se sabe que al menos los siguientes dispositivos tienen este archivo legible en todo el mundo:
También puede ver la publicación de mi blog Filtrando el número de serie del hardware de Android en aplicaciones no privilegiadas donde analizo qué otros archivos están disponibles para obtener información.
fuente
TelephonyManger.getDeviceId () Devuelve la ID única del dispositivo, por ejemplo, el IMEI para GSM y el MEID o ESN para teléfonos CDMA.
Pero recomiendo usar:
Settings.Secure.ANDROID_ID que devuelve la ID de Android como una cadena hexadecimal única de 64 bits.
A veces, TelephonyManger.getDeviceId () devolverá un valor nulo, por lo que para garantizar una identificación única, utilizará este método:
fuente
Para el reconocimiento de hardware de un dispositivo Android específico, puede verificar las direcciones MAC.
puedes hacerlo de esa manera:
en AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
ahora en tu código:
En cada dispositivo Android, existe al menos una interfaz "wlan0", que es el chip WI-FI. Este código funciona incluso cuando WI-FI no está encendido.
PD: Hay muchas otras interfaces que obtendrá de la lista que contiene MACS. Pero esto puede cambiar entre teléfonos.
fuente
Utilizo el siguiente código para obtener
IMEI
o usar Secure.ANDROID_ID
como alternativa, cuando el dispositivo no tiene capacidades telefónicas:fuente
Más específicamente
Settings.Secure.ANDROID_ID
,. Esta es una cantidad de 64 bits que se genera y almacena cuando el dispositivo se inicia por primera vez. Se restablece cuando se limpia el dispositivo.ANDROID_ID
Parece una buena opción para un identificador de dispositivo único. Hay inconvenientes: en primer lugar, no es 100% confiable en las versiones de Android anteriores a 2.2(“Froyo”).
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.fuente
Para comprender los ID únicos disponibles en dispositivos Android. Utiliza esta guía oficial.
Mejores prácticas para identificadores únicos:
IMEI, direcciones Mac, ID de instancia, GUID, SSAID, ID de publicidad, API de Safety Net para verificar dispositivos.
https://developer.android.com/training/articles/user-data-ids
fuente
ID de instancia de Google
Lanzado en I / O 2015; en Android requiere servicios de reproducción 7.5.
https://developers.google.com/instance-id/
https://developers.google.com/instance-id/guides/android-implementation
Parece que Google tiene la intención de que esta ID se use para identificar instalaciones en Android, Chrome e iOS.
Identifica una instalación en lugar de un dispositivo, pero nuevamente, ANDROID_ID (que es la respuesta aceptada) ahora ya no identifica dispositivos. Con el tiempo de ejecución ARC, se genera un nuevo ANDROID_ID para cada instalación ( detalles aquí ), al igual que este nuevo ID de instancia. Además, creo que identificar instalaciones (no dispositivos) es lo que la mayoría de nosotros estamos buscando.
Las ventajas de la identificación de instancia
Me parece que Google tiene la intención de que se use para este propósito (identificación de sus instalaciones), es multiplataforma y se puede usar para una serie de otros fines (consulte los enlaces anteriores).
Si usa GCM, eventualmente necesitará usar esta ID de instancia porque la necesita para obtener el token GCM (que reemplaza la ID de registro de GCM anterior).
Las desventajas / problemas
En la implementación actual (GPS 7.5), el ID de la instancia se recupera de un servidor cuando su aplicación lo solicita. Esto significa que la llamada anterior es una llamada de bloqueo: en mis pruebas no científicas, toma 1-3 segundos si el dispositivo está en línea, y 0.5 - 1.0 segundos si está fuera de línea (presumiblemente, este es el tiempo que espera antes de darse por vencido y generar un ID al azar). Esto se probó en América del Norte en Nexus 5 con Android 5.1.1 y GPS 7.5.
Si utiliza la identificación para los fines que pretenden, por ejemplo. autenticación de la aplicación, identificación de la aplicación, GCM: creo que estos 1-3 segundos pueden ser una molestia (dependiendo de su aplicación, por supuesto).
fuente