cheth прикрепленный URL моей консоли:
дил за этой статьей здесь (которая, к сожалению, не завершена), пытаясь научиться дружить с PWA и Firebase Cloud Messaging на основе Ionic 3:Push-уведомления с FCM
Что я сделал:
как советовалось в статье, добавлены библиотеки FCM в service-worker.js:'use strict';
importScripts('./build/sw-toolbox.js');
importScripts('https://www.gstatic.com/firebasejs/4.9.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/4.9.0/firebase-messaging');
firebase.initializeApp({
// get this from Firebase console, Cloud messaging section
'messagingSenderId': '47286327412'
});
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler((payload) => {
console.log('Received background message ', payload);
// here you can override some options describing what's in the message;
// however, the actual content will come from the service sending messages
const notificationOptions = {
icon: '/assets/img/appicon.png'
};
return self.registration.showNotification(notificationTitle, notificationOptions);
});
self.toolbox.options.cache = {
name: 'ionic-cache'
};
// pre-cache our key assets
self.toolbox.precache(
[
'./build/main.js',
'./build/vendor.js',
'./build/main.css',
'./build/polyfills.js',
'index.html',
'manifest.json'
]
);
// dynamically cache any other local assets
self.toolbox.router.any('/*', self.toolbox.cacheFirst);
// for any other requests go to the network, cache,
// and then only use that cached resource if your user goes offline
self.toolbox.router.default = self.toolbox.networkFirst;
Затем создал провайдера на основе Firebase Messaging здесь:import { Injectable } from "@angular/core";
import * as firebase from 'firebase';
import { Storage } from '@ionic/storage';
@Injectable()
export class FirebaseMessagingProvider {
private messaging: firebase.messaging.Messaging;
private unsubscribeOnTokenRefresh = () => {};
constructor(
private storage: Storage
) {
this.messaging = firebase.messaging();
}
public enableNotifications() {
console.log('Requesting permission...');
return this.messaging.requestPermission().then(() => {
console.log('Permission granted');
// token might change - we need to listen for changes to it and update it
this.setupOnTokenRefresh();
return this.updateToken();
});
}
public disableNotifications() {
this.unsubscribeOnTokenRefresh();
this.unsubscribeOnTokenRefresh = () => {};
return this.storage.set('fcmToken','').then();
}
private updateToken() {
return this.messaging.getToken().then((currentToken) => {
if (currentToken) {
// we've got the token from Firebase, now let's store it in the database
return this.storage.set('fcmToken', currentToken);
} else {
console.log('No Instance ID token available. Request permission to generate one.');
}
});
}
private setupOnTokenRefresh(): void {
this.unsubscribeOnTokenRefresh = this.messaging.onTokenRefresh(() => {
console.log("Token refreshed");
this.storage.set('fcmToken','').then(() => { this.updateToken(); });
});
}
}
И теперь во время инициализации приложения я вызываю enableNotifications () и получаю сообщение об ошибке, которое говорит о том, что работник службы по умолчанию не найден (404):
При получении скрипта был получен неверный код ответа HTTP (404). : 8100 / firebase-messaging-sw.js Не удалось загрузить ресурс: net :: ERR_INVALID_RESPONSE
Если я перемещаю service-worker.js, связанный с firebase, в сервисный работник по умолчанию в папке WWW - я получаю общую ошибку от Firebase (Ошибка, не удалось зарегистрировать сервисного работника).
ВОПРОСЫ: - есть ли свежий путеводитель по Ponic & FCM Ionic 3? - На высоком уровне какая разница в регистрации сервисных работников в Ionic 3 против Angular? Я смотрел урок об Angular, но не могу понять, как сделать то же самое в Ionic 3.