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
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
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
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
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
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
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
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?