Es posible configurar las notificaciones Push a través de una aplicación realizada con XOne.
El envío puede realizarse con una herramienta externa y el framework puede detectar dichas notificaciones, de tal forma que se pueda interactuar con ellas.


Se debe realizar el registro del dispositivo en el servidor de Push y el Token que recibamos del servidor cuando nos registremos, tendremos que enviarlo al sitio desde donde vayamos a realizar el envío de las notificaciones.

Para ello la plataforma XOne provee de un método appData.registerPush, al cual se le debe pasar el valor googleSenderId que hayamos obtenido cuando nos registramos con firebase.

<!-- Código en la colección entry-point -->
    <prop name="MAP_SENDER_ID" type="T" />
    <prop name="MAP_APIKEY" type="T" />
    <prop name="MAP_TOKENPUSH" type="T" />
 
<!-- Ponemos el código en el after-edit de la colección entry-point para obtener el TOKEN cuando entre en la aplicación -->
 
<after-edit show-wait-dialog="false" refresh="false">
	<action name="runscript">
		<script language="javascript">
			<!-- En este caso cogemos los valores googleSenderId y googleApiKey que tenemos en BD del registro de la empresa actual, útil si tenemos varios entornos -->
			self.MAP_SENDER_ID=appData.getCurrentEnterprise().SENDERID;
			self.MAP_APIKEY=appData.getCurrentEnterprise().GOOGLEAUTHKEY;
			self.MAP_TOKENPUSH="";
 
			<!-- En esta función registrarPush, nos registramos en el servidor de PUSH y obtenemos el TOKEN. -->
			<!-- Le pasamos como parámetros el googleSenderId y el objeto actual para que podamos devolver el TOKEN y guardárnoslo. -->
			registrarPush(self.MAP_SENDER_ID,self);
			//requestIgnoreBatteryOptimizations();
		</script>
	</action>
</after-edit>


Se envía el Token Push al servidor externo, que preferiblemente se debe realizar con una conexión segura con una colección online. Ejecutar el siguiente método al loguearse en la aplicación, en concreto se indica el código en JavaScript.

registerpush.js
function registrarPush(sPushId,selfObject) {
 
	/** Ordenamos el registro push. **/
	appData.registerPush(sPushId);
 
	appData.bind("onPushRegistered", function(evento) {
		/*
		* Lo que queramos hacer cuando ya tengamos registrado el dispositivo y tengamos token
		*/
		let ventana = ui.getView(selfObject);
		if (ventana === null) {
			return;
		}
		selfObject.MAP_TOKENPUSH = evento.pushToken;
		ventana.refresh("MAP_TOKENPUSH");
		//ui.showToast("onPushRegistered(), Token push: " + evento.pushToken);
	});
 
	appData.bind("onPushReceived", function(evento) {
		/*
		* Aquí es donde recibimos un mensaje push, con los extras en forma de
		* un objeto javascript normal y corriente. Previamente le hemos filtrado
		* los extras del mensaje push verdadero que sean del framework */
		//ui.showToast("¡Mensaje push recibido!");
 
		if (evento.notification-type===0){
			ui.showToast(evento.notification_title);
		}
	});
 
	appData.bind("onPushRegistrationFailure", function(mEvento) {
		//ui.msgBox("Mensaje", "Ha ocurrido un error al registrar el push", 0);
	});
}


Envío del Mensaje Push


Para más información de cómo implementar los mensajes push en una aplicación, seguir el siguiente enlace:

http://developers.google.com/cloud-messaging/downstream

La aplicación del cliente, llamará al proveedor de push (google - apple) y éstos envían la notificación PUSH al dispositivo que sea.

Para que nos puedan enviar una notificación y que nuestro Framework sea capaz de interpretarla, junto con la información que se envíe, hay que añadir algunos parámetros “extra”:

Parámetros Extra
Dato “source”, con valor “push_server”. Necesario para que el framework pueda distinguir la procedencia de la Notificación Push y actuar en consecuencia.
Dato “notification_title” Su valor será el título de la Notificación Push.
Dato “notification_message” Su valor será el mensaje de la Notificación Push.


El resto de Datos que se pasen, serán los que se reciban en el dispositivo para procesarlos como se crea conveniente, a continuación se pone un ejemplo de mensaje:

 { "data": {
    "datomensaje": "Esto es una prueba",
    "source": "push_server",
    "notification_title": "Titulo de la notificacion",
    "notification_message": "Mensaje de la notificacion"
  },
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdF..."
 }


Recepción del Mensaje Push


Para procesar el mensaje push, tendremos que definir un nodo “onpushnotificationclick” en la colección “Empresas”, donde se entrará directamente cuando el usuario pulse sobre la notificación que se reciba en el dispositivo.

En dicho nodo se pondrá un parámetro que en el ejemplo hemos llamado “mensajepush”, que contendrá los valores que hayamos recepcionado en el mensaje Push.
datomensaje es el nombre de uno de los datos que viene en el mensaje Push del Servidor.
Se pueden poner tantos como se necesiten, siempre teniendo en cuenta que NO pueden llamarse con caracteres especiales, como espacios, acentos, ñ, etc…

 <onpushnotificationclick>
    <action name="runscript">
    <param name="mensajepush" />
            <script language="vbscript">
                ui.showToast "vbscript: " + mensajepush.datomensaje
         </script>
    </action>
 </onpushnotificationclick>


Más información de la Réplica con Push aquí