¿Cómo funcionan las notificaciones push de iOS?

98

¿Cómo se envían las notificaciones "push" de iOS a un dispositivo en particular sin que ese dispositivo necesite sondear un servidor?

Por ejemplo, digamos que he recibido un mensaje nuevo en Facebook. Facebook notifica a Apple que mi dispositivo debería recibir una notificación como tal. Pero, ¿cómo sabe Apple a qué dispositivo / IP enviar el mensaje?

Andy Hin
fuente
2
@Wain Estoy buscando una explicación detallada a nivel técnico. Ese artículo es de altísimo nivel. Entonces, ¿mi dispositivo mantiene una conexión abierta con los servidores push de Apple en todo momento?
Andy Hin
Estoy más familiarizado con Android push, pero normalmente, cuando instalas la aplicación, registra el dispositivo con una identificación única con Apple. Luego, cuando Facebook envíe un mensaje a Apple, Apple lo reenviará al ID único del dispositivo.
Panama Jack
6
@Pjack sí, pero con mi dispositivo cambiando constantemente diferentes torres de telefonía celular, diferentes redes wifi, ¿cómo sabe Apple la IP de mi identificación única?
Andy Hin
@whydna Gracias por hacer esta pregunta. Quería entender exactamente lo mismo. Creo que esto responde a mi pregunta aquí: stackoverflow.com/questions/18859732/…
MightyMouse
@AndyHin El sistema operativo del dispositivo (iOS) sabe qué servidores APN son válidos. El dispositivo se conecta a estos servidores y mantiene una conexión abierta. Es probable que esta conexión esté asociada con la identificación del dispositivo y otros metadatos (número de teléfono). Cuando es necesario "enviar" un mensaje, los APN encuentran la conexión correcta y la envían por esa conexión ya abierta. Entonces, los APN no intentan establecer una conexión con un dispositivo, siempre es el dispositivo el que abre esa conexión. Una conexión por dispositivo.
Todd

Respuestas:

49

Fue demasiado para mí poner un comentario así.

De la documentación.

El servicio de notificaciones push de Apple (APN) propaga notificaciones push a dispositivos que tienen aplicaciones registradas para recibir esas notificaciones. Cada dispositivo establece una conexión IP acreditada y encriptada con el servicio y recibe notificaciones a través de esta conexión persistente. Los proveedores se conectan con APN a través de un canal persistente y seguro mientras monitorean los datos entrantes destinados a sus aplicaciones cliente. Cuando llegan nuevos datos para una aplicación, el proveedor prepara y envía una notificación a través del canal a los APN, que envía la notificación al dispositivo de destino.

Sugiero leer la documentación para obtener más información y cómo usar y configurar. Todo esta ahí.

Notificaciones push

Panama Jack
fuente
Gracias por la respuesta.
MightyMouse
7
Entonces, ¿Apple mantiene una IP estática en su dispositivo?
CMCDragonkai
¡Me sorprendió cuando entendí que mi servidor tenía que enviar una notificación a APNS PARA CADA DISPOSITIVO OBJETIVO! :(
Vladimir
4
@CMCDragonkai El dispositivo establece la conexión, no el servidor.
Hitechcomputergeek
7
¿De modo que los dispositivos mantienen una conexión larga de polling / socket siempre con el servicio APN? Si ese es el caso, ¿cómo maneja el servicio APN tantas conexiones? Si un servidor puede contener 50k conexiones y siempre hay 500 millones de usuarios, el servicio necesita al menos 10000 servidores correctamente. ¿Es este un escenario práctico?
AV94
87

Cada dispositivo se puede actualizar con datos utilizando sus propios tokens de dispositivo únicos. Esta imagen lo explica todo. .

ingrese la descripción de la imagen aquí

Karan Alangat
fuente
¿Alguna idea de cuál es el uso del Device Token? ¿Se utiliza para cifrar la comunicación entre el servidor APNS y la aplicación o en otro lugar?
Mugen
1
@Mugen: APNS utiliza el token del dispositivo para identificar qué dispositivo debe reenviar la carga útil enviada por el proveedor.
D4ttatraya
@Karan - ¿Hay alguna distinción entre las notificaciones que son para un usuario (por ejemplo, "¡Oye, usuario, tienes un mensaje!") Y aquellas que están destinadas a activar una aplicación y decirle silenciosamente que realice un procesamiento en segundo plano.
Howiecamp
@Howiecamp Si está utilizando notificaciones automáticas, se le notificará cada vez que se reciba una notificación si la aplicación se está ejecutando. También se puede acceder a los detalles de la notificación activa cuando el usuario toca la notificación desde el centro de notificaciones e inicia la aplicación. Durante este tiempo puedes realizar los procesos que desees realizar.
Karan Alangat
@KaranAlangat, ¿Cómo se maneja el conteo de insignias aquí? ¿Cómo lo sabe el servidor?
GvSharma
22

Creé una infografía para explicar el flujo de trabajo de las notificaciones push. Espero que esto sea útil.

ingrese la descripción de la imagen aquí

Udit Agarwal
fuente
22

Descripción general de APN

El servicio de notificaciones push de Apple (APN) es la pieza central de la función de notificaciones remotas. Es un servicio robusto, seguro y altamente eficiente para que los desarrolladores de aplicaciones propaguen información a dispositivos iOS (e, indirectamente, watchOS), tvOS y macOS.

En el lanzamiento inicial de su aplicación en el dispositivo de un usuario, el sistema establece automáticamente una conexión IP acreditada, encriptada y persistente entre su aplicación y APN. Esta conexión permite que su aplicación realice la configuración para permitirle recibir notificaciones, como se explica en Configuración del soporte de notificación remota.

La otra mitad de la conexión para enviar notificaciones, el canal seguro y persistente entre un servidor de proveedor y APN, requiere la configuración en su cuenta de desarrollador en línea y el uso de certificados criptográficos proporcionados por Apple. Un proveedor es un servidor, que implementa y administra, que configura para trabajar con APN. La Figura 1-1 muestra la ruta de entrega de una notificación remota.

Figura 1-1 Entrega de una notificación remota de un proveedor a una aplicación

imagen: ../Art/remote_notif_simple.jpg

Con la configuración de notificaciones push completa en sus proveedores y en su aplicación, sus proveedores pueden enviar solicitudes de notificación a las APN. Los APN transmiten las cargas útiles de notificación correspondientes a cada dispositivo objetivo. Al recibir una notificación, el sistema entrega la carga útil a la aplicación apropiada en el dispositivo y administra las interacciones con el usuario.

Si llega una notificación para su aplicación con el dispositivo encendido pero con la aplicación no ejecutándose, el sistema aún puede mostrar la notificación. Si el dispositivo se apaga cuando los APN envían una notificación, los APN retienen la notificación y vuelven a intentarlo más tarde (para obtener detalles, consulte Calidad de servicio, Almacenamiento y reenvío y Notificaciones combinadas).

Responsabilidades del proveedor

Los servidores de su proveedor tienen las siguientes responsabilidades para participar con APN:

  • Recibir, a través de APN, tokens de dispositivo específicos de la aplicación, únicos a nivel mundial, y otros datos relevantes de instancias de su aplicación en los dispositivos de los usuarios Esto permite que un proveedor conozca cada instancia en ejecución de su aplicación.
  • Determinar, según el diseño de su sistema de notificación, cuándo es necesario enviar notificaciones remotas a cada dispositivo.
  • Crear y enviar solicitudes de notificación a APN, cada solicitud contiene una carga útil de notificación e información de entrega; Luego, los APN envían las notificaciones correspondientes a los dispositivos previstos en su nombre.

Para cada solicitud de notificación remota que envía un proveedor, debe:

  • Construya un diccionario JSON que contenga la carga útil de la notificación, como se describe en Creación de la carga útil de la notificación remota.
  • Agregue la carga útil, un token de dispositivo único a nivel mundial y otra información de entrega a una solicitud HTTP / 2. Para obtener información sobre tokens de dispositivo, consulte Confianza de conexión de APN a dispositivo y tokens de dispositivo. Para obtener información sobre el formato de solicitud HTTP / 2 y las posibles respuestas y errores de APN, consulte Comunicación con APN.
  • Envíe la solicitud HTTP / 2 a APN, incluidas las credenciales criptográficas en forma de token o certificado, a través de un canal seguro y persistente.
  • El establecimiento de este canal seguro se describe en Arquitectura de seguridad.

Usar varios proveedores

La Figura 1-2 muestra el tipo de red virtual que APN habilita para los dispositivos que ejecutan sus aplicaciones. Para manejar la carga de notificaciones, normalmente implementaría varios proveedores, cada uno con su propia conexión persistente y segura a APN. Cada proveedor puede enviar solicitudes de notificación dirigidas a cualquier dispositivo para el que el proveedor tenga un token de dispositivo válido.

Figura 1-2 Envío de notificaciones remotas de varios proveedores a varios dispositivos

imagen: ../Art/remote_notif_multiple.jpg

Calidad de servicio, almacenamiento y reenvío y notificaciones combinadas

El servicio de notificaciones push de Apple incluye un componente de calidad de servicio (QoS) que realiza una función de almacenamiento y reenvío. Si los APN intentan enviar una notificación y el dispositivo de destino está fuera de línea, los APN almacenan la notificación durante un período de tiempo limitado y la entregan cuando el dispositivo vuelve a estar disponible. Este componente almacena solo la notificación más reciente por dispositivo y por aplicación. Si un dispositivo está fuera de línea, enviar una solicitud de notificación dirigida a ese dispositivo hace que se descarte la solicitud anterior. Si un dispositivo permanece fuera de línea durante mucho tiempo, se descartan todas sus notificaciones almacenadas en APN.

Para permitir la fusión de notificaciones similares, puede incluir un identificador de colapso dentro de una solicitud de notificación. Normalmente, cuando un dispositivo está en línea, cada solicitud de notificación que envía a APN resulta en una notificación enviada al dispositivo. Sin embargo, cuando la clave apns-collapse-id está presente en el encabezado de su solicitud HTTP / 2, los APN fusionan las solicitudes cuyo valor para esa clave es el mismo. Por ejemplo, un servicio de noticias que envía el mismo título dos veces podría usar el mismo valor de identificador de colapso para ambas solicitudes. Luego, los APN fusionarían las dos solicitudes en una sola notificación para su entrega al dispositivo. Para obtener detalles sobre la clave apns-collapse-id.

Arquitectura de seguridad

Los APN refuerzan la validación y autenticación criptográficas de un extremo a otro mediante dos niveles de confianza: confianza en la conexión y confianza en el token del dispositivo.

La confianza de conexión funciona entre proveedores y APN, y entre APN y dispositivos.

La confianza del token del dispositivo funciona de un extremo a otro para cada notificación remota. Garantiza que las notificaciones se enruten solo entre los puntos de inicio (proveedor) y final (dispositivo) correctos.

Un token de dispositivo es una instancia de NSData opaca que contiene un identificador único asignado por Apple a una aplicación específica en un dispositivo específico. Solo los APN pueden decodificar y leer el contenido de un token de dispositivo. Cada instancia de aplicación recibe su token de dispositivo único cuando se registra con APN, y luego debe reenviar el token a su proveedor, como se describe en Configuración de la compatibilidad con notificaciones remotas. El proveedor debe incluir el token del dispositivo en cada solicitud de notificación de inserción que se dirija al dispositivo asociado; APN utiliza el token del dispositivo para garantizar que la notificación se envíe solo a la combinación única de aplicación y dispositivo para la que está destinada.

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, como se describe en Confianza de conexión de APN a dispositivo y Tokens de dispositivo. Para ver ejemplos de código, consulte Registro para recibir notificaciones remotas.

Para establecer sesiones TLS basadas en HTTP / 2 con APN, debe asegurarse de que haya instalado un certificado raíz de CA global de GeoTrust en cada uno de sus proveedores. Si un proveedor ejecuta macOS, este certificado raíz se encuentra en el llavero de forma predeterminada. En otros sistemas, este certificado puede requerir una instalación explícita. Puede descargar este certificado desde el sitio web de certificados raíz de GeoTrust. Aquí hay un enlace directo al certificado.

La Figura 1-3 ilustra el uso de la API del proveedor de APNs basada en HTTP / 2 para establecer la confianza y el uso de tokens de autenticación del proveedor JWT para enviar notificaciones.

Figura 1-3 Establecimiento y uso de la confianza de conexión de proveedor basada en token

imagen: ../Art/service_provider_ct.jpg

Como se muestra en la Figura 1-3, la confianza del proveedor basada en tokens funciona de la siguiente manera:

Su proveedor solicita una conexión segura con APN utilizando la seguridad de la capa de transporte (TLS), representada como la flecha etiquetada como "Inicio de TLS" en la figura.

Luego, los APN le dan a su proveedor un certificado de APN, representado por la siguiente flecha en la figura (etiquetada como "certificado de APN"), que su proveedor luego valida.

En este punto, se establece la confianza en la conexión y el servidor de su proveedor está habilitado para enviar solicitudes de notificación push remotas basadas en token a los APN. Cada solicitud de notificación que envíe su proveedor debe ir acompañada de un token de autenticación JWT, representado en la figura como la flecha etiquetada "Notificación de envío".

Los APN responden a cada envío, representado en la figura como la flecha etiquetada "Respuesta HTTP / 2".

Para obtener información específica sobre las respuestas que su proveedor puede recibir para este paso, consulte Respuesta HTTP / 2 de APN.

La Figura 1-4 ilustra el uso de un certificado SSL emitido por Apple para establecer la confianza entre un proveedor y las APN. A diferencia de la Figura 1-3, esta figura no muestra un envío de notificación en sí, sino que se detiene en el establecimiento de una conexión de Seguridad de la capa de transporte (TLS). En el esquema de confianza basado en certificados, las solicitudes de notificación de inserción no se autentican, pero se validan mediante el token de dispositivo adjunto.

Figura 1-4 Establecimiento de confianza en la conexión del proveedor basada en certificados

imagen: ../Art/service_provider_ct_certificate_2x.png

Como se muestra en la Figura 1-4, la confianza de proveedor a APN basada en certificados funciona de la siguiente manera:

Su proveedor solicita una conexión segura con APN utilizando la seguridad de la capa de transporte (TLS), representada como la flecha etiquetada como "Inicio de TLS" en la figura.

Luego, los APN le dan a su proveedor un certificado de APN, representado por la siguiente flecha en la figura (etiquetada como "certificado de APN"), que su proveedor luego valida.

Luego, su proveedor debe enviar su certificado de proveedor provisto por Apple (que obtuvo previamente de su cuenta de desarrollador en línea, como se explica en "Generar un certificado SSL de cliente de APNs universal" en la Ayuda de Xcode) de regreso a APN, representado como la flecha etiquetada "Proveedor certificado."

Luego, APN valida su certificado de proveedor, confirmando así que la solicitud de conexión se originó en un proveedor legítimo y establece su conexión TLS.

En este punto, se establece la confianza de la conexión y el servidor de su proveedor está habilitado para enviar solicitudes de notificación de inserción remotas basadas en certificados a las APN.

Tokens de dispositivo y confianza de conexión de APN a dispositivo

La confianza entre los APN y cada dispositivo se establece automáticamente, sin la participación de su aplicación, como se describe en esta sección.

Cada dispositivo tiene un certificado criptográfico y una clave criptográfica privada, proporcionada por el sistema operativo en la activación inicial del dispositivo y almacenada en el llavero del dispositivo. Durante la activación, los APN autentican y validan la conexión al dispositivo, basándose en el certificado y la clave, como se muestra en la Figura 6-5.

Figura 1-5 Establecimiento de confianza en la conexión entre un dispositivo y APN

imagen: ../Art/service_device_ct.jpg

Como se muestra en la Figura 1-5, la confianza de APN a dispositivo funciona de la siguiente manera:

  • La negociación de confianza comienza cuando el dispositivo inicia una conexión TLS con APN, como se muestra en la flecha superior de la figura.
  • APNs devuelve un certificado de APN al dispositivo.
  • El sistema operativo valida este certificado y luego, como se muestra en la flecha "Certificado del dispositivo", envía el certificado del dispositivo a las APN.
  • Finalmente, como lo indica la flecha inferior en la figura, las APN validan el certificado del dispositivo, estableciendo confianza.
  • Con una conexión TLS establecida entre APN y el dispositivo, las aplicaciones en el dispositivo pueden registrarse con APN para recibir sus tokens de dispositivo específicos de la aplicación para notificaciones remotas. Para obtener detalles y ejemplos de código, consulte Registro para recibir notificaciones remotas en Configuración del soporte de notificaciones remotas.

Después de recibir el token del dispositivo, una aplicación debe conectarse al proveedor asociado de la aplicación y reenviarle el token. Este paso es necesario porque un proveedor debe incluir el token del dispositivo más adelante, cuando envía una solicitud de notificación, a los APN, apuntando al dispositivo. El código que escribe para reenviar el token también se muestra en Registro para recibir notificaciones remotas.

Si un usuario está activando un dispositivo por primera vez, o si APN ha emitido un nuevo token de dispositivo, el proceso es similar y se muestra en la Figura 6-6.

Figura 1-6 Administrar el token del dispositivo

imagen: ../Art/token_generation.jpg

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, como se muestra en la flecha superior. Si la aplicación ya está registrada y el token del dispositivo específico de la aplicación no ha cambiado, el sistema devuelve rápidamente el token existente a la aplicación y este proceso salta al paso 4.

Cuando se necesita un nuevo token de dispositivo, los APN generan 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.

IMPORTANTE

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

Cuando su proveedor envía una solicitud de notificación automática a las APN, incluye un token de dispositivo que identifica una combinación única de aplicación y dispositivo. Este paso se muestra en la flecha "Token, Payload" entre el proveedor y los APN en la Figura 6-7. APNs descifra el token para asegurar la validez de la solicitud y determinar el dispositivo de destino. Si APN determina que el remitente y el destinatario son legítimos, envía la notificación al dispositivo identificado.

Figura 1-7 Ruta de notificación remota del proveedor al dispositivo

imagen: ../Art/token_trust.jpg

Una vez que el dispositivo recibe la notificación (y después del paso final que se muestra en la Figura 1-7), el sistema envía la notificación remota a su aplicación.

Ref: Servicio de notificaciones push de Apple

Ahora, mire aquí para comprender el flujo técnico: ¿Cómo implementar el Servicio de notificaciones push de Apple en la aplicación iOS?

Krunal
fuente
7
¡Jaja, literalmente, simplemente pegaste toda la entrada de Apple Docs en SO!
Matt Mc
@MattMc - Sí, era un novato en SO, cuando publiqué esta respuesta y en ese momento publiqué un enlace a APNS pero un enlace no se considera una respuesta en SO, así que hice esto .... :)
Krunal
1
De hecho, es cierto, mucho mejor que la respuesta de solo un enlace;)
Matt Mc
14

El dispositivo no sigue sondeando el servidor para las notificaciones push.

Para hacerlo simple, considere que un iPhone está conectado a Internet. Al conectarse a Internet, el iPhone establece una conexión con el servidor de notificaciones push de Apple, esta conexión es una conexión abierta, lo que significa que los datos se pueden enviar al iPhone desde el servidor en el momento en que los datos llegan al servidor.

Apple no utiliza el protocolo HTTP para notificaciones push, pero si comprende el protocolo HTTP, es una metodología casi similar.

http://en.wikipedia.org/wiki/Push_technology#HTTP_server_push

user4248688
fuente
¿Qué usan si no es http?
Howiecamp
2

Hay una muy buena explicación de las notificaciones push en este artículo .

En iOS, las aplicaciones no pueden hacer mucho en segundo plano. Las aplicaciones solo pueden realizar un conjunto limitado de actividades, por lo que se conserva la duración de la batería.

Pero, ¿qué pasa si sucede algo interesante y desea que el usuario sepa sobre esto, incluso si no está usando su aplicación actualmente?

Tarek
fuente