Xojo: Notificaciones Remotas en iOS

A continuación encontrarás, traducida al castellano, el artículo que ha sido publicada originalmente en el blog de Xojo en inglés y escrito por Greg O’Lone. Puedes encontrar el artículo original aquí.

El pasado otoño, coincidiendo con la publicación de Xojo 2020r2, añadimos el framework MobileNotifications para enviar y gestionar notificaciones locales de usuario en tus apps iOS, basadas tanto en la hora como en la ubicación.

Dicha versión también incluía la capacidad de recibir y procesar notificaciones remotas enviadas mediante el servicio de Notificaciones Remotas Push de Apple (APNs), pero tal y como hemos comprobado muchos de nosotros, configurar e implementar la infraestructura para enviar notificaciones remotas no es con frecuencia algo sencillo… hasta ahora.

A partir de Xojo 2021r2, los usuarios con un servidor Xojo Cloud pueden desplegar apps web que conecten directamente con el servicio de Notificaciones Push de Apple, utilizando para ello una API Xojo que resulta más sencilla para el usuario.

Lo que necesitas

Una app iOS que esté configurada para aceptar notificaciones remotas.

Un Certificado de Apple para notificaciones push. Puedes obtenerlo desde tu panel de control en el sitio web de Apple Developer en este enlace, bajo la sección “Certificates, Indentifiers & Profiles”. Cuando lo hagas querrás anotar tu identificador de cuenta Apple (en la esquina superior derecha de la ventana) y el Key ID del certificado ubicado en los detalles de la clave. Actualmente, ambos son códigos alfanuméricos de 10 caracteres.

Un servidor Xojo Cloud. En función de tus necesidades, incluso un servidor pequeño servirá.

Enviar una Notificación Remota Básica

Lo primero que tendrás que hacer es añadir el certificado de tus APN al servidor Xojo Cloud. Puedes hacerlo conectando al Panel de Control de Xojo Cloud y haciendo clic en la pestaña Options. Aquí encontrarás un enlace que dice “Manage APNs Certificates“. Al hacer clic sobre él te llevará a un diálogo que te permitirá añadir y eliminar certificados de APNs para un equipo.

Enviar notificaciones remotas es un proceso relativamente sencillo, pero necesitas algo de infraestructura. El proceso se produce generalmente así:

  • En tu aplicación iOS encargada de recibir las notificaciones remotas tendrás que solicitar permiso para mostrarlas (en el caso de que las notificaciones sean visibles para el usuario) y registrar luego la aplicación para las notificaciones remotas. Cuando lo haces obtendrás un token global codificado en hexadecimal que identifica a dicho dispositivo para tu app.
  • Este identificador debe ser enviado al servidor de notificaciones junto con cualquier información que necesites para determinar el tipo de usuario del que se trata. Este identificador puede cambiar de vez en cuando, de forma que debes solicitarlo cada vez que se ejecute tu app y enviarlo a tu servidor cuando cambie.

En tu app Xojo Cloud, el envío de una o más notificaciones es relativamente fácil. Tendrás que crear dos objetos:

  • Una instancia de XojoCloud.RemoteNotifications.DeliveryOptions que es donde pondrás el Identificador de Aplicación de la aplicación iOS a la que se enviará, el identificador de la cuenta Apple y el Key ID del certificado.
  • Esta clase también define cuándo expirarán los mensajes enviados, su prioridad y su tipo. Por cada uno de los mensajes enviados necesitarás una instancia de XojoCloud.RemoteNotifications.Message, el cual define el contenido del mensaje.

Tu código puede tener un aspecto similar a este:

// Configurar las opciones de envío
Var deliveryOpts As New XojoCloud.RemoteNotifications.DeliveryOptions(kAppID, kAPNSKeyID, kAppleTeamID)

// Configurar un mensaje
Var message As New XojoCloud.RemoteNotifications.Message
message.alertTitle = "Bethany's Bagels – Sale Today!"
message.alertBody = "Today Only – Buy one bagel, get one 50% off!"
message.badge = 1
message.soundName = "default"

// Asumiendo que este RowSet contiene todos los tokens del dispositivo al que deseas enviar:
Var rs as RowSet = db.SelectSQL(kQueryToGetDeviceTokens)
While Not rs.AfterLastRow
XojoCloud.RemoteNotifications.SendAppleNotification(message, deliveryOpts, rs.Column("token").StringValue)
rs.MoveToNextRow
Wend
rs.close

Enviar Notificaciones con respuesta de APNs

La segunda signatura de SendAppleNotification te permite obtener una respuesta del servicio de Notificaciones Push de Apple, incluyendo situaciones como cuando el token de un dispositivo ya no es válido, lo cual puede ocurrir si el usuario desactiva las notificaciones o borra tu aplicación de su dispositivo.

Dado que el envío de mensajes es asíncrono, tendrás que definir un método callback e incluir un apuntador a dicho método cuando invoques SendappleNotification, como en este caso:

// Firma para el método callback
Sub CallbackMethod(MessageID as String, error as RuntimeException)

Cuando pasas la dirección del método callback, SendAppleNotification devolverá un identificador único de mensaje, de modo que si se invoca al callback podrás identificar qué notificación ha fallado.

Var messageID as String
messageID = XojoCloud.RemoteNotifications.SendAppleNotification(message, deliveryOpts, rs.Column("token").StringValue, AddressOf CallbackMethod)

Los posibles códigos de respuesta están definidos aquí.

Uso Avanzado

El Framework de Xojo cubre una amplia porción de las capacidades encontradas en el servicio de Notificaciones Push de Apple, pero Apple está añadiendo nuevas capacidades de forma constante.

Además de los dos métodos descritos anteriormente, hay otros dos métodos que pueden recibir un JSONItem en vez de un objeto XojoCloud.RemoteNotifications.Message. Al usar este método puedes definir la carga (payload) del mensaje en el que se utilizan características que aún no se han añadido al framework de Xojo.

La documentación sobre el payload JSON puede encontrarse en este enlace.

Demo

Este es un vídeo breve en el que se muestra el envío de una notificación remota desde un servidor Xojo Cloud en el centro de datos de la ciudad de New York a un iPhone situado en mi casa en Carolina del Norte.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *