2016-12-01 3 views
2

Я пытаюсь использовать Firebase Cloud Messaging с Angular2, но это похоже, что они не хотят, чтобы мы это @Google.FCM getToken() ничего не возвращает

Я слежу this и this, чтобы иметь возможность остановить ошибки.

У меня возникла следующая проблема: Почему messaging.getToken() ничего не возвращает? Ошибка, нет токена в консоли, ничего.

Любая помощь более чем приветствуется. Спасибо.

EDIT Я обновил нижеследующий код с помощью моей попытки, используя onTokenRefresh(). Это ничего не меняет. Я чувствую, что это происходит из-за того, что я на самом деле не подключен к моим файлам firebase. Кто-нибудь смог сделать FCM с Angular2 и AngularFire2?

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

Если вы вызываете 'getToken()', токен может не сгенерироваться. Вот почему вы должны также реализовать 'onTokenRefresh()'. См. Https://firebase.google.com/docs/cloud-messaging/js/client#monitor-token-refresh –

+0

Спасибо, что указали это. Я попробовал, но не повезло. Я редактировал свое первое сообщение. Я что-то пропустил? – Tom

+0

Хммм ... в этом случае я не знаю. Я не пробовал FCM.js с угловатым явлением, но эта комбинация не должна иметь никакого значения. Можете ли вы настроить jsbin, который воспроизводит проблему для вас, чтобы я мог попробовать? –

ответ

3

Хорошо, я нашел решение. Проблема возникла из-за отношения между Angular-CLI и AngularFire2.

Это here.

я должен был добавить следующее в src/tsconfig.json и в src/typings.d.ts:

"types": [ 
    "firebase" 
] 

и

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

Я надеюсь, что это может помочь кому-то.

Благодарим вас, Frank van Puffelen, за вашу помощь. Вы всегда здесь, чтобы помочь мне в вопросах, связанных с моей базой :)

EDIT Я только узнал, что он не работает во всех браузерах. Он работает в firefox, но не в хром ... Почему?

+0

Работал для меня на хроме 60. Может, они что-то зафиксировали? Собственно, достаточно просто отредактировать 'src/tsconfig.json'. –

Смежные вопросы