web-dev-qa-db-fra.com

firebase Cloud Messaging: setBackgroundMessageHandler non appelé

Je suis en train de prototyper les notifications Push du navigateur avec FCM. Je viens de copier le code d'exemple du quickstart ( https://github.com/firebase/quickstart-js/tree/master/messaging ) Les messages sont reçus et affichés comme il se doit. Mais lorsque j'essaie de modifier le message dans le Service Worker (messaging.setBackgroundMessageHandler), rien ne se passe. Le service worker est appelé et si j'implémente un écouteur d'événement dans ce service worker pour les notifications Push, il intercepte l'événement. Mais la méthode setBackgroundMessageHandler n'est jamais appelée. J'essaie ceci sur Chrome 54.

Des idées sur ce que je dois faire pour personnaliser le message dans le technicien de service?

Merci beaucoup!

12
Mathias

Pour toutes les personnes rencontrant le même problème, voici la réponse: https://github.com/firebase/quickstart-js/issues/71

résumé court: n'incluez pas d'élément "notification" dans votre message json. 

34
Mathias

Ceci est une solution qui a fonctionné pour moi dans une application Web. Il affiche la notification avec le titre et le corps du texte avec une image et gère le clic de l'utilisateur.

firebase-messaging-sw.js

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

// Initialize Firebase
var config = {
  apiKey: "YOUR_API_KEY",
  authDomain: "YOUR_AUTH_DOMAIN",
  databaseURL: "YOUR_DB_URL",
  projectId: "YOUR_PROJ_ID",
  storageBucket: "YOUR_STORAGE_BUCKET",
  messagingSenderId: "YOUR_SENDER_ID"
};
firebase.initializeApp(config);
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function (payload) {
  console.log('Handling background message ', payload);

  return self.registration.showNotification(payload.data.title, {
    body: payload.data.body,
    icon: payload.data.icon,
    tag: payload.data.tag,
    data: payload.data.link
  });
});

self.addEventListener('notificationclick', function(event) {
  event.notification.close();
  event.waitUntil(self.clients.openWindow(event.notification.data));
});

Message JSON

{
"message": {
    "token": "YOUR_TARGET_APP_TOKEN",
    "data": {
        "title": "FCM Message",
        "body": "This is an FCM Message",
        "icon": "https://shortcut-test2.s3.amazonaws.com/uploads/role_image/attachment/10461/thumb_image.jpg",
        "link": "https://yourapp.com/somewhere"
    }
}

}

1
Sparm

Lorsque vous essayez d'envoyer un message Push, le faites-vous lorsque votre application est active ou non? En effet, la documentation indique que setBackgroundMessageHandler est appelé uniquement lorsque l'application Web est fermée ou non dans le focus du navigateur

Basé sur l'exemple de code du quickstart ( https://github.com/firebase/quickstart-js/tree/master/messaging ). 

Si votre application est active: le message Push est reçu via messaging.onMessage () sur le fichier index.html.
Si votre application n'a pas le focus: le message Push est reçu via setBackgroundMessageHandler () sur le fichier du service worker.

1
River Paul