Mat*_*unt 9 notifications web firebase firebase-cloud-messaging
如何在 Web 上通过 Firebase Messaging SDK使用通知操作?
人们在尝试此操作时会遇到一些常见的陷阱。
是时候举个例子了。
你的有效载荷的格式应该是这样的:
{
"data": {
"some-data": "Im a string",
"some-other-data": "Im also a string",
"json-data": "{\"actions\": [{\"action\":\"yes\", \"title\":\"Yes\"},{\"action\":\"no\",\"title\":\"No\"}]}"
},
"to": "YOUR-IID-TOKEN"
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样用 curl 发送它:
curl -X POST -H "Authorization: key=YOUR-SERVER-KEY" -H "Content-Type: application/json" -d '{
"data": {
"some-data": "Im a string",
"some-other-data": "Im also a string",
"json-data": "{\"actions\": [{\"action\":\"yes\", \"title\":\"Yes\"},{\"action\":\"no\",\"title\":\"No\"}]}"
},
"to": "YOUR-IID-TOKEN"
}' "https://fcm.googleapis.com/fcm/send"
Run Code Online (Sandbox Code Playgroud)
这样你就可以onBackgroundMessage在你的服务工作者的回调中获取数据。
在 Service Worker 中,我们可以使用以下代码:
messaging.setBackgroundMessageHandler(function(payload) {
console.log('Message received: ', payload);
});
Run Code Online (Sandbox Code Playgroud)
这将在控制台中打印出以下内容:
请注意,JSON 数据仍然只是一个字符串,而不是一个对象。
接下来我们可以解析 JSON 数据并检查它的正确格式以用作我们的通知操作。
我们可以将代码更改为以下内容:
messaging.setBackgroundMessageHandler(function(payload) {
console.log('Message received: ', payload);
const parsedJSON = JSON.parse(payload.data['json-data']);
console.log('Actions:', parsedJSON);
});
Run Code Online (Sandbox Code Playgroud)
这将提供以下日志:
有了这个,我们最终可以使用以下代码创建我们的通知:
messaging.setBackgroundMessageHandler(function(payload) {
console.log('Message received: ', payload);
const parsedJSON = JSON.parse(payload.data['json-data']);
console.log('Actions:', parsedJSON);
// Customize notification here
const notificationTitle = 'Actions Title';
const notificationOptions = {
body: 'Actions body.',
actions: parsedJSON.actions,
};
return self.registration.showNotification(notificationTitle,
notificationOptions);
});
Run Code Online (Sandbox Code Playgroud)
现在你应该有一个带有操作的通知:
正如 Meggin 在评论中指出的那样,如何测试它并不明显,所以有一些指导原则。
最大的痛点是,如果您的 Web 服务器为您的 Service Worker 文件设置了缓存标头,则它不会在刷新之间更新,解决此问题的一种方法是在新选项卡中打开您的 Service Worker 文件并刷新该页面,直到您Service Worker 是最新的(这是查看 Service Worker 的实际源代码)。然后,当您刷新网页时,您的 Service Worker 将是最新的,您可以通过 Service Worker 旁边的数字递增来判断它已更新。
或者,只需将服务工作者取消注册服务工作者并刷新页面 - 这将为您提供最新的服务工作者。
要测试您的通知,您需要在发送推送消息之前单击不同网页的选项卡。
这样做的原因是,如果用户当前在您的页面之一,推送消息将发送到页面onMessage()回调而不是onBackgroundMessage()回调。
| 归档时间: |
|
| 查看次数: |
6106 次 |
| 最近记录: |