¿El token del dispositivo APNS cambia alguna vez, una vez creado?

99

Una vez creado, ¿cambia el token del dispositivo de notificación push?

Ejemplo cuando se actualiza la aplicación? o en cualquier otro caso puede cambiar

001
fuente
Asegúrese de ver esta respuesta, ya que proporciona documentación para 4 lugares donde cambia el token del dispositivo
cariño,

Respuestas:

71

De [Documentación de Apple ApplePushService] 2

La forma de esta fase de confianza del token asegura que solo los APN generen el token que luego honrará, y puede asegurarse de que un token que le entregue un dispositivo es el mismo token que se aprovisionó previamente para ese dispositivo en particular, y solo para ese dispositivo.

Si el usuario restaura los datos de la copia de seguridad en un nuevo dispositivo o reinstala el sistema operativo, el token del dispositivo cambia.

malinois
fuente
Los documentos actuales han eliminado la última oración. Parece (de otra pregunta SO, stackoverflow.com/questions/2751481/... ) que la restauración de datos se conservan las fichas de APN sino que se instala OS y "toallitas" se restablecerá que (a menos que se siguen mediante la restauración de los datos de la operación que acaba de instalar sistema).
Robert Altman
1
@RobertAltman: no creo que esta sea toda la historia. He visto varios registros en nuestra base de datos de dispositivos completamente diferentes con el mismo token APNS exacto . Veo frente a mí ahora mismo un iPad 2 y un iPhone 3GS que nos han enviado el mismo token. ¿Alguien más puede confirmar este comportamiento?
DougW
@DougW, esto es extraño. ¿Sigues teniendo algún problema similar? Editó el enlace y lo publicó desde los documentos más recientes.
iosCurator
139

La documentación oficial de Apple no está clara en este punto. Lo que he observado es esto: el token es invariante para un dispositivo, aplicación y dominio determinados (producción frente a sandbox). Creo que esto debe seguir siendo cierto para que el sistema funcione de manera confiable. Considere la situación en la que una actualización de la aplicación activa un nuevo token APN; Si estuviera usando la mejor nueva aplicación similar a Twitter, con las notificaciones habilitadas, ¿qué pasaría cuando actualice mi aplicación desde iTunes? ¿Debería tener la expectativa de que se seguirán enviando notificaciones aunque no haya ejecutado las aplicaciones ya que "sincronizo" la actualización en mi dispositivo? El acto de cambiar la aplicación no puede afectar el sistema APN ya que el sistema operativo puede recibir notificaciones en su nombre aunque no haya ejecutado la aplicación actualizada.

Para ser claros, Apple afirma que "una aplicación debe registrarse [con los servidores APN] cada vez que se inicia y darle a su proveedor el token actual". Estoy totalmente de acuerdo; hacerlo protegerá su aplicación de suposiciones erróneas o situaciones inusuales.

Una de las respuestas a ¿Son los tokens de notificación push únicos en todas las aplicaciones para un solo dispositivo? indica que los tokens de dispositivo son únicos por "instalación del sistema operativo"; y que restaurar desde una copia de seguridad a un dispositivo mantendría el token, pero borrar un dispositivo hará que obtenga un nuevo token. Esto sería totalmente coherente con las intenciones de Apple de operación y privacidad sin problemas: limpiar un dispositivo es lo suficientemente severo como para justificar una nueva asociación, pero un usuario que restaure una imagen después de una actualización del sistema operativo querría conservar sus notificaciones existentes. Si recuerdo la actualización reciente de iOS5 en mi iPad, restauré la copia de seguridad más reciente después de la actualización, por lo que esto habría mantenido la consistencia de mi token de notificación. [Editar: restaurar una copia de seguridad en otro dispositivo NO duplicará el token.]

advertencia: no tengo un conocimiento definitivo sobre el tema, solo algo de experiencia razonable trabajando con APN (como desarrollador externo). Como siempre, es mejor verificar sus suposiciones.


Actualización (junio de 2012):

Recientemente tuve la oportunidad de a> hablar con los ingenieros de Apple yb> ejecutar algunas pruebas del mundo real, y quería presentar los resultados:

Para ser completo, cuando hablo de devolver un token APN, asumo el contexto de un solo identificador / aplicación de paquete.

Primero, los ingenieros de Apple dijeron que no debería ser posible que dos dispositivos devuelvan el mismo APN. A pesar de los comentarios a continuación, no he podido identificar una circunstancia en la que esto falle.

En segundo lugar, aquí está la secuencia de la prueba de actualización y los resultados:

  1. Comience con iOS4 instalado en iPhone4; dispositivo de respaldo en iTunes

  2. Actualice a iOS5
    De una prueba anterior, sé que el token APN ahora es diferente

  3. Restaurar la copia de seguridad en el dispositivo
    El token APN ahora es el mismo que en el paso 1.

  4. Restablecer iOS (dispositivo limpio)
    El token APN cambia

  5. Haga una copia de seguridad de un teléfono diferente en iTunes y restaure esa copia de seguridad para probar el dispositivo; básicamente, estoy restaurando la copia de seguridad "incorrecta", como si estuviera cambiando de teléfono.
    El token de APN cambia nuevamente; además, es distinto y no coincide con los tokens ni con el token original ni con el token "clonado".

  6. Restaure la copia de seguridad "correcta" en el dispositivo.
    El token de APN ahora es el mismo que el del paso 1.

  7. Por último, actualicé el teléfono a iOS6 (beta2), restauré mi copia de seguridad y volví a probar. Como se esperaba, el token continuó coincidiendo con el token en el paso 1.

En este punto, estoy bastante seguro de que los tokens APN no se pueden duplicar entre diferentes dispositivos; quizás esto haya ocurrido como un error en versiones anteriores de iOS, pero estoy seguro de que iOS5 (y presumiblemente iOS6) están manejando los tokens APN correctamente.


Actualización (agosto de 2012)

Me he dado cuenta de que no había añadido este: tokens de dispositivo van a cambiar. Uno de los desarrolladores de Apple compartió conmigo que los tokens realmente caducan (después de 2 años, creo). Para muchos propósitos, esto es lo suficientemente largo como para considerarlo invariante.

[No me preocupa tener que actualizar mis scripts de prueba con nuevos tokens cada dos años, especialmente porque cambio de teléfono todos los años].

Robert Altman
fuente
Entonces, ¿esto significa que puede usar el token como una forma de identificar de forma única a un usuario? (lo cual es muy práctico en aplicaciones donde uno tiene que 'votar'). Puedo imaginar la situación: el usuario vota y la aplicación responde con un número aleatorio a través de las notificaciones. Ese número debe reenviarse al servidor para que el voto sea válido. De esta manera, la votación no se puede manipular fácilmente.
Toad
También es interesante: ¿cambia el token al eliminar la aplicación y volver a instalarla? ¿O es esto similar a la opción 'restaurar una copia de seguridad'
Toad
@Toad El token no cambiará como resultado de eliminar y reinstalar una aplicación.
Robert Altman
@Toad No creo que esta sea una buena forma de identificación de usuario; Dado que el token es único por dispositivo (así como por aplicación), un usuario con varios dispositivos tendrá varios tokens.
Robert Altman
1
Me pregunto acerca de la relación entre certificados y token de dispositivo. si el certificado .p12 caduca, es necesario cambiar el nuevo certificado. Encontré una referencia "Cuando se necesita un nuevo token de dispositivo, los APN generan uno con la información contenida en el certificado del dispositivo". Entonces, ¿no es posible actualizar el token del dispositivo al cambiar los certificados?
illusionJJ
50

Lo acabo de probar con cambios de token de inserción de iOS9 y APN si reinstalo una aplicación.

Nikolay Derkach
fuente
7
puedo confirmar esto
roocell
1
También puedo confirmar esto
Muhammad Adnan
1
Sí, está cambiando :(
Azik Abdullah
¿Alguien puede decir por qué sucede esto?
Sushobhit
Sí, cambiaría
Ved Rauniyar
22

, los tokens de dispositivo pueden cambiar.

Cada vez que su aplicación recibe un token, debe almacenarlo. Luego, siempre que se reciba un nuevo token (lo que sucederá, eventualmente), compare el nuevo token con el token almacenado y, si son diferentes:

  1. Actualice el almacenamiento local del dispositivo (incluido posiblemente a nil)
  2. Actualice cualquier cosa en el dispositivo que usa el token para estar al tanto del nuevo token
  3. Actualice cualquier API que tenga conocimiento de este token al nuevo token.

En la práctica, es probable que el último paso no sea trivial. Por ejemplo, si tiene un servicio que envía alertas meteorológicas a un token de dispositivo en función del código postal al que se ha suscrito ese dispositivo, debe pasar el old_tokeny el new_tokena dicho servicio para que pueda actualizar la entrega.

Ergo, en términos generales, el 100% de las API que aceptan un "token de dispositivo" también deben tener algún tipo de UPDATEinstalación para ese token. Para no crear de esto es que la acumulación de notificaciones entregadas no-mis-entregados y.

SG1
fuente
suena bien, pero ¿qué he eliminado y reinstalado mi aplicación? en ese escenario, el token del dispositivo que guardé en el almacenamiento local se eliminará
Kuf
@Kuf, ¿obtuviste una respuesta a esa pregunta? Tengo lo mismo: incluso si la aplicación se desinstala / reinstala, ¿cómo compararíamos el token del sistema?
nkirkes
@nkirkes vea esta pregunta para más detalles
Kuf
Los tres puntos de "Actualización" de los que habló, ¿son responsabilidades de iOS, del SDK o de nosotros mismos?
sobrenombre
7

El token del dispositivo cambia de iOS 8 y posterior

Consulte el texto a continuación del sitio web de Apple. Registro, programación y gestión de notificaciones de usuario

El token del dispositivo es su clave para enviar notificaciones automáticas a su aplicación en un dispositivo específico. Los tokens de dispositivo pueden cambiar, por lo que su aplicación debe volver a registrarse cada vez que se inicia y pasar el token recibido a su servidor. Si no actualiza el token del dispositivo, es posible que las notificaciones remotas no lleguen al dispositivo del usuario. Los tokens de dispositivo siempre cambian cuando el usuario restaura los datos de respaldo en un nuevo dispositivo o computadora o reinstala el sistema operativo. Al migrar datos a un nuevo dispositivo o computadora, el usuario debe iniciar su aplicación una vez antes de que las notificaciones remotas se puedan enviar a ese dispositivo.

Nitya
fuente
2
¡La URL está muerta! Por favor, arreglalo.
Ramis
buen enlace
SomeGuyFortune
4

Creo que vale la pena mencionar que, como nadie lo hizo, el token cambia después de haber llamado unregisterForRemoteNotifications. La registerForRemoteNotificationspróxima vez que llame, el token será diferente. No pude encontrar ninguna confirmación de esto en los documentos de Apple, pero yo mismo fui testigo de tal comportamiento. Por favor tenga esto en cuenta

Andrey Chernukha
fuente
3

No debería cambiar, a menos que su aplicación se restaure en un nuevo dispositivo (momento en el que no se le pedirá que vuelva a aceptar notificaciones automáticas, y simplemente le enviará la llamada registrada, momento en el que debe aceptar el nuevo token).

Pero Apple no garantiza que nunca cambie (de ahí que la documentación nunca lo mencione). Es mejor que programe para lo peor y asuma que puede cambiar algún día. Además, enviar un token a su servidor con regularidad le permite eliminar tokens que no se han registrado durante un tiempo y que probablemente hayan desinstalado su aplicación o hayan perdido el interés hace un tiempo (¡y la documentación lo especifica como comportamiento deseado!).

Jake
fuente
Tienes razón: no puedes asumir que el token es permanente; siga las reglas de participación según se definen en los documentos de APN. De hecho, los desarrolladores de Apple me han dicho que el token cambiará eventualmente (después de unos 2 años).
Robert Altman
1
Resucitando una vieja discusión, pero alguien podría encontrarla útil: pasé algún tiempo esta semana trabajando en un servidor Parse autohospedado y teniendo problemas de prueba, resulta que cada vez que actualizaba mi aplicación de desarrollo (ya que estaba haciendo un número de cambios de UX), la identificación del token cambió con cada instalación del software ... ¿no es eso demasiado divertido? (suspiro)
ChrisH
3

De - Apple Docs

Los APN pueden emitir un nuevo token de dispositivo por varias razones:

  • El usuario instala su aplicación en un dispositivo nuevo

  • El usuario restaura el dispositivo desde una copia de seguridad

  • El usuario reinstala el sistema operativo

  • Otros eventos definidos por el sistema

Como resultado, las aplicaciones deben solicitar el token del dispositivo en el momento del lanzamiento.

Adicionalmente:

IMPORTANTE

Los tokens de dispositivo de APN son de longitud variable. No codifique su tamaño.

Lal Krishna
fuente
2

¡Los enlaces se vuelven obsoletos rápidamente con Apple! así que estoy citando lo que parece estar bastante claro ahora:

Nunca almacene en caché los tokens del dispositivo en su aplicación; en su lugar, obténgalos del sistema cuando los necesite. APNs emite un nuevo token de dispositivo a su aplicación cuando ocurren ciertos eventos. Se garantiza que el token del dispositivo será diferente, por ejemplo, cuando un usuario restaura un dispositivo a partir de una copia de seguridad, cuando el usuario instala su aplicación en un nuevo dispositivo y cuando el usuario reinstala el sistema operativo. Obtener el token, en lugar de depender de un caché, garantiza que tenga el token de dispositivo actual necesario para que su proveedor se comunique con los APN. Cuando intenta recuperar un token de dispositivo pero no ha cambiado, el método de recuperación regresa rápidamente.

De esta guía

TheFuquan
fuente
0

Como referencia a las notificaciones push de Apple

El token del dispositivo es su clave para enviar notificaciones automáticas a su aplicación en un dispositivo específico. Los tokens de dispositivo pueden cambiar, por lo que su aplicación debe volver a registrarse cada vez que se inicia y pasar el token recibido a su servidor. Si no actualiza el token del dispositivo, es posible que las notificaciones remotas no lleguen al dispositivo del usuario. Los tokens de dispositivo siempre cambian cuando el usuario restaura los datos de respaldo en un nuevo dispositivo o computadora o reinstala el sistema operativo. Al migrar datos a un nuevo dispositivo o computadora, el usuario debe iniciar su aplicación una vez antes de que las notificaciones remotas se puedan enviar a ese dispositivo.

Nunca almacene en caché un token de dispositivo; siempre obtenga el token del sistema cuando lo necesite. Si su aplicación se registró anteriormente para recibir notificaciones remotas, volver a llamar al método registerForRemoteNotifications no genera gastos generales adicionales, e iOS devuelve el token del dispositivo existente al delegado de su aplicación de inmediato. Además, iOS llama a su método de delegado cada vez que cambia el token del dispositivo, no solo en respuesta a que su aplicación se registre o se vuelva a registrar.

Mohit Gaur
fuente
0

Según este enlace, el token del dispositivo

El token de dispositivo incluido en cada solicitud representa la identidad del dispositivo que recibe la notificación. APN utiliza tokens de dispositivo para identificar cada combinación única de aplicación y dispositivo. También los usa para autenticar el enrutamiento de notificaciones remotas enviadas a un dispositivo. Cada vez que su aplicación se ejecuta en un dispositivo, obtiene este token de APN y lo reenvía a su proveedor. Su proveedor almacena el token y lo usa cuando envía notificaciones a esa aplicación y dispositivo en particular. El token en sí es opaco y persistente, y solo cambia cuando se borran los datos y la configuración de un dispositivo. Solo los APN pueden decodificar y leer un token de dispositivo.

lucianoenrico
fuente
0

, puede cambiar. Idealmente, siempre que recibamos un token a través del método de devolución de llamada

  • (nula) aplicación: (UIApplication *) aplicación didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken

La aplicación debe registrar / actualizar el token en el servidor remoto. Esto asegurará que el token en APNS y su servidor se mantengan sincronizados.

Según la documentación de Apple ,

Obtener y manejar un token de dispositivo específico de la aplicación funciona de la siguiente manera:

Su aplicación se registra con APN para notificaciones remotas Cuando se necesita un nuevo token de dispositivo, APN genera uno utilizando la información contenida en el certificado del dispositivo. Cifra el token con una clave de token y lo devuelve al dispositivo, como se muestra en la flecha central que apunta a la derecha. El sistema devuelve el token del dispositivo a su aplicación llamando a su aplicación: didRegisterForRemoteNotificationsWithDeviceToken: método delegado. Al recibir el token, su aplicación (dentro del método delegado) debe reenviarlo a su proveedor en formato binario o hexadecimal. Su proveedor no puede enviar notificaciones al dispositivo sin este token. Para obtener más información, consulte Registro para recibir notificaciones remotas en Configuración del soporte de notificaciones remotas.

iosCurador
fuente
0

El token del dispositivo retransmite la instalación de la aplicación.

Significa que si reinstala la aplicación, cambia ; no importa si lo hace desde una copia de seguridad, una actualización de iOS, etc.

La forma correcta de usarlo, para evitar cualquier problema, es obtener el que se da NSPAppDelegateen cada lanzamiento de la aplicación, en el métododidRegisterForRemoteNotificationsWithDeviceToken

Alberto Scampini
fuente