mail - ¿Cómo funcionan las notificaciones push de iOS?
notificaciones mail iphone (7)
¿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 nuevo mensaje en Facebook. Facebook notifica a Apple que mi dispositivo debería recibir una notificación como tal. Pero, ¿cómo sabe Apple qué dispositivo / IP debe enviar el mensaje?
Descripción de APNs
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 los APN. Esta conexión permite que su aplicación realice la configuración para que pueda recibir notificaciones, tal como se explica en Configuración del soporte de notificación remota.
La otra mitad de la conexión para enviar notificaciones (el canal persistente y seguro entre un servidor proveedor y APN) requiere configuración en su cuenta de desarrollador en línea y el uso de certificados criptográficos suministrados 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 para una notificación remota.
Figura 1-1 Entrega de una notificación remota de un proveedor a una aplicación
Con la configuración de notificación push completa en sus proveedores y en su aplicación, sus proveedores pueden enviar solicitudes de notificación a APN. Los APN transmiten las cargas de notificación correspondientes a cada dispositivo de destino. Al recibir una notificación, el sistema entrega la carga a la aplicación apropiada en el dispositivo y gestiona las interacciones con el usuario.
Si llega una notificación para su aplicación con el dispositivo encendido pero sin que la aplicación se esté ejecutando, el sistema aún puede mostrar la notificación. Si el dispositivo se apaga cuando los APN envían una notificación, los APN se aferran a la notificación y lo intentan más tarde (para más detalles, consulte Calidad de servicio, almacenamiento y reenvío y notificaciones combinadas).
Responsabilidades del proveedor
Sus servidores de proveedores tienen las siguientes responsabilidades para participar con APN:
- Recibir, a través de APN, tokens de dispositivo específicos de la aplicación, únicos en el mundo, y otros datos relevantes de las instancias de su aplicación en los dispositivos del usuario. Esto le permite a un proveedor saber sobre cada instancia en ejecución de su aplicación.
- Determinar, de acuerdo con el diseño de su sistema de notificación, cuándo se deben enviar notificaciones remotas a cada dispositivo.
- Crear y enviar solicitudes de notificación a APN, cada solicitud contiene una carga de notificación e información de entrega; A continuación, APN entrega 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 notificación remota.
- Agregue la carga útil, un token de dispositivo único en el mundo y otra información de entrega a una solicitud HTTP / 2. Para obtener información acerca de los tokens de dispositivo, consulte Fichas de confianza y tokens de dispositivo APN a 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 persistente y seguro.
- El establecimiento de este canal seguro se describe en Arquitectura de seguridad.
Uso de proveedores múltiples
La Figura 1-2 muestra el tipo de red virtual que habilita APN para los dispositivos que ejecutan sus aplicaciones. Para manejar la carga de notificaciones, normalmente implementaría múltiples proveedores, cada uno con su propia conexión segura y persistente a APN. Cada proveedor puede enviar solicitudes de notificación dirigidas a cualquier dispositivo para el cual el proveedor tenga un token de dispositivo válido.
Figura 1-2 Envío de notificaciones remotas de múltiples proveedores a múltiples dispositivos
Calidad de servicio, Notificaciones de almacenamiento y envío y Coalesced
El servicio de notificación de Apple Push incluye un componente de calidad de servicio (QoS) que realiza una función de almacenar y reenviar. Si los APN intentan entregar una notificación y el dispositivo de destino está fuera de línea, los APN almacenan la notificación por 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, al enviar una solicitud de notificación dirigida a ese dispositivo, se descarta la solicitud anterior. Si un dispositivo permanece fuera de línea durante un tiempo prolongado, todas las notificaciones almacenadas en APN se descartan.
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 da como resultado una notificación entregada al dispositivo. Sin embargo, cuando la clave apns-collapse-id está presente en su encabezado de solicitud HTTP / 2, las 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. Los APN luego unirían las dos solicitudes en una única notificación para la entrega al dispositivo. Para detalles sobre la clave apns-collapse-id.
Arquitectura de seguridad
Los APN imponen la validación y autenticación criptográfica de extremo a extremo utilizando dos niveles de confianza: confianza de conexión y confianza de token de dispositivo.
La confianza de conexión funciona entre proveedores y APN, y entre APN y dispositivos.
La confianza del token del dispositivo funciona de principio a fin para cada notificación remota. Asegura que las notificaciones se enruten solo entre los puntos de inicio (proveedor) y final (dispositivo) correctos.
Un token de dispositivo es una instancia opaca de NSData 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 del soporte de notificación remota. El proveedor debe incluir el token del dispositivo en cada solicitud de notificación de inserción dirigida al dispositivo asociado; APN usa el token del dispositivo para garantizar que la notificación se entregue solo a la combinación única de dispositivo y aplicación para la que está destinado.
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 ejemplos de código, vea Registrarse para recibir notificaciones remotas.
Para establecer sesiones de TLS basadas en HTTP / 2 con APN, debe asegurarse de que esté instalado un certificado raíz de CA GeoTrust Global en cada uno de sus proveedores. Si un proveedor ejecuta macOS, este certificado raíz está 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 APN basado en HTTP / 2 para establecer la confianza y el uso de tokens de autenticación del proveedor JWT para el envío de notificaciones.
Figura 1-3 Establecimiento y uso de confianza de conexión de proveedor basada en token
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 seguridad de capa de transporte (TLS), representada como la flecha con la etiqueta "Iniciación TLS" en la figura.
A continuación, APN le da a su proveedor un certificado APNs, representado por la flecha siguiente en la figura (etiquetada como "certificado APN"), que luego valida su proveedor.
En este punto, se establece la confianza de conexión y su servidor de proveedor está habilitado para enviar solicitudes de notificaciones automáticas remotas basadas en tokens a APN. Cada solicitud de notificación que envía su proveedor debe ir acompañada de un token de autenticación JWT, representado en la figura como la flecha con la etiqueta "Notificación push".
Los APN responden a cada impulso, representado en la figura como la flecha etiquetada como "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 APN. A diferencia de la Figura 1-3, esta figura no muestra un impulso de notificación en sí mismo, sino que se detiene al establecer una conexión de Seguridad de la capa de transporte (TLS). En el esquema de confianza basado en certificado, las solicitudes de notificación automática no se autentican, pero se validan con el token de dispositivo adjunto.
Figura 1-4 Establecimiento de confianza de conexión de proveedor basada en certificado
Como se muestra en la Figura 1-4, la confianza de proveedor a APN basada en certificado funciona de la siguiente manera:
Su proveedor solicita una conexión segura con APN utilizando seguridad de capa de transporte (TLS), representada como la flecha con la etiqueta "Iniciación TLS" en la figura.
A continuación, APN le da a su proveedor un certificado APNs, representado por la flecha siguiente en la figura (etiquetada como "certificado APN"), que luego valida su proveedor.
Su proveedor debe enviar su certificado de proveedor provisto por Apple (que ha obtenido previamente de su cuenta de desarrollador en línea, como se explica en "Generar un certificado SSL de cliente APN universal" en la Ayuda de Xcode) a APNs, representado como la flecha con la etiqueta "Proveedor certificado."
Luego, APN valida su certificado de proveedor y confirma 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 conexión y su servidor proveedor está habilitado para enviar solicitudes de notificaciones automáticas remotas basadas en certificados a APN.
Token de dispositivo y confianza de conexión de APN a dispositivo
La confianza entre 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, según el certificado y la clave, como se muestra en la Figura 6-5.
Figura 1-5 Establecimiento de confianza de conexión entre un dispositivo y APN
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.
- APN devuelve un certificado APN al dispositivo.
- El sistema operativo valida este certificado y luego, como se muestra en la flecha "Certificado de dispositivo", envía el certificado del dispositivo a APN.
- Finalmente, como lo indica la flecha inferior en la figura, APNs valida 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 los tokens de dispositivo específicos de la aplicación para notificaciones remotas. Para obtener detalles y ejemplos de código, consulte Registrarse para recibir notificaciones remotas en Configuración de soporte de notificación remota.
Después de recibir el token del dispositivo, una aplicación debe conectarse al proveedor asociado de la aplicación y reenviar el token. Este paso es necesario porque un proveedor debe incluir el token del dispositivo más tarde cuando envía una solicitud de notificación a las APN, dirigidas al dispositivo. El código que escribe para reenviar el token también se muestra en Registrarse 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 Gestión del token del dispositivo
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, 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, 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.
IMPORTANTE
Los tokens de dispositivos APN son de longitud variable. No codifique su tamaño.
Cuando su proveedor envía una solicitud de notificación push a APN, incluye un token de dispositivo que identifica una combinación única de dispositivo y aplicación. Este paso se muestra en la flecha "Token, carga útil" entre el proveedor y los APN en la Figura 6-7. APN descifra el token para garantizar la validez de la solicitud y determinar el dispositivo de destino. Si los APN determinan que el remitente y el destinatario son legítimos, entonces envía la notificación al dispositivo identificado.
Figura 1-7 Ruta de notificación remota de proveedor a dispositivo
Una vez que el dispositivo recibe la notificación (y luego del paso final que se muestra en la Figura 1-7), el sistema reenvía la notificación remota a su aplicación.
Ref .: Apple Push Notification Service
Ahora, mira aquí para entender el flujo técnico: ¿Cómo implementar el servicio de notificaciones push de Apple en la aplicación iOS?
Cada dispositivo se puede actualizar con datos utilizando sus propios tokens de dispositivos únicos. Esta imagen explica todo. .
Configurar la notificación de inserción de iOS en la aplicación de iOS, haga clic aquí
El dispositivo no sigue sondeando el servidor para las notificaciones push.
Para hacerlo simple, considera que un iPhone está conectado a internet. Al conectarse a Internet, iPhone establece una conexión con el servidor de Notificaciones Push de Apple. Esta conexión es abierta, lo que significa que los datos pueden enviarse al iPhone desde el servidor en el momento en que los datos llegan al servidor.
Apple no usa 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
Fue demasiado para mí poner un comentario así.
De la documentación.
El servicio de notificaciones push de Apple (APN) propaga las notificaciones automáticas a los 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 APN a través del canal, que envía la notificación al dispositivo de destino.
Sugiero leer la documentación para obtener más información y cómo usarla y configurarla. Está todo allí.
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 hacer un conjunto limitado de actividades, por lo que se conserva la vida útil de la batería.
Pero, ¿qué pasa si sucede algo interesante y desea que el usuario lo sepa, incluso si actualmente no está utilizando su aplicación?