2017-06-28 10 views
1

Ich verwende React, Redux und Service Worker bei meiner Anwendung, und ich möchte den Redux-Shop bei meinem Service-Mitarbeiter zugreifen.Wie Zugriff Redux auf Service Worker

Mein Service Arbeiter ist:

function checkCompatibility() { 
    if ('serviceWorker' in navigator && 'PushManager' in window) { 
    console.log('Service Worker and Push is supported'); 

    navigator.serviceWorker.register('./sw.js') 
    .then(function (swReg) { 
     console.log('Service Worker is registered', swReg); 
    }) 
    .catch(function (error) { 
     console.error('Service Worker Error', error); 
    }); 
    } else { 
    console.warn('Push messaging is not supported'); 
    } 
} 

function askForNotification() { 
    if (!('Notification' in window)) { 
    console.log('This browser does not support desktop notification'); 
    } else if (Notification.permission === 'granted') { 
    console.log('Permission granted.'); 
    } else if (Notification.permission !== 'denied' || Notification.permission === 'default') { 
    Notification.requestPermission(function (permission) { 
     if (permission === 'granted') { 
     var notification = new Notification('Permissão de Notificação foi Aceita', { icon: '/favicon.png', badge: '/favicon.png' }); 
     } 
    }); 
    } 
} 

checkCompatibility(); 
askForNotification(); 

Kann mir jemand helfen?

Antwort

1

Servicemitarbeiter sind auf der Web Worker-API aufgebaut. Nach den MDN documentation on Web Workers:

Arbeitern in einem anderen globalen Kontext ausführen, die aus dem aktuellen Fenster

So ist der Servicemitarbeiter von Ihrem Redux-Code ist in einem anderen Bereich unterschiedlich ist.

Sie können jedoch möglicherweise die API postMessage verwenden, um zwischen Ihrem Hauptanwendungscode und dem Service-Mitarbeiter zu kommunizieren und alle Daten, die Sie von Redux benötigen, über diesen Kanal weiterleiten.

Werfen Sie einen Blick auf das Codebeispiel here zur Inspiration.

+1

Denken Sie auch daran, dass Sie immer einen Endpunkt von dem Serviceworker behandelt haben, die Kommunikation, wie eine API auszuführen Anruf. –

0

Ich habe die Push.js gefunden, die mein Problem gelöst hat.

Sie importieren und verwenden, um Push-Benachrichtigungen zu senden.

Installieren mit

npm installieren --save push.js

import push from 'push.js' 

push.create('Hello World!', { 
    body: `${your-react-or-redux-var}`, 
});