2016-12-01 5 views
2

Ich versuche Firebase Cloud Messaging mit Angular2 zu verwenden, aber es ist so, als wollten sie nicht, dass wir @Google machen.FCM getToken() gibt nichts zurück

Ich habe this und this verfolgt, um Fehler zu stoppen.

bin vor mir jetzt folgendes Problem: Warum messaging.getToken() nichts zurückkehrt? Kein Fehler, kein Token in der Konsole, nichts.

Jede Hilfe ist mehr als willkommen. Vielen Dank.

EDIT Ich habe den Code unten mit meinem Versuch aktualisiert mit onTokenRefresh(). Es ändert nichts. Ich glaube, es kommt von der Tatsache, dass ich nicht wirklich an meine Firebase-Dateien angeschlossen bin. Hat es jemand geschafft, FCM mit Angular2 und AngularFire2 zu machen?

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); 
     }); 
    } 

} 
+0

Das Token wird möglicherweise nicht erzeugt, wenn Sie 'getToken()' aufrufen. Deshalb müssen Sie auch 'onTokenRefresh()' implementieren. Siehe https://firebase.google.com/docs/cloud-messaging/js/client#monitor-token-refresh –

+0

Vielen Dank, dass Sie darauf hingewiesen haben. Ich habe es versucht, aber ohne mehr Glück. Ich habe meine erste Nachricht bearbeitet. Habe ich etwas verpasst? – Tom

+0

Hmmm .... in diesem Fall weiß ich nicht. Ich habe FCM.js nicht mit eckigen selbst ausprobiert, aber diese Kombination sollte keinen Unterschied machen. Kannst du eine Jsbin einrichten, die das Problem für dich reproduziert, damit ich es ausprobieren kann? –

Antwort

3

Ok Ich habe die Lösung gefunden. Das Problem ergab sich aus der Beziehung zwischen Angular-CLI und AngularFire2.

Es ist here.

Ich hatte die folgende in src/tsconfig.json und in src/typings.d.ts hinzuzufügen:

"types": [ 
    "firebase" 
] 

und

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

ich dies jemand helfen kann hoffen.

Vielen Dank, Frank van Puffelen, für Ihre Hilfe. Sie sind immer hier, um auf meiner firebase Fragen zu helfen :)

EDIT Ich habe gerade herausgefunden, dass es nicht in allen Browser funktioniert. Es funktioniert in Firefox aber nicht in Chrom ... Wie kommt es?

+0

Arbeitete für mich auf Chrom 60. Vielleicht haben sie etwas repariert? Eigentlich war nur die 'src/tsconfig.json'-Bearbeitung ausreichend. –