Las notificaciones PUSH en cualquier sistema operativo móvil, nos permitirá comunicarnos de una manera asíncrona con los usuarios de nuestra aplicación. Para ello, desde el servidor que aloje nuestros aplicativos, deberemos de ser capaces de invocar a los servicios de los diferentes diseñadores de sistemas operativos móviles.
En esta primera parte explicaremos cómo debemos trabajar de manera abstracta con los servicios de notificaciones PUSH, para que, en un segundo artículo, podamos especificar cómo realizar esta comunicación a través de aplicaciones descritas en .NET Framework 4.7.
Las notificaciones push se basan en el envío, desde el servidor, de una notificación que deberá de llegar a un dispositivo. Para ello, el servidor deberá de registrar el identificador del dispositivo asociado al usuario que ha iniciado la sesión, para poder categorizar el envío de una notificación.
El registro por entorno dependerá si hemos firmado la aplicación con un certificado de desarrollo o de producción, y si estamos ejecutándola implementada directamente en el dispositivo o no.
Flujo de envío de una notificación.
El envío de una notificación a un dispositivo de iOS requerirá las siguientes partes:
- Token JWT de identificación del equipo.
- Identificador del aplicativo.
- Identificador del dispositivo de destino.
- Características de la notificación.
- Datos de la notificación.
Generación de un token de identificación del equipo.
Para identificar el proveedor de la notificación, Apple requiere de la generación de un token con las siguientes características.
Cabecera:
- alg: Algoritmo con el que se ha firmado el token. En el caso de Apple deberemos de firmarlo con un algoritmo de tipo ECDSA calculado con curva elíptica con una profundidad de 256 bits (ES256). Por lo cual, deberá de ser ES256 y deberemos de elegir una librería que permita el firmado con un certificado (clave generada dentro del portal del desarrollador de Apple**).
- kid: Este campo será el identificador de la clave que hayamos generado dentro del portal del desarrollador de Apple**.
Payload:
- iss: Identificador del equipo de trabajo de nuestra licencia. Habitualmente lo encontraremos en la ruta del navegador o en la parte de membresía de nuestra cuenta de desarrollador:
- iat: Momento de generación del token, en segundos desde el 1 de enero de 1970 en hora UTC 0.
Ejemplo de token generado:
Cómo generar una clave de envío.
Las claves de envío las podremos generar a través del portal de administración de la licencia del desarrollador de Apple. Tendremos que tener en cuenta que esta clave nos servirá para todas las aplicaciones del equipo, y solo se podrá descargar en el momento de la creación. Como máximo podremos generar dos para este tipo.
Pasos a seguir:
1. Generación de una nueva clave en el área de claves.
2. Definir como servicio de clave el servicio APNs.
Una vez descargada la clave, podremos adjuntarla al proyecto que va a enviar las notificaciones.
Anatomía de una llamada de notificación.
URL’s de destino:
Dev: https://api.development.push.apple.com/3/device/{identificador-dispositivo}
Pro: https://api.push.apple.com/3/device/{identificador-dispositivo}
Verbo de acción: POST.
Versión HTTP: 2.0
Cabeceras:
Authorization: Bearer basada en token. Por ejemplo:
Bearer eyJhbGciOiJFUzI1NiIsImtpZCI6Ijc4TEc5MzZCRDUifQ.eyJpc3MiOiIyQzNFV1hONkVSIiwiaWF0IjoxNTI0NDExMTU5fQ.tkOYe8kdKra3-KT4o-9QMNnIFj53BJFiUCbKg27oZ_EwLRmk8XndmWF-iUHjRUDa91UL8abafj12scTViAnA4w
apns-id: Opcional, identificador GUID de la notificación. Si no lo especificamos, el servidor nos traerá uno de vuelta autogenerado.
apns-topic: Identificador de la aplicación, por ejemplo com.quelinka.xamarin.
apns-expiration: Tipo de prioridad de la notificación, se podrán configurar valores de tipo 5 (apropiado a configuración energética del dispositivo) o 10 (siempre se va a enviar). Habitualmente si queremos que llegue; 10. Más detalle en https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html#//apple_ref/doc/uid/TP40008194-CH11-SW1
Content-Type: Literal de application/json.
Cuerpo:
Objeto de tipo aps, basado en las claves descritas en https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html#//apple_ref/doc/uid/TP40008194-CH17-SW1
Ejemplo básico:
{«aps»:{«alert»:»mensaje»}}
Deja un comentario