【问题标题】:FCM getToken() doesn't return anythingFCM getToken() 不返回任何内容
【发布时间】:2016-12-01 14:00:27
【问题描述】:

我正在尝试将 Firebase Cloud Messaging 与 Angular2 一起使用,但他们似乎不希望我们这样做@Google。

我一直在关注 thisthis 以便能够阻止错误。

我现在面临以下问题: 为什么messaging.getToken() 什么都不返回? 没有错误,控制台中没有令牌,什么都没有。

我们非常欢迎任何帮助。谢谢。

编辑 我尝试使用onTokenRefresh() 更新了下面的代码。它不会改变任何东西。我觉得这是因为我并没有真正插入我的 firebase 文件。有人能用 Angular2 和 AngularFire2 制作 FCM 吗?

import {Component, OnInit, Inject} from '@angular/core';
import { FirebaseApp } from "angularfire2";
import * as firebase from 'firebase';

@Component({
  templateUrl: './+config.component.html',
  styleUrls: ['./+config.component.scss']
})
export class UserConfigComponent implements OnInit {

  private _messaging: firebase.messaging.Messaging;

  constructor(@Inject(FirebaseApp) private _firebaseApp: firebase.app.App) {
    this._messaging = firebase.messaging();
  }

  ngOnInit() {
    // Callback fired if Instance ID token is updated.
    this._messaging.onTokenRefresh(function() {
      this._messaging.getToken()
        .then(function(refreshedToken) {
          console.log('Token refreshed.', refreshedToken);
        })
        .catch(function(err) {
          console.log('Unable to retrieve refreshed token ', err);
        });
    });
  }

  requestPushNotif() {
    this._messaging.requestPermission()
      .then(() => {
        console.log('have permission');
        return this._messaging.getToken();
      })
      .then(function(token) {
        console.log(token);
      })
      .catch((error) => {
        console.log(error);
      });
  }

}

【问题讨论】:

  • 在您调用getToken() 时,令牌可能尚未生成。这就是为什么你还必须实现onTokenRefresh()。见firebase.google.com/docs/cloud-messaging/js/…
  • 感谢您指出这一点。我试过了,但没有更多的运气。我已经编辑了我的第一条消息。我错过了什么吗?
  • 嗯....在那种情况下我不知道。我自己没有尝试过使用 angular 的 FCM.js,但是这种组合应该没有任何区别。能否设置一个jsbin为你重现问题,让我试试?
  • 实际上它在 Firefox 中有效,但在 chrome 中无效。我在 Firefox 中获得了一个令牌。怎么会?

标签: angular firebase firebase-cloud-messaging angularfire2


【解决方案1】:

好的,我找到了解决方案。问题来自 Angular-CLI 和 AngularFire2 之间的关系。

我是here

我必须在src/tsconfig.jsonsrc/typings.d.ts 中添加以下内容:

"types": [
  "firebase"
]

declare var require: any;
declare var module: any;

我希望这可以帮助某人。

感谢 Frank van Puffelen 的帮助。你总是在这里帮助我解决我的火力问题:)

编辑我刚刚发现它不适用于所有浏览器。它可以在 Firefox 中运行,但不能在 chrome 中运行……怎么会?

【讨论】:

  • 在 chrome 60 上为我工作。也许他们修复了什么?实际上,只需 src/tsconfig.json 编辑就足够了。
猜你喜欢
  • 2021-01-17
  • 2020-04-27
  • 2019-04-06
  • 2012-02-15
  • 2020-09-07
  • 2021-11-22
  • 2015-11-06
  • 2013-11-14
  • 2014-03-23
相关资源
最近更新 更多