que notification apple ios iphone apple-push-notifications

ios - notification - Servicio de notificaciones push de Apple: los tokens de dispositivos múltiples son válidos para el mismo dispositivo



push notifications ios swift (4)

"Cada vez que el proceso se repite, obtenemos un nuevo token de registro distinto".

¿Está usted seguro de eso? ¿100% seguro?

En mi experiencia, si desinstalas la aplicación y la vuelves a instalar, el 99,99% de las veces obtendrás el mismo token de dispositivo. Si obtiene un nuevo token de dispositivo único cada vez que desinstala y luego reinstala la aplicación, eso es algo que nunca he visto en varios años y en varias aplicaciones. Por lo tanto, tal vez algo extraño está sucediendo.

Hay instancias en las que se generará un nuevo token de dispositivo, pero son raros, ¿está seguro de que no hará otra cosa entre la desinstalación / reinstalación?

PD: hay un token de dispositivo diferente para compilaciones de producción y lanzamiento, elimine este factor de sus observaciones, es decir, asegúrese de que no está haciendo algo como instalar una compilación prod, luego desinstalarla y reinstalar una compilación dev o viceversa. Incluso si está haciendo esto, la cantidad total de tokens dev únicos todavía sería solo dos (aunque solo uno es válido por entorno).

Para que podamos enviar notificaciones a los usuarios de iOS, se produce el siguiente flujo: un usuario instala nuestra aplicación, se registra con APNS y envía el token de registro a nuestro servidor para usarlo más tarde para enviar notificaciones.

El proceso anterior se repite para cada dispositivo en el que el usuario instala nuestra aplicación; nos gustaría que reciban notificaciones en todos sus dispositivos.

Además de esto, el proceso se repite cuando un usuario desinstala nuestra aplicación y la reinstala en el mismo dispositivo.

Cada vez que el proceso se repite, obtenemos un nuevo token de registro distinto. Sin embargo, todo está muy bien, notamos que solo recientemente, cuando nuestra aplicación se desinstala, el token del dispositivo sigue siendo válido después de que se reinstala y se genera un nuevo token. Entendemos que puede existir un solo token único para un dispositivo.

La documentación de Apple parece sugerir esto también ( https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html#//apple_ref/doc/uid/TP40008194-CH100-SW12 )

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.

Cuando se genera un token nuevo después de la reinstalación y se envía a nuestro backend, tenemos dos tokens de dispositivo que apuntan al mismo dispositivo y, como resultado, enviamos notificaciones múltiples a ese dispositivo. ¿Estamos malentendiendo la documentación? Si es así, ¿cuál es la forma típica de lidiar con el escenario de reinstalación?

¡Gracias!


Acabamos de hacer una prueba aquí. En nuestro dispositivo de prueba iOS 8.4.1 después de volver a instalar nuestra aplicación recibimos el mismo token, mientras que en iOS 9.1 siempre recibimos un token nuevo después de la reinstalación. Esto no sería un problema si APNS invalida los tokens de dispositivo más antiguos, pero por lo que puedo decir, no es así. El resultado es que estamos enviando notificaciones duplicadas a nuestros usuarios al mismo dispositivo. Tal vez lleva algún tiempo invalidar el token más antiguo?

Decidimos hacer una reparación del lado del servidor para esto y eliminar tokens duplicados para un usuario de nuestra base de datos. No es una solución buena y permanente, sino una solución a corto plazo para nosotros, ya que nuestros usuarios usan la aplicación generalmente en un solo dispositivo.


Sí, estoy viendo un único dispositivo con la misma aplicación (mi aplicación), que ha recibido APNS diferentes durante su corta vida útil, muchos de los cuales todavía pueden recibir notificaciones de inserción (del servidor APNS de producción).

La solución más fácil sería tener nuestro servicio de envío APNS de fondo para que solo cumpla con el último token de APNS recibido. Esto es posible, suponiendo que haya otra clave principal que sea exclusiva de cada dispositivo iOS. Bueno, dado que UUID ya no está disponible, entonces debemos confiar en el ID del vendedor de Apple. Ese problema con el ID del vendedor de Apple es que ese valor también puede cambiar con el tiempo, así que asegúrese de dar cuenta de eso.

Actualmente solo enviamos notificaciones automáticas a dispositivos que tienen nuestra identificación de usuario / miembro única. Esto es conocido por nuestra aplicación, una vez que un usuario inicia sesión en nuestra aplicación. Entonces, podríamos usar nuestra identificación de miembro / usuario, pero si un miembro / usuario tiene múltiples dispositivos, eso significa que si usamos el último valor de token APNS como el que gana, entonces el mismo miembro NO podría tener múltiples dispositivos iOS recibiendo notificaciones push (creo que iPad y iPhone, bastante comunes en estos días).

Entonces, dicho esto, cuando la alta gerencia quiere enviar notificaciones automáticas a dispositivos en los que ningún miembro / usuario único se haya registrado, existe el riesgo de que se crucen las transmisiones.


Tenemos el mismo problema que encontramos 2 tokens de dispositivo válidos para 1 dispositivo. Sin embargo, cuando intentamos verificar que "la desinstalación y la reinstalación generarían un nuevo token del dispositivo, y el token del dispositivo anterior sigue siendo válido", obtuvimos el resultado contrario. A saber, se generó el token del nuevo dispositivo, pero el toke anterior del dispositivo se volvió inválido. Lo verifiqué el 3/9/2016 y el 3/10/2016.

No estoy seguro si Apple ha solucionado este error parcialmente :

a) cuando la aplicación se desinstala y vuelve a instalar a partir de ahora, el dispositivo viejo Retirada no es válido. (sin nuevos problemas)

b) los tokens de dispositivo válidos actualmente continuarán siendo válidos. (los problemas antiguos no se pueden solucionar, el dispositivo aún recibirá notificaciones múltiples de cada token de dispositivo válido)

Parece que tendremos que usar "identifierForVendor" para distinguir un dispositivo único: Limpiar nuestra tabla de registro (y mantener el último deviceToken solamente) si vemos que 2 deviceTokens comparten el mismo identificador para ForVendor.