objective-c - notification - downloads apple developer
¿El token del dispositivo APNS cambia alguna vez, una vez creado? (12)
¡Los enlaces se vuelven obsoletos rápidamente con la manzana! así que estoy citando lo que parece ser bastante claro ahora:
Nunca almacene tokens de dispositivo en su aplicación; en cambio, sáquelos 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 sea diferente, por ejemplo, cuando un usuario restaura un dispositivo desde una copia de seguridad, cuando el usuario instala su aplicación en un dispositivo nuevo y cuando el usuario reinstala el sistema operativo. Obtener el token, en lugar de confiar en 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 vuelve rápidamente.
Una vez creado, ¿el token del dispositivo de notificación push cambia alguna vez?
Ejemplo cuando la aplicación se actualiza? o en cualquier otro caso puede cambiar?
Acabo de probarlo con iOS9 y cambios de token de dispositivo si reinstalo una aplicación.
Como referencia a las notificaciones push de Apple
El token del dispositivo es la clave para enviar notificaciones automáticas a su aplicación en un dispositivo específico. Los tokens de dispositivos pueden cambiar, por lo que su aplicación debe volver a registrarse cada vez que se lance 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 dispositivos siempre cambian cuando el usuario restaura los datos de la copia de seguridad a 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 se puedan entregar notificaciones remotas a ese dispositivo.
Nunca almacenar en caché un token de dispositivo; siempre obtén el token del sistema siempre que lo necesites. Si su aplicación se registró previamente para notificaciones remotas, volver a llamar al método registerForRemoteNotifications no implica gastos adicionales, y iOS devuelve el token de dispositivo existente al delegado de su aplicación inmediatamente. 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 reinscriba.
El token del dispositivo cambia de iOS 8 y posterior
Por favor, consulte el texto a continuación desde el sitio web de Apple. Registro, programación y manejo de notificaciones de usuario
El token del dispositivo es la clave para enviar notificaciones automáticas a su aplicación en un dispositivo específico. Los tokens de dispositivos pueden cambiar, por lo que su aplicación debe volver a registrarse cada vez que se lance 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 dispositivos siempre cambian cuando el usuario restaura los datos de la copia de seguridad a 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 se puedan entregar notificaciones remotas a ese dispositivo.
El token del dispositivo se retransmite en la instalación de la aplicación.
Significa que si reinstala la aplicación, cambia ; no importa si lo haces desde una copia de seguridad, un ecc de actualización de iOS.
La forma correcta de usarlo, para evitar cualquier problema, es obtener el proporcionado en NSPAppDelegate
en cada inicio de la aplicación, en el método didRegisterForRemoteNotificationsWithDeviceToken
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 entorno aislado). 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 desencadena un nuevo token de APN; si estuviera usando la mejor aplicación nueva de Twitter, con las notificaciones habilitadas, ¿qué pasaría cuando actualizo mi aplicación desde iTunes? ¿Debo tener la expectativa de que se sigan enviando notificaciones aunque no haya ejecutado las aplicaciones porque "sincronizo" la actualización en mi dispositivo? El hecho de cambiar la aplicación no puede afectar el sistema APN ya que el sistema operativo puede recibir notificaciones en su nombre a pesar de que no haya ejecutado la aplicación actualizada.
Para que quede claro, Apple afirma que "una aplicación debe registrarse [con servidores APN] cada vez que se lanza y le da a su proveedor el token actual". De todo corazón estoy de acuerdo; al hacerlo, protegerá su aplicación de suposiciones erróneas o situaciones inusuales.
¿Una de las respuestas a los tokens de notificación push es única en todas las aplicaciones para un solo dispositivo? indica que los tokens del dispositivo son únicos por "instalación del sistema operativo"; y que restaurar desde la copia de seguridad a un dispositivo mantendría el token, pero borrarlo hará que obtenga un nuevo token. Esto sería completamente coherente con las intenciones de Apple de una operación sin interrupciones y privacidad: limpiar un dispositivo es lo suficientemente severo como para garantizar una nueva asociación, pero un usuario que restaura una imagen después de una actualización del sistema operativo desea conservar sus notificaciones existentes. Si recuerdo la reciente actualización de iOS5 en mi iPad, restauré la copia de seguridad más reciente después de la actualización, así que esto hubiera mantenido la consistencia de mi token de notificación. [Editar: la restauración de una copia de seguridad en un dispositivo diferente NO duplicará el token.]
advertencia: no tengo conocimiento definitivo sobre el tema, solo una 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 hablar con los ingenieros de Apple y realizar algunas pruebas en el mundo real, y quería presentar los resultados:
Para estar completo, cuando hablo de devolver un token de APN, estoy asumiendo el contexto de un único paquete de identificador / aplicación.
Primero, los ingenieros de Apple dijeron que no debería ser posible que dos dispositivos devolvieran el mismo APN. A pesar de los comentarios a continuación, no he podido identificar una circunstancia donde esto falla.
En segundo lugar, aquí está la secuencia de prueba de actualización y los resultados:
Comience con iOS4 instalado en iPhone4; dispositivo de copia de seguridad en iTunes
Actualiza a iOS5
De una prueba anterior, sé que el token de APN ahora es diferenteRestaurar la copia de seguridad al dispositivo
El token de APN ahora es el mismo que el paso 1.Restablecer iOS (dispositivo limpio)
El Token APN cambiaCopia de seguridad de un teléfono diferente a iTunes y restaurar 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 de nuevo; Además, es distinto y no coincide con los tokens, ya sea el token original o el token "clonado".Restaure la copia de seguridad "correcta" al dispositivo.
El token de APN ahora es el mismo que el paso 1.Por último, actualicé el teléfono a iOS6 (beta2), restauré mi copia de seguridad y volví a probar. Como se esperaba, el token siguió 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 puede haber sucedido como un error en las versiones anteriores de iOS, pero estoy seguro de que iOS5 (y presumiblemente iOS6) están manejando correctamente los tokens APN.
Actualización (agosto de 2012)
Me di cuenta de que no había agregado esto: los tokens de los dispositivos cambiarán. Uno de los desarrolladores de Apple me comentó que los tokens en realidad caducan (después de 2 años, creo). Para muchos propósitos, esto es lo suficientemente largo como para considerarlo como invariante.
[No me preocupa si tengo que actualizar mis scripts de prueba con nuevos tokens cada dos años, especialmente porque cambio de teléfono todos los años.]
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.
Consulte: Apple Docs
NB: los tokens de dispositivo APN son de longitud variable. No codifique su tamaño.
No debería cambiar, a menos que su aplicación se restaure en un nuevo dispositivo (en ese momento no se le pedirá que acepte notificaciones push nuevamente, y simplemente le enviará la llamada registrada, en cuyo momento debe aceptar el nuevo token).
Pero Apple no garantiza que nunca cambie (de ahí que la documentación nunca lo mencione). Es mejor que programes lo peor y asumas que puede cambiar un día. Además, enviar un token a su servidor regularmente le permite eliminar tokens que no se han registrado por un tiempo, y probablemente haya desinstalado su aplicación o perdido el interés hace un tiempo (¡y la documentación lo especifica como un comportamiento deseado!).
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 usa tokens de dispositivo para identificar cada aplicación única y combinación de dispositivo. También los usa para autenticar el enrutamiento de las notificaciones remotas enviadas a un dispositivo. Cada vez que su aplicación se ejecuta en un dispositivo, obtiene este token de las APN y lo enví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í mismo es opaco y persistente, y cambia solo cuando se borran los datos y las configuraciones del dispositivo. Solo los APN pueden decodificar y leer un token de dispositivo.
SÍ , los tokens del dispositivo pueden cambiar.
Cada vez que su aplicación recibe un token, debe almacenarlo. Luego, cada vez que se recibe un token nuevo (lo que sucederá, eventualmente), compare el token nuevo con el token almacenado y, si son diferentes:
- Actualice el almacenamiento local del dispositivo (incluido posiblemente a
nil
) - Actualice cualquier cosa en el dispositivo que usa el token para conocer el nuevo token
- Actualice cualquier API que tenga conocimiento de este token al nuevo token.
Como cuestión práctica, el último paso es el que probablemente no sea trivial. Por ejemplo, si tiene un servicio que envía alertas meteorológicas a un token de dispositivo según el código postal al que se haya suscrito, debe pasar el old_token
y el new_token
a dicho servicio para que pueda actualizar la entrega.
Ergo, en general, el 100% de las API que aceptan un "token de dispositivo" también debe tener algún tipo de recurso UPDATE
para ese token. No compilar para esto es construir para notificaciones entregadas y no entregadas.
Sí , puede cambiar Idealmente, siempre que recibamos un token a través del método de devolución de llamada
- (void) 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 el APNS y su servidor se mantenga sincronizado.
Según la documentación de Apple ,
La obtención y el manejo de 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 token de dispositivo nuevo, APN genera uno utilizando la información contenida en el certificado del dispositivo. Encripta el token con una clave token y lo devuelve al dispositivo, como se muestra en la flecha central que apunta hacia la derecha. El sistema devuelve el token del dispositivo a su aplicación llamando a su aplicación: didRegisterForRemoteNotificationsWithDeviceToken: delegate method. Al recibir el token, su aplicación (dentro del método delegado) debe reenviarla 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 Registrarse para recibir notificaciones remotas en Configuración de soporte de notificación remota.
De [Apple Documentation ApplePushService] 2
La forma de esta fase de confianza de tokens garantiza que solo APN genere el token que luego cumplirá, y puede asegurarse de que un token entregado por un dispositivo es el mismo token que aprovisionó previamente para ese dispositivo en particular, y solo para ese dispositivo.
Si el usuario restaura datos de respaldo a un nuevo dispositivo o reinstala el sistema operativo, el token del dispositivo cambia.