作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
引用:https://github.com/firebase/quickstart-js/tree/master/messaging
我已经添加了键值对:
"requireInteraction": true
但桌面 Chrome 中的通知在 20 秒后仍然消失。有谁知道 Firebase 是否支持这个键值对?谢谢!
下面是我的例子。请将 [...]
更改为您的。
curl -X POST -H "Authorization: key=[...]" -H "Content-Type: application/json" -d '{
"notification": {
"requireInteraction": true,
"title": "This is custom title",
"body": "this is custom body",
"click_action": "https://google.com",
"data" : {"requireInteraction": true }
},
"to": "[...]",
}' "https://fcm.googleapis.com/fcm/send"
最佳答案
Firebase 在传递消息时从 notification
有效负载中剥离 requireInteraction
属性。可行的解决方法是使用 data
属性而不是 notification
。然后,您可以使用 setBackgroundMessageHandler()
方法来构建您希望的通知:
messaging.setBackgroundMessageHandler(function (payload) {
return self.registration.showNotification(payload.data.title,
Object.assign({data: payload.data}, payload.data));
});
我在上面设置了 data
,因为 click_action
不再适用于这种方法,您需要自己注册所需的 onclick 处理程序。这是一个工作的服务工作人员,它完全按照您的意图使用您的设置 notification
,但使用 data 属性:
// import scripts omitted
const messaging = firebase.messaging();
// [END initialize_firebase_in_sw]
self.addEventListener('notificationclick', e => {
let found = false;
let f = clients.matchAll({
includeUncontrolled: true,
type: 'window'
})
.then(function (clientList) {
for (let i = 0; i < clientList.length; i ++) {
if (clientList[i].url === e.notification.data.click_action) {
// We already have a window to use, focus it.
found = true;
clientList[i].focus();
break;
}
}
if (! found) {
clients.openWindow(e.notification.data.click_action).then(function (windowClient) {});
}
});
e.notification.close();
e.waitUntil(f);
});
// [START background_handler]
messaging.setBackgroundMessageHandler(function (payload) {
console.log('[firebase-messaging-sw.js] Received background message ', payload);
// Customize notification here
return self.registration.showNotification(payload.data.title,
Object.assign({data: payload.data}, payload.data));
});
// [END background_handler]
这将是您的 curl 调用:
curl -X POST -H "Authorization: key=yourKey-" -H "Content-Type: application/json" -d '{
"data": {
"title": "fooTitle",
"body": "foo",
"icon": "image.jpg",
"click_action": "http://localhost:8000",
"requireInteraction": true
},
"registration_ids": ["id1", "id2"]
}' "https://fcm.googleapis.com/fcm/send"
关于javascript - Firebase 云消息传递 requireInteraction 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42063675/
引用:https://github.com/firebase/quickstart-js/tree/master/messaging 我已经添加了键值对: "requireInteraction":
我是一名优秀的程序员,十分优秀!