gpt4 book ai didi

push-notification - 跨主要浏览器和移动设备发送和接收推送通知

转载 作者:行者123 更新时间:2023-12-02 03:02:28 25 4
gpt4 key购买 nike

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

遵循本指南: https://firebase.google.com/docs/cloud-messaging/js/client

我将此添加到我的 Web 客户端 html(以获取客户端注册 token 并接受推送通知):

<script src="https://www.gstatic.com/firebasejs/4.1.3/firebase.js">
</script>
<script>
firebase.initializeApp({
apiKey: "_APIKEY_",
authDomain: "_ID_.firebaseapp.com",
databaseURL: "https://_ID_.firebaseio.com",
projectId: "_ID_",
storageBucket: "_ID_.appspot.com",
messagingSenderId: "_SENDERID_"
});
/* Is the API Key supposed to be public-facing? */

const messaging = firebase.messaging();
messaging.requestPermission().then(function() {
console.log('Notification permission granted.');

messaging.getToken().then(function(currentToken) {
if (currentToken) {
console.log(currentToken)
} else {
console.log('No Instance ID token available. Request permission to generate one.');
}
}).catch(function(err) {
console.log('An error occurred while retrieving token. ', err);
});
}).catch(function(err) {
console.log('Unable to get permission to notify.', err);
});

messaging.onTokenRefresh(function() {
messaging.getToken().then(function(refreshedToken) {
console.log(refreshedToken)
}).catch(function(err) {
console.log('Unable to retrieve refreshed token ', err);
});
});
</script>

我抓取了客户端生成的注册 token 并添加了一个服务 worker (firebase-messaging-sw.js):

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);
});

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

  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 网络客户端中没有收到任何信息。在 Safari 中,我看到错误:此浏览器不支持使用 firebase SDK 所需的 API。

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

最佳答案

Safari 尚不支持 FCM。 See here

现在为什么你没有收到消息,首先你必须了解实际发生了什么。

客户端正在浏览器中生成 token 。(这就是 generateToken 方法所做的)并且 Firebase 管理员正在运行 fcm 服务器。

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

要订阅服务器,您必须使用您的服务器 key 发出发布请求。 see this

关于push-notification - 跨主要浏览器和移动设备发送和接收推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44873845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com