Push notification 发送和发送;跨主要浏览器接收推送通知&;移动设备

Push notification 发送和发送;跨主要浏览器接收推送通知&;移动设备,push-notification,service-worker,Push Notification,Service Worker,我注册了一个谷歌云服务帐户,创建了一个新的Firebase项目,并下载了我的服务凭证JSON文件 在以下指南中: 我将其添加到我的web客户端html中(为了获得客户端注册令牌并接受推送通知): 然后,下载Firebase Admin的npm模块,并使用客户端令牌设置基本推送通知测试模板: var admin = require("firebase-admin"); var serviceKey = require("./_KEY_.json"); admin.initializ

我注册了一个谷歌云服务帐户,创建了一个新的Firebase项目,并下载了我的服务凭证JSON文件

在以下指南中:

我将其添加到我的web客户端html中(为了获得客户端注册令牌并接受推送通知):

然后,下载Firebase Admin的npm模块,并使用客户端令牌设置基本推送通知测试模板:

  var admin = require("firebase-admin");
  var serviceKey = require("./_KEY_.json");

  admin.initializeApp({
    credential: admin.credential.cert(serviceKey),
    databaseURL: "https://_PROJECTID_.firebaseio.com"
  });

  var registrationToken = "_TOKEN_";

  var notification = {
    data: {
      msg:"Hello!"
    }
  };

  admin.messaging().sendToDevice(registrationToken, notification)
    .then(function(response) {
      console.log("Successfully sent message:", response);
    })
    .catch(function(error) {
      console.log("Error sending message:", error);
    });
现在,node.js告诉我它“成功地发送了消息”,但我在Chrome web客户端中没有收到任何消息。在Safari中,我看到错误:
此浏览器不支持使用firebase SDK所需的API。


对于我来说,通过推送通知在主要浏览器和移动设备上发送单个客户端消息的最简单方法是什么?

Safari还不支持FCM

现在,对于为什么您没有收到消息,首先您必须了解实际发生的情况

客户端正在浏览器中生成令牌(generateToken方法就是这样做的),Firebase admin正在运行fcm服务器

但是Firebase服务器不知道您的客户端。您的客户端必须订阅要接收通知的管理服务器


要订阅服务器,您必须使用服务器密钥发出post请求

对我来说,推送通知最简单的方法是如果我想与Safari、Chrome、Firefox等兼容,我可以用什么来代替FCM?在这种情况下,Socket.io是最好的选择
importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-messaging.js');

firebase.initializeApp({
  'messagingSenderId': '_ID_'
});

const messaging = firebase.messaging();

messaging.setBackgroundMessageHandler(function(payload) {
  console.log('[firebase-messaging-sw.js] Received background message ', payload);
  const notificationTitle = 'Background Message Title';
  const notificationOptions = {
    body: 'Background Message body.',
    icon: '_ICON_'
  };

  return self.registration.showNotification(notificationTitle,
    notificationOptions);
});
  var admin = require("firebase-admin");
  var serviceKey = require("./_KEY_.json");

  admin.initializeApp({
    credential: admin.credential.cert(serviceKey),
    databaseURL: "https://_PROJECTID_.firebaseio.com"
  });

  var registrationToken = "_TOKEN_";

  var notification = {
    data: {
      msg:"Hello!"
    }
  };

  admin.messaging().sendToDevice(registrationToken, notification)
    .then(function(response) {
      console.log("Successfully sent message:", response);
    })
    .catch(function(error) {
      console.log("Error sending message:", error);
    });