register 関数を呼び出すときに、FCM Web 通知サービスを使用しています。
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('/sw.js').then(function(registration) {
// Registration was successful
console.log('ServiceWorker registration successful with scope: ', registration.scope);
}).catch(function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
});
}
Service Worker は 2 回登録されます。1 つはこの関数によるもので、もう 1 つはFCM スクリプトによるものです。これは私のサービスワーカーコードです:
importScripts('https://www.gstatic.com/firebasejs/3.5.2/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/3.5.2/firebase-messaging.js');
'messagingSenderId': '<my senderid>'
});
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function (payload) {
self.addEventListener('notificationclick', function (event) {
event.notification.close();
var promise = new Promise(function (resolve) {
setTimeout(resolve, 1000);
}).then(function () {
return clients.openWindow(payload.data.locator);
});
event.waitUntil(promise);
});
var notificationTitle = payload.data.title;
var notificationOptions = {
body: payload.data.body,
icon: payload.data.icon
};
return self.registration.showNotification(notificationTitle,
notificationOptions);
});
もう1つ、テスト通知を送信し、最初のメッセージをクリックするとURLが正しく開きますが、Chromeの同じインスタンスで、クリックした他のすべてのメッセージは最初のメッセージのURLを開きます. この問題は Firefox では発生せず、Chrome のみで発生します。Chromeバージョン55を使用しています