【问题标题】:Push notification with firebase ionic3使用 firebase ionic3 推送通知
【发布时间】:2018-09-17 15:46:28
【问题描述】:

我使用 [cordova-plugin-firebase] 进行推送通知,我使用 firebase 实时数据库。我不确定为什么会出现以下错误。

错误:« this.firebase.getToken() 不是函数»

代码:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { AuthService } from '../../services/auth.service';
import { FirebaseProvider } from '../../providers/firebase/firebase';
import { LoginPage } from '../login/login';
import { Observable } from 'rxjs/Observable';


@Component({
  selector: 'page-contact',
  templateUrl: 'contact.html'
})
export class ContactPage {
  user: Observable<any>;

  constructor(
    public navCtrl: NavController,
    private auth: AuthService,
    private firebase: FirebaseProvider
  ) {
    this.auth.currentUserObservable.subscribe(() => {
      this.user = this.firebase.getUserInfo(this.auth.currentUserId);

      if (!this.auth.authenticated) {
        this.navCtrl.setRoot(LoginPage);
      }
    });
    this.pushsetup();
  }
  pushsetup() {
    this.firebase
      .getToken()
      .then(token => console.log(`The token is ${token}`))
      .catch(error => console.error('Error getting token', error));
    this.firebase
      .onTokenRefresh()
      .subscribe((token: string) => console.log(`Got a new token ${token}`));
  }
}

**代码 FirebaseProvider **

   import { Injectable } from '@angular/core';
   import { AngularFireDatabase } from 'angularfire2/database';

   @Injectable()
   export class FirebaseProvider {

   constructor(public afd: AngularFireDatabase) { }


   getUserInfo(uid){
   return this.afd.object('/users/'+ uid).valueChanges();
   }
   }

有什么想法吗?

【问题讨论】:

  • 你能提供一个额外的代码FirebaseProvider 吗?
  • 试试这个:this.firebase.getIdToken();如果这不起作用,请尝试这样的事情:firebase.auth().currentUser.getIdToken()

标签: typescript firebase ionic-framework firebase-realtime-database


【解决方案1】:

根据:Firebase Documentation | getToken

此属性已弃用。请改用 firebase.User#getIdToken。

this.firebase.auth().currentUser.getIdToken().then((token)=>{
   console.log(`The token is ${token}`)
}).catch(function(error) {
   // Handle error
});

您可以使用 onAuthStateChanged 在获取令牌之前验证用户是否已登录。

this.firebase.auth().onAuthStateChanged((user)=>{
  if (user) {
    user.getIdToken().then((token)=>{
     console.log(`The token is ${token}`)
    });
  }
});

【讨论】:

    【解决方案2】:

    ContactPage 类中的this.firebase 是对您自己的 FirebaseProvider(-Class) 的引用,而不是科尔多瓦 FirebaseAddon。在您的类中没有名为 .getToken() 的方法,因此会引发错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-08
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 2018-09-19
      相关资源
      最近更新 更多