【问题标题】:firebase.messaging is not a function in Angular 9firebase.messaging 不是 Angular 9 中的函数
【发布时间】:2020-12-04 14:38:24
【问题描述】:

我逐行遵循本教程: https://medium.com/mighty-ghost-hack/angular-8-firebase-cloud-messaging-push-notifications-cc80d9b36f82

如何在我的 Angular CLI 中简单地将通知网络添加到我的 Angular 9 项目中:

    "assets": [
      "src/favicon.ico",
      "src/assets",
      "src/firebase-messaging-sw.js",
      "src/manifest.json"
    ],

这是我的 firebase-messagin-sw.js

importScripts('https://www.gstatic.com/firebasejs/7.6.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.6.0/firebase-analytics.js');

firebase.initializeApp({
  apiKey: ******************,
  authDomain: ******************,
  databaseURL: ******************,
  projectId: ******************,
  storageBucket: ******************,
  messagingSenderId: ******************,
  appId: ******************,
  measurementId: ******************
});
console.log(firebase);
const messaging = firebase.messaging();

这个文件在我的根项目中,我创建了这个通知服务:

import { Injectable } from '@angular/core';
import { AngularFireMessaging } from '@angular/fire/messaging';
import { BehaviorSubject } from 'rxjs';


@Injectable()
export class NotificationService {

  currentMessage = new BehaviorSubject(null);

  constructor(private angularFireMessaging: AngularFireMessaging) {
    this.angularFireMessaging.messaging.subscribe((_messaging) => {
      _messaging.onMessage = _messaging.onMessage.bind(_messaging);
      _messaging.onTokenRefresh = _messaging.onTokenRefresh.bind(_messaging);
    });
  }
  requestPermission() {
    this.angularFireMessaging.requestToken.subscribe(
      (token) => {
        console.log(token);
      },
      (err) => {
        console.error('Unable to get permission to notify.', err);
      }
    );
  }
  receiveMessage() {
    this.angularFireMessaging.messages.subscribe((payload) => {
      console.log('new message received. ', payload);
      this.currentMessage.next(payload);
    });
  }
}

当我的应用程序被加载时,我得到这个错误:Uncaught TypeError: firebase.messaging is not a function,就像 Angular CLI 没有加载 js 文件但是当我使用这个 console.log(firebase ) 它给了我一个没有此功能的 javascript 对象,并且在此错误之后:

我收到另一个错误:TypeError: Failed to update a ServiceWorker for scope ('http://localhost:4200/firebase-cloud-messaging-push-scope')

我做错了什么?

【问题讨论】:

    标签: angular firebase firebase-cloud-messaging


    【解决方案1】:

    据我了解你的问题,我想回答一下。
    我想你也可以在你的 firebase-messagin-sw.js 中添加这个。

    importScripts('https://www.gstatic.com/firebasejs/7.18.0/firebase-messaging.js');
    

    要获得使用云消息传递的最佳体验,还需要添加 Firebase SDK for Analytics。

    importScripts('https://www.gstatic.com/firebasejs/7.18.0/firebase-analytics.js');
    

    更多参考:https://firebase.google.com/docs/web/setup#expandable-8

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 2021-12-16
    • 2021-05-03
    • 2016-01-01
    相关资源
    最近更新 更多