[英]Firebase Cloud Messaging requireInteraction not work
Reference: https://github.com/firebase/quickstart-js/tree/master/messaging 参考: https : //github.com/firebase/quickstart-js/tree/master/messaging
I have added the key-value pair: 我添加了键值对:
"requireInteraction": true
But the notification in Desktop Chrome still disappear after 20 seconds. 但是20秒钟后,桌面Chrome中的通知仍会消失。 Does any one know if Firebase supports this key-value pair?
有谁知道Firebase是否支持此键值对吗? Thanks!
谢谢!
My example below. 我的例子如下。 Please change
[...]
to yours. 请更改
[...]
到你的。
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 strips the requireInteraction
property from the notification
payload when the message is delivered. 传递邮件时,Firebase会从
notification
有效负载中剥离requireInteraction
属性。 The workaround that works is to use the data
property instead of the notification
. 可行的解决方法是使用
data
属性而不是notification
。 You can then use the setBackgroundMessageHandler()
method to build the notification as you want it to be: 然后,您可以使用
setBackgroundMessageHandler()
方法来构建所需的通知:
messaging.setBackgroundMessageHandler(function (payload) {
return self.registration.showNotification(payload.data.title,
Object.assign({data: payload.data}, payload.data));
});
I've set data
above, because the click_action
no longer works with this approach and you need to register the desired onclick handler yourself. 我已经在上面设置了
data
,因为click_action
不再适用于这种方法,并且您需要自己注册所需的onclick处理程序。 Here's a working service worker that does exactly what you intend with your set notification
, but uses the data property instead: 这是一个工作中的服务人员,可以完全按照您的设置
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]
Where this would be your curl call: 这将是您的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"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.