Estoy tratando de redirigir mi aplicación web Angular a una URL diferente que recibe de los eventos enviados por el servidor . Esta característica funciona bien cuando el navegador está en primer plano en IOS. Sin embargo, cuando un usuario cambia el navegador al fondo, la aplicación Angular no escucha ningún evento .
Este problema solo ocurre en IOS . En Andriod, los navegadores reciben eventos enviados por el servidor incluso cuando el navegador está en segundo plano.
servicio.ts
getServerSentEvent(merchantTransactionId: string, txnDate: string): Observable<any> { return new Observable<string>(obs => { const appType = 'guest-checkout'; const url = environment.BASE_DATA_URL + '/api/event/server-sent/event/subscribe/' + appType + '/' + merchantTransactionId; const es = new EventSource(url); es.addEventListener('message', (event) => { // alert(event.data); obs.next(event.data); }); return () => es.close(); }); } He añadido un cuadro de alerta para probar si aparece en el móvil o no. No aparece cuando el navegador está en segundo plano. Además, probé onmessage en lugar de addEventListener y no hubo cambios.
componente.ts
triggerSSEEvent(merchantTxnId, txnDateString): void { this.sseService.getServerSentEvent(merchantTxnId, txnDateString).subscribe( (data) => { const response = JSON.parse(data); this.responseURL = response.url; window.location.href = response.url; }, (error) => { this.showError(); } ); }Nota: el usuario generalmente cambia el navegador para aceptar la solicitud de inserción de otra aplicación.