web-dev-qa-db-fra.com

Rejet de promesses non gérées: this._next n'est pas une fonction: Zone dans @ angular / fire / messaging

Lorsque je reçois des notifications Firebase Push au premier plan, en utilisant @angular/fire/messaging. La méthode est:

  this.angularFireMessaging.messages.subscribe(
      (payload) => {
        console.log("new message received. ", payload);
        this.currentMessage.next(payload);
      })

Permettez-moi de partager mon code complet: PushNotificationsService Code j'ai écrit.

Mes versions Angular-cli:

Angular CLI: 8.1.3
Node: 12.4.0
OS: linux x64
Angular: 8.1.3
... animations, cli, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.801.3
@angular-devkit/build-angular     0.801.3
@angular-devkit/build-optimizer   0.801.3
@angular-devkit/build-webpack     0.801.3
@angular-devkit/core              8.1.3
@angular-devkit/schematics        8.1.3
@angular/fire                     5.3.0
@ngtools/webpack                  8.1.3
@schematics/angular               8.1.3
@schematics/update                0.801.3
rxjs                              6.4.0
TypeScript                        3.4.5
webpack                           4.35.2

Permettez-moi de partager mes fichiers package.json: package.json

J'obtiens l'erreur ci-dessous lorsque je reçois un message au premier plan:

Unhandled Promise rejection: this._next is not a function ; Zone: <root> ; Task: ServiceWorkerContainer.addEventListener:message ; Value: TypeError: "this._next is not a function"
    next RxJS
    messageEventListener index.esm.js:1046
    step tslib.es6.js:99
    verb tslib.es6.js:80
    __awaiter tslib.es6.js:73
    ZoneAwarePromise Angular
    __awaiter tslib.es6.js:69
    messageEventListener index.esm.js:1035
    WindowController index.esm.js:876
    Angular 5
 next@http://localhost:4200/vendor.js:111323:18
./node_modules/@firebase/messaging/dist/index.esm.js/WindowController.prototype.messageEventListener/</<@http://localhost:4200/firebase-messaging.js:2418:34
step@http://localhost:4200/vendor.js:127272:23
verb/<@http://localhost:4200/vendor.js:127253:53
__awaiter/<@http://localhost:4200/vendor.js:127246:71
ZoneAwarePromise@http://localhost:4200/polyfills.js:3882:29
__awaiter@http://localhost:4200/vendor.js:127242:12
./node_modules/@firebase/messaging/dist/index.esm.js/WindowController.prototype.messageEventListener@http://localhost:4200/firebase-messaging.js:2407:71
WindowController/<@http://localhost:4200/firebase-messaging.js:2248:26
invokeTask@http://localhost:4200/polyfills.js:3397:31
runTask@http://localhost:4200/polyfills.js:3174:47
invokeTask@http://localhost:4200/polyfills.js:3471:34
invokeTask@http://localhost:4200/polyfills.js:4609:14
globalZoneAwareCallback@http://localhost:4200/polyfills.js:4635:27

Toute aide est très appréciable! CODE: GITHUB REPO LINK

J'ai mis à jour ma clé secrète depuis Firebase dans le code GitHub

4
Kanishk Shrivastava

Oui Ce que j'ai réalisé que j'avais utilisé la mauvaise version de "@ angular/fire": "^ 5.3.0" qui n'est pas compatible avec "firebase": "^ 7.6.2", dans mon package.json.

Alors, ce que j'ai fait

Dans firebase-messaging-sw.js ou dans le fichier de service worker?

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

devrait avoir la même version avec votre firebase sur package.json

"dependencies": { ... "firebase": "^5.0.0", "@angular/fire": "^5.0.0", ... }

Et cela fonctionne comme un charme.

0
Kanishk Shrivastava

Essayez avec ces versions:

"dependencies": {
...
"firebase": "^7.6.0",
"@angular/fire": "^5.2.3",
...
}

ça marche parfaitement ...

Vérifiez ce dépôt: Notification Push angulaire

0
A.Amolitos