繁体   English   中英

Angle 7中的Firebase推送通知无法注册ServiceWorker

[英]Firebase push notification in angular 7 failed to register serviceworker

点击查看图片

尝试实现Firebase推送通知时收到此错误。

“ messaging.service.ts:54无法获得通知的权限。FirebaseError:消息传递:我们无法注册默认服务工作者。无法注册ServiceWorker:提取脚本时收到错误的HTTP响应代码(404)。 (消息/服务工作者注册失败)。”

这是我的messaging.service.ts

import { Injectable } from '@angular/core';
import { AngularFireDatabase } from '@angular/fire/database';
import { AngularFireAuth } from '@angular/fire/auth';
import { AngularFireMessaging } from '@angular/fire/messaging';
import { mergeMapTo } from 'rxjs/operators';
import { take } from 'rxjs/operators';
import { BehaviorSubject } from 'rxjs'

@Injectable()
export class MessagingService {

  currentMessage = new BehaviorSubject(null);

  constructor(
    private angularFireDB: AngularFireDatabase,
    private angularFireAuth: AngularFireAuth,
    private angularFireMessaging: AngularFireMessaging) {



    console.log("firebase.....");
    this.angularFireMessaging.messaging.subscribe(
      (_messaging) => {
        console.log(_messaging,"messegiung");
        _messaging.onMessage = _messaging.onMessage.bind(_messaging);
         console.log(_messaging,"messegiung");
        _messaging.onTokenRefresh = _messaging.onTokenRefresh.bind(_messaging);
         console.log(_messaging,"messegiung");
      }
    )
  }

  /**
   * update token in firebase database
   * 
   * @param userId userId as a key 
   * @param token token as a value
   */
  updateToken(userId, token) {
    // we can change this function to request our backend service
    this.angularFireAuth.authState.pipe(take(1)).subscribe(
      () => {
        const data = {};
        data[userId] = token
        this.angularFireDB.object('fcmTokens/').update(data)
      })
  }

  /**
   * request permission for notification from firebase cloud messaging
   * 
   * @param userId userId
   */
  requestPermission(userId) {
     console.log(userId,"userId");
    this.angularFireMessaging.requestToken.subscribe(
      (token) => {
         console.log(userId,"userId");
        console.log(token);
        this.updateToken(userId, token);
      },
      (err) => {
        console.error('Unable to get permission to notify.', err);
      }
    );
  }

  /**
   * hook method when new notification received in foreground
   */
  receiveMessage() {
    this.angularFireMessaging.messages.subscribe(
      (payload) => {
        console.log("new message received. ", payload);
        this.currentMessage.next(payload);
      })
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM