Firebase 网络推送通知已成功发送但客户端未收到

Firebase web push notification sent successfully but not received by the client

我正在使用 firebase 网络推送通知 API 并发送 post 请求,其中包含我想使用来自 firebase 通知编辑器的 Postman and/or 在客户端显示的消息, 消息发送成功但收不到,请问如何解决?

这是我得到的回复

{
    "multicast_id": 6360733777037549929,
    "success": 1,
    "failure": 0,
    "canonical_ids": 0,
    "results": [
        {
            "message_id": "0:1592759038463623%cc9b4facf9fd7ecd"
        }
    ]
}

我正在使用 Firebase 托管,并包括整个 Firebase Javascript SDK,尽管我已经尝试仅包括 firebase-messaging SDK。

  <body>
    <h1>Some Firebase app</h1>
    <script src="/__/firebase/7.15.3/firebase.js"></script>
    <script src="/__/firebase/init.js"></script>
    <script type="text/javascript">
      const messaging = firebase.messaging();
      messaging.requestPermission()
      .then(()=>{
        console.log('Permission Granted');
        return messaging.getToken()
      })
      .then((token)=>{
        console.log(token);
      })
      .catch((err)=>{
        console.log(err);
      })
      
      messaging.onMessage((payload) => {
        console.log('Message received. ', payload);
      });

    </script>
  </body>

使用我获得的令牌和我的服务器密钥,我发送以下请求

Method: POST
URL: https://fcm.googleapis.com/fcm/send
Headers: {
  Authorization: "key=myServerKey",
  Content-Type: "application/json"
  }
Body: {
  "to" : "token",
  "notification" : {
            "body" : "Test message",
            "title" : "Test title"
           }
  }

这就是我在 firebase-messaging-sw.js 文件

上处理消息的方式
importScripts('https://www.gstatic.com/firebasejs/7.15.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.15.0/firebase-messaging.js');

var firebaseConfig = {
  apiKey: "xxxx",
  authDomain: "newproject-95acc.firebaseapp.com",
  databaseURL: "https://newproject-95acc.firebaseio.com",
  projectId: "newproject-95acc",
  storageBucket: "newproject-95acc.appspot.com",
  messagingSenderId: "xxxx",
  appId: "xxxx"
};

firebase.initializeApp(firebaseConfig);

messaging.onMessage((payload) => {
  console.log('Message received. ', payload);
});

您想在前台(有焦点)或在后台(服务工作者)接收消息?

在后台(服务工作者)

你能试试下面的代码吗?

firebase-消息-sw.js

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

var firebaseConfig = {
  apiKey: "xxxx",
  authDomain: "newproject-95acc.firebaseapp.com",
  databaseURL: "https://newproject-95acc.firebaseio.com",
  projectId: "newproject-95acc",
  storageBucket: "newproject-95acc.appspot.com",
  messagingSenderId: "xxxx",
  appId: "xxxx"
};

firebase.initializeApp(firebaseConfig);

if (firebase.messaging.isSupported()) {
  firebase.messaging();
}

https://firebase.google.com/docs/cloud-messaging/js/receive

If you set notification fields in your message payload, your setBackgroundMessageHandler callback is not called, and instead the SDK displays a notification based on your payload.

或者,你能试试样品吗?

参见: