Notificaciones Push

A través de los servicios broker.pn.* se accede a las funcionalidades que provee Mat|r para recibir notificaciones push desde los dispositivos Android y iOS.

Las notificaciones push son una funcionalidad muy importante para el crecimiento de usuarios de tu aplicación. En toda aplicación para dispositivos móviles resulta de gran utilidad saber cuándo ocurre un evento relevante que le permita al usuario acceder a la app e interactuar en base a la información recibida.

En mat|r puedes configurar tus aplicaciones para que reciban notificaciones a través de cualquier servidor de notificaciones push, pero es especialmente sencillo configurarlo para utilizar los servicios de Firebase Cloud Messaging.

Esta funcionalidad introduce un nuevo modelo built-in Notification y un nuevo módulo, PushNotificationModule donde podremos sobreescribir métodos que responden a eventos del flujo de notificaciones.

Contenido

Métodos Públicos

void broker.pn.registerForPushNotifications()

Al llamar a este servicio se solicita los permisos necesarios para utilizar notificaciones push. El dispositivo intenta registrarse al servicio de notificaciones push:

  • En caso de registrarse exitosamente, se ejecuta la función callback onRegisterForRemoteNotificationsSuccess en la cual el desarrollador puede acceder al token del dispositivo que se necesita para enviar la notificación desde un servidor.
  • En caso de una falla en el proceso de registración, se ejecuta la función callback onRegisterForRemoteNotificationsFail en la cual el desarrollador puede recibir más información del error asociado.

Bool broker.pn.isEnabled()

Llamando a este servicio, el usuario puede identificar si la aplicación tiene activado el permiso para notificaciones push. Este permiso puede ser editado por el usuario desde los ajustes de la aplicación. En caso de tener activado dicho permiso, isEnabled() retornará true, en caso contrario retornará false.

void broker.pn.unregisterForPushNotifications()

Al invocar este servicio el dispositivo es desregistrado de FCM, por lo cual ya no recibirá notificaciones.

Módulo para Notificaciones Push

Definiendo un módulo con nombre PushNotificationModule, y agregando funciones como las que explicaremos a continuación se pueden recibir eventos e información del flujo de notificaciones.

Definición del módulo:

Module PushNotificationModule {

    void onRegisterForRemoteNotificationsSuccess(String deviceToken, String firebaseToken) {
        // code to manage successful registration
        // you can store the firebase token and device token
    }

    void onRegisterForRemoteNotificationsFail(String errorDetail) {
        // code to manage errors when registering    
    }
    
    void onNewPushNotificationReceived(Notification n) {
        // code to manage received notifications
    }
}

void onRegisterForRemoteNotificationsSuccess(String deviceToken, String firebaseToken)

Esta función es ejecutada cuando el proceso de registración del dispositivo ha sido exitoso. El primer parámetro es el token del dispositivo y el segundo el que viene dado por el framework de firebase. En Android ambos valores coinciden, puesto que firebase es el medio oficial de la plataforma. En iOS serán diferentes, el primer valor te servirá si quieres enviar notificaciones por otro medio que no utilice Firebase.

void onRegisterForRemoteNotificationsFail(String errorDetail)

Esta función es ejecutada cuando el proceso de registración falla. Ejemplo: error en los certificados configurados.

void onNewPushNotificationReceived(Notification n)

Esta función es ejecutada cuando se recibe una notificación y la aplicación está en primer plano.

Modelo built-in para Notificaciones

Model Notification {
    String title
    String body
    Map<String> metadata
}
  • title: título de la notificación
  • body: cuerpo de la notificación
  • metadata: datos extras enviados al dispositivo. Hay dos claves especiales que pueden ser recibidas dentro de la metadata: notification_title y notification_body usadas para algunos escenarios (ver Consideraciones por plataforma).

Ciclo de vida de la Aplicación con Notificaciones

Al introducir manejo de notificaciones a las Aplicaciones Mat|r es necesario considerar esto en el ciclo de vida de las mismas.

Dado que la aplicación puede tener 3 estados es necesario poder manejar las notificaciones en todas estas situaciones:

  • La aplicación no ha sido abierta. Las notificaciones son recibidas mediante OnInit
    OnInit(Notification n){
    	// …
    } 
    
  • Aplicación en segundo plano: está abierta pero no visible. Las notificaciones son recibidas mediante OnResume
    OnResume(Notification n){
    	// …
    }
    
  • Aplicación en primer plano: está abierta y es visible. Las notificaciones son recibidas mediante la función callback onNewPushNotificationReceived (ver Módulo para Notificaciones Push)

El siguiente cuadro presenta un resumen del comportamiento de las notificaciones según el estado de la aplicación. Se pueden hacer pruebas tanto ejecutando la aplicación desde el Viewer de Matr, o bien con la versión final de la aplicación publicada. Para esto debes descargar los proyectos Android y iOS desde tab Build App de la plataforma, estos proyectos se representan con nombre Standalone en la siguiente tabla:

Background Foreground Killed
Notification msg Muestra notification en Centro de Notificaciones.

Ambos modos: debe levantar la app y correr onResume(notification != null).

Viewer: Solo ejecuta esa lógica con la app abierta en modo visualización.

Ejecuta el callback: onNewPushNotificationReceived(Notification n) donde:
– n.title y n.body != null
– n.metadata == nullAmbos modos: debe levantar la app y correr onNewPushNotificationReceived(notification != null).
Muestra notification en Centro de Notificaciones.

Ambos modos: debe levantar la app.

Viewer: no muestra la app, solo levanta viewer (no tiene la info necesaria).

Standalone: inicializa la app con onInit(notification != null).

Data msg – Si setea notification_title y notification_body, muestra notification en Centro de Notificaciones.

– Sino, onNewPushNotificationReceived(Notification n) con n.title y n.body == null y n.metadata != null

onNewPushNotificationReceived(Notification n)
donde:
– n.title = data[notification_title]
– n.body = data[notification_body]
– n.metadata == data
– Si setea notification_title y notification_body, muestra notification en Centro de Notificaciones.

Observación: en iOS no hay garantias de que suceda (puesto que la app puede no ser despertada por el OS).

– Sino, Unsupported

Both Muestra notification en Centro de Notificaciones. Igual que Notification msg, pero n.metadata != null
n.title = title, n.body=body n.metadata = data
Igual que Notification msg

Enviar notificaciones en aplicaciones dedicadas utilizando Firebase

Para configurar las notificaciones push en una aplicación dedicada, se debe tener una cuenta de firebase y configurar la sección de Build App con las credenciales obtenidas de la cuenta creada. Puedes encontrar más información sobre cómo hacerlo >aquí.

Una vez que se tienen configuradas las credenciales de nuestra app, se puede obtener el proyecto para construir la aplicación dedicada descargandolo desde la sección ‘Build App’. El proyecto descargado está configurado para ser utilizado con la plataforma de Firebase y su respectiva cuenta.

Consideraciones de la plataforma iOS

Para el caso de iOS, ten en cuenta que las notificaciones push solo pueden ser recibidas por dispositivos reales y no por simuladores, por lo tanto, para probar la recepción de las mismas tendrás que correr tu aplicación en tu dispositivo. Puedes encontrar los pasos para realizarlo aquí.

Una vez que hayas descargado el proyecto Xcode como indica el tutorial y hayas configurado tu cuenta de desarrollador apple, verifica que el target de la aplicación se encuentre correctamente configurado para recibir notificaciones. Puedes hacerlo seleccionando el target ‘MatrTemplate’, en la pestaña ‘Capabilities’ como se indica en las siguientes imágenes:

En iOS, Firebase utiliza la interfaz APN del Servicio de Apple Push Notification (APN) para enviar mensajes de hasta 4 KB de tamaño a tu app, incluso cuando está en segundo plano. Para habilitar el envío de notificaciones necesitas generar un certificado desde tu cuenta de desarrollador apple, y subirlo a la configuración de tu aplicación Firebase, estos pasos puedes verlos en este tutorial.

Consideraciones de la plataforma Android

Para recibir notificaciones en tu aplicación, en el caso de Android primero debes correrla en un simulador o en un dispositivo y eso es todo, tu proyecto ya está configurado para recibir.

Enviar notificaciones desde la consola de Firebase a tu aplicación dedicada

Para enviar notificaciones desde la consola de firebase, debes acceder a https://console.firebase.google.com/. Luego, debes ingresar al proyecto creado anteriormente para obtener las credenciales de la aplicación. Una vez ingresado al respectivo proyecto, ve a la sección ‘Crecimiento’ y en la misma ingresa a ‘Cloud Messaging’.

En la primera vez, deberás presionar en ‘Send your first message’, donde se abrirá una pantalla para configurar la notificación que deseas enviar.

En la primer sección debes ingresar la información que mostrará la notificación, ‘Título de la notificación’ y ‘Texto de la notificación’ que se mostrará en los dispositivos que tengan instalada nuestra app.

Una vez definida la notificación, puedes enviarla a todos los dispositivos que ejecutan tu aplicación o a un dispositivo en particular. Para enviar la notificación a un dispositivo en particular, necesitas el ‘firebaseToken’ que se obtiene en el proceso de registro al ejecutar el broker service registerForPushNotifications() e identifica al dispositivo.

Teniendo el token, presiona en ‘Enviar mensaje de prueba’ y se abrirá una ventana en donde debes ingresar el token.

Puedes ingresar múltiples tokens y, finalmente, presionar en ‘Testear’ para enviar la correspondiente notificación a los correspondientes dispositivos que hayas ingresado.

Si deseas enviar una notificación a todos los dispositivos que se han registrado para recibir notificaciones de tu aplicación, en lugar de abrir la ventana anterior, presiona en ‘Siguiente’ y verás una pantalla como esta:

En esta sección debes elegir la aplicación que has configurado previamente, cuando creaste el proyecto firebase. Una vez seleccionada la app, presiona ‘Siguiente’ para configurar cuándo se enviará nuestra notificación.

Puedes enviarla de inmediato o programar una fecha y hora futura. Presionando ‘Siguiente’ y luego ‘Revisar’, se nos abrirá una ventana para confirmar el envío de la notificación.

Confirma los datos y presione en ‘Publicar’ para que la notificación sea enviada.

De esta manera, has enviado la primer notificación de tu aplicación y se habrá creado el panel que lista las notificaciones. En este panel, podrás ver las notificaciones enviadas y configurar nuevas notificaciones para tus aplicaciones mat|r.

Enviar Notificaciones desde el Modeller

Para enviar notificaciones push a nuestros dispositivos desde nuestro CDE, se tiene la sección de “Push Notifications”. La misma se encuentra en el panel lateral derecho y es la ultima opcion. Cuando entremos a esta sección, podremos visualizar la opción ‘test push notification’ y presionamos sobre la misma.

Se abrirá la siguiente ventana:

En la misma, se debe completar con los campos obligatorios. El primer campo si le damos check utilizara las credenciales de Firebase obtenidas en la sección Build App (solo si están previamente configuradas) para realizar las pruebas de notificaciones push cuando la aplicación esté en Standalone, sino no le damos check utilizará las credenciales por defecto de Mat|r estando la aplicación en Draft.

El segundo campo que debe ser completado es el ‘Device Firebase Token’, en este campo se debe ingresar el firebase token del dispositivo al que deseamos enviar la notificación push. Este token es obtenido a partir del broker service registerForPushNotifications() y que en cada dispositivo mat|r es diferente. Puedes consultar un tutorial de como obtener el “Device Firebase Token” para realizar el testeo de notificaciones push para tu aplicación si ingresamos a en “CLICK HERE”.

En tercer lugar se debe completar el campo ‘Notification Title’, este campo sirve para el título de la notificación que será mostrada en el dispositivo.

En cuarto lugar se debe completar el campo ‘Notification Body’, este campo sirve para definir el cuerpo de la notificación que se mostrar en el dispositivo.

Por último, podemos enviar información personalizada. Esto se podrá realizar en la opción ‘Custom Data’, agregando una clave (key) y un valor (value) y luego presionando en ‘ADD’. De esta manera, se podrá conformar un mapa de clave/valor que será enviado al dispositivo, y teniendo en cuenta que cada clave (key) no puede repetirse.

Finalmente, para enviar la notificación se presiona en el botón ‘SEND’ y la misma será enviada al dispositivo ingresado si es correcto el firebase token.