Notificaciones push web (WPN)
Las notificaciones push web son mensajes de contenido enriquecido pulsables que permiten a los usuarios suscribirse a actualizaciones puntuales de los sitios web. La aplicación da soporte a la escucha de las API de notificaciones push y a la difusión de las notificaciones, que pueden ser consumidas por distintas características dentro de la aplicación.
Habilitación de WPN
Nota: Para todas las características relacionadas con las notificaciones push web, se utiliza el módulo de trabajador de servicio Angular.
Trabajador de servicio
Como el trabajador de servicio es necesario para que la notificación push funcione, se registra un trabajador de servicio predeterminado proporcionado por la aplicación que escucha los sucesos de pulsación de envío y notificación y difunde estos sucesos que las distintas características pueden escuchar.
- Suceso push: el trabajador de servicio escucha el suceso Push, muestra la notificación y difunde un mensaje con datos push que las distintas características pueden escuchar.
- Suceso de pulsación de notificación: el trabajador del servicio escucha el suceso de pulsación de notificación, cierra la notificación y difunde un mensaje con los datos de notificación (incluidos los detalles de la acción), que las distintas características pueden escuchar.
Suscripción y anulación de suscripción a notificaciones
- Suscripción a notificaciones: es un esfuerzo de implementación completo y, de forma predeterminada, la aplicación proporciona un gancho para suscribirse durante el proceso de inicio de sesión. Justo después del inicio de sesión, la aplicación hace una llamada para suscribir el método definido dentro de src/app/core/services/PushNotificationAbstractService (a partir de hoy es sólo un método ficticio).
PushNotificationAbstractServicedebe alterarse temporalmente para implementar el método de suscripción para que los usuarios puedan suscribirse a las notificaciones y esta suscripción pueda persistir en algún lugar del extremo del cliente. Se puede invocar el mismo servicio personalizado desde cualquier lugar de la aplicación para cambiar el comportamiento predeterminado, que es la suscripción durante el inicio de sesión. - Anulación de suscripción a notificaciones: de nuevo, se llama al método de anulación de suscripción ficticio de src/app/core/services/PushNotificationAbstractService durante el cierre de sesión para el flujo proporcionado por la aplicación y debe alterarse temporalmente para satisfacer las necesidades del cliente. De forma muy básica, este es el aspecto que tendrá un servicio alterado temporalmente (el servicio alterado temporalmente debe definirse dentro de store-extensions-src/app/core/services/Nota: Esta es una implementación muy básica y no es deseable para la aplicación de producción.
import { Injectable, Injector } from '@angular/core';
import { PushNotificationAbstractService } from '@simcore/
services/push-notification-abstract.service';
import { SwPush } from '@angular/service-worker';
import { HttpClient, HttpResponse } from '@angular/common/http';
import { map, take } from 'rxjs/operators';
import { UIUtilsService } from '@sim-core/services/uiutils.
service';
@Injectable({
providedIn: 'root'
})
export class PushNotificationService extends
PushNotificationAbstractService {
readonly VAPID_PUBLIC_KEY = '<vapid key>';
isWPNSubscribed = false;
subsObj = null;
constructor(
protected injector: Injector,
public swPush: SwPush,
private http: HttpClient
) {
super(injector);
if (this.swPush.isEnabled) {
this.swPush.subscription
.pipe(take(1))
.subscribe(pushSubscription => {
if (pushSubscription) {
this.isWPNSubscribed = true;
}
});
}
}
public subscribe({}) {
this.subscribeToNotifications(null);
}
subscribeToNotifications(event) {
if (event) {
event.preventDefault();
}
this.swPush.requestSubscription({
serverPublicKey: this.VAPID_PUBLIC_KEY
})
.then(pushSubscription => {
this.http.post('https://<host-port>/<susbcribe-end-point>',
{'subscription': pushSubscription.toJSON(), 'any-other-data':''});
this.isWPNSubscribed = true;
})
.catch(err => console.error('Could not subscribe to
notifications', err));
}
public unsubscribe({}) {
this.unsubscribeToNotifications(null);
}
unsubscribeToNotifications(event) {
event.preventDefault();
this.swPush.subscription
.pipe(take(1))
.subscribe(pushSubscription => {
pushSubscription.unsubscribe().then(result => {
if (result) {
this.isWPNSubscribed = false;
this.http.post('https://<host-port>/<unsusbcribe-endpoint>',
{'data': 'data'})
} else {
console.log('Could not unsubscribe to notifications');
}
})
.catch(err => console.error('unsubcribe subscription failed',
err));
});
}
}
Invocación del servicio push
La invocación del servicio push es una implementación personalizada completa y debe ser atendida por el cliente. Normalmente, los eventos que se plantean en Sterling Store Engagement o IBM® Sterling Order Management System deben capturarse, y el servicio push debe invocarse con los datos correctos para que se muestren al usuario asociado.
Una carga útil de notificación típica sería similar a la siguiente:
{
"notification": {
"title": "Notification Title", //mandatory
"body": "Notification Message!",
"data": {
"dateOfArrival": Date.now(),
"primaryKey": 1
}
}
}Manejo de sucesos de pulsación de envío y notificación
Como se menciona en la sección de trabajador de servicio, el trabajador de servicio proporcionado por la aplicación ya se encarga de mostrar y cerrar la notificación. Además, difunde los sucesos de pulsación de envío y notificación que la aplicación puede escuchar para un proceso adicional. El módulo de trabajador de servicio angular proporcionado por la aplicación proporciona una forma de suscribirse a estos sucesos que se pueden utilizar de la forma siguiente:
this.swPush.messages.subscribe(message => {
console.log('Push message: ', message);
});
this.swPush.notificationClicks.subscribe(notificationMsg => {
console.log('Notification Click: ', notificationMsg);
});
Nota:
Este código se puede mantener dentro del servicio de swPush es una referencia a @angular/service-worker
modulePushNotificationService .Limitaciones
- Solo se admite en Chrome para escritorio y Android.
httpsSolo admite y funciona con certificados válidos de SSL.- Cuando un usuario inicia sesión en la aplicación por primera vez después de la actualización del3 ° de mayo, el usuario debe volver a cargar la interfaz de usuario para utilizar el trabajador de servicio y, por lo tanto, las notificaciones push.