Como hacer Tracking desde una Silent Notification en Aplicaciones Android

Unofficial Content

En este artículo se mostrara la manera de obtener la localización de un dispositivo, que tiene instalada nuestra aplicación móvil, desde una Silent Notification utilizando el proveedor One Signal.

Paso 1

Configurar las Push Notifications, es importante configurar Google Cloud Messaging para Android.

Paso 2

Crear un evento en el objeto main SD para obtener la ubicación del dispositivo, el mismo  no está asociado a ningún control.

Supongamos que necesitamos guardar en la base de datos la ubicación para tener un historial del tracking por dispositivo, para ello utilizamos un código como este:

Event 'GetLocation'
    Composite
        &ClientInformationID = ClientInformation.Id
        &GeoLocationInfo = GeneXus.Common.Geolocation.GetMyLocation(0, 0, false, true)
        SaveLocation(&ClientInformationID,&GeoLocationInfo)
    EndComposite
EndEvent

Donde &ClientInformationID es de tipo Varchar que recupera el Id de la API ClientInformation y &GeoLocationInfo es de tipo GeolocationInfo

SaveLocation es un procedimiento que guarda la localización del dispositivo.

Paso 3

Configurar el envió de la Silent Notification, por ejemplo  desde un procedimiento se puede programar el siguiente código:

&NotificationEvent = new()
&NotificationEvent.Name = !'GetLocation'

&NotifConfiguration = new()
&NotifConfiguration.ApplicationId = !'SDLocation'
&NotificationDelivery = new()
&NotificationDelivery.Priority= PushNotificationPriority.High
//PushNotificationPriority.High es importante para que despierte el device cuando entra en Doze mode
for each // Movil 
    where DeviceID = &DeviceID

    SendEvent(&NotifConfiguration, DeviceToken, &NotificationEvent, &NotificationDelivery, &Messages, &NotifSuccess)
endfor

Y en las reglas se pasa el device del cual queremos tener su ubicación:

parm(in:&DeviceID);

Donde:

&GXPushNotification es de tipo RemoteNotification
&NotificationEvent es de tipo GeneXus.Common.Notifications.Event
&NotifConfiguration es de tipo GeneXus.Common.Notifications.Configuration
&NotificationDelivery es de tipo GeneXus.Common.Notifications.Delivery
&Messages es de tipo Genexus.Common.Messages
&NotifSuccess es de tipo Numeric

&NotificationEvent, &NotifConfiguration, &NotificationDelivery son SDT de la API Notification Provider, SendEvent es un procedimiento incluido en la misma API.

Por ultimo desde Web Panel se puede llamar a este procedimiento desde un botón.

Paso 4

Seleccionar One Signal como proveedor para nuestras notificaciones, es importante registrar la aplicación para usar el Servicio.

Nota

A partir de Android 8 google realiza cambios en el comportamiento de las aplicaciones en Background asi como cuando el dispositivo entra en estado Doze , en este ejemplo tenemos limitante para la location, por lo que ya no es posible hacer Silent Notification y se recomienda enviar una notificacion normal.

Ejemplo

Puedes descargar este ejemplo desde aquí: Ejemplo para hacer Tracking desde una Silent Notification en Aplicaciones Android