FCM消息传送问题

6

我正在尝试按照此链接生成FCM令牌。 我在messaging.service中遇到了问题。 我无法实现angularFireMessaging.messaging,出现了关键字的错误。

类型“AngularFireMessaging”上不存在属性“messaging”

代码:

import { Injectable } from '@angular/core';
import { AngularFireMessaging } from '@angular/fire/messaging';
import { BehaviorSubject } from 'rxjs'
@Injectable()
export class MessagingService {
  currentMessage = new BehaviorSubject(null);
  constructor(private angularFireMessaging: AngularFireMessaging) {
    this.angularFireMessaging.messaging.subscribe(  //issue here in messaging
      (_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);
      })
  }
}

请帮我指出哪里做错了


请检查这里,有解决方案。 https://dev59.com/27joa4cB1Zd3GeqPIf9w#66873650 - Mafei
6个回答

5

我认为回到旧版本不是一个理想的解决方案。我认为这个问题的作者所遵循的教程有点过时了。

要获取最新版本,

 this.angularFireMessaging.messaging.subscribe(  //issue here in messaging
  (_messaging) => {
    _messaging.onMessage = _messaging.onMessage.bind(_messaging);
    _messaging.onTokenRefresh = _messaging.onTokenRefresh.bind(_messaging);
  }
)

不需要

在构造函数中删除所有内容,并使用下面最新版本的package.json进行更新(撰写此答案时的最新版本)

"@angular/fire": "^6.0.0",
"firebase": "^7.15.1",

它会很好地工作。

如果您想了解更多详细信息,请按照此官方教程https://github.com/angular/angularfire/blob/master/docs/messaging/messaging.md操作。


4

经过一些测试,从Stackblitz演示中获得的信息,你可以在https://github.com/angular/angularfire#resources找到。

如果您转到依赖项:

您会发现他们使用了 @angular/fire@5.1.1

如果您正在跟随任何教程,并且需要进行以下操作:

npm install firebase @angular/fire --save
npm install firebase --save

您可以使用以下方法进行跟进:
npm uninstall @angular/fire
npm i @angular/fire@5.1.1 --save

完全移除任何现有的@angular/fire安装并安装@angular/fire@5.1.1版本,解决“AngularFireMessaging类型上不存在'messaging'属性”的错误。

3

直接移除它们。错误清楚地告诉你:

类型“AngularFireMessaging”上不存在属性“messaging

来自:

constructor(private angularFireMessaging: AngularFireMessaging) {
    this.angularFireMessaging.messaging.subscribe(  //issue here in messaging
      (_messaging) => {
        _messaging.onMessage = _messaging.onMessage.bind(_messaging);
        _messaging.onTokenRefresh = _messaging.onTokenRefresh.bind(_messaging);
      }
    )
  }

Into:

constructor(private angularFireMessaging: AngularFireMessaging) {}

参考资料:https://github.com/angular/angularfire/blob/HEAD/docs/messaging/messaging.md

(以下是翻译内容)

2

我已经使用Angular 8以及其后续版本进行了工作。

npm i firebase@7.6.0 --save
npm i @angular/fire@5.4.0 --save

并在 importScripts 中更改版本

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

1

1
为解决这个问题,我运行了以下命令:

1) decrease the version of @angular/fire from latest to @angular/fire: ^5.2.1
2) use the version of firebase: 7.6.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接