Я устанавливаю Firebase Cloud Messaging в своем приложении Angular, используя AngularFire2, для получения и отправки уведомлений. Однако при попытке получить текущий токен пользователя приложение возвращает ошибку.
Я уже создал файлы «firebase-messaging-sw.js» и «manifest.json» для регистрации работника службы и добавилвсе правильно, но безуспешно.
Компонент, на который я подписываюсь на наблюдаемое.
export class HomeComponent implements OnInit {
constructor(
private afMessaging: AngularFireMessaging,
private afStore: AngularFirestore,
private afAuth: AngularFireAuth,
) {}
ngOnInit() {
this.afAuth.user.pipe(
exhaustMap(
user => {
return this.afMessaging.getToken.pipe(
tap(
token => {
console.log(token);
this.afStore.collection('users').doc(user.uid).update({
fcmToken: token
});
}
)
);
}
)
).subscribe();
this.afMessaging.messages
.subscribe((message) => { console.log(message); });
}
}
Работник службы:
// Give the service worker access to Firebase Messaging.
// Note that you can only use Firebase Messaging here, other Firebase libraries
// are not available in the service worker.
importScripts("https://www.gstatic.com/firebasejs/6.3.4/firebase-app.js");
importScripts("https://www.gstatic.com/firebasejs/6.3.4/firebase-messaging.js");
// Initialize the Firebase app in the service worker by passing in the
// messagingSenderId.
firebase.initializeApp({
messagingSenderId: "231973795174"
});
// Retrieve an instance of Firebase Messaging so that it can handle background
// messages.
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function(payload) {
console.log(
"[firebase-messaging-sw.js] Received background message ",
payload
);
// Customize notification here
const notificationTitle = "Background Message Title";
const notificationOptions = {
body: "Background Message body.",
icon: "/firebase-logo.png"
};
return self.registration.showNotification(
notificationTitle,
notificationOptions
);
});
Манифест
{
"name": "App",
"gcm_sender_id": "103953800507"
}
Angular.json
"assets": [
"src/favicon.ico",
"src/assets",
"src/firebase-messaging-sw.js",
"src/manifest.json"
],
Ниже подробно описана ошибка, которую я получаю:
Uncaught (в обещании): FirebaseError: Установки: отсутствует приложениеЗначения конфигурации. (установки / недостающее приложение-конфигурация-значение). FirebaseError: Установки: отсутствуют значения конфигурации приложения. (установки / недостающее приложение-конфигурация-значение). в extractAppConfig (index.esm.js: 89) в Object.factoryMethod [в качестве установок] (index.esm.js: 1110) в FirebaseAppImpl.push ../ node_modules/@firebase/app/dist/index.cjs.js. FirebaseAppImpl._getService (index.cjs.js: 191) в FirebaseAppImpl.firebaseAppImpl. [как установки] (index.cjs.js: 458) в index.esm.js: 415 на шаге (tslib.es6.js: 99) в Object.next (tslib.es6.js: 80) в tslib.es6. js: 73 в новом ZoneAwarePromise (zone-evergreen.js: 876) в __awaiter (tslib.es6.js: 69) в resolPromise (zone-evergreen.js: 797) в zone-evergreen.js: 707 в zone-evergreen. js: 723 в ZoneDelegate.invoke (zone-evergreen.js: 359) в Object.onInvoke (core.js: 39698) в ZoneDelegate.invoke (zone-evergreen.js: 358) в Zone.run (zone-evergreen.js): 124) в zone-evergreen.js: 855 в ZoneDelegate.invokeTask (zone-evergreen.js: 391) в Object.onInvokeTask (core.js: 39679)