Firebase раздевает requireInteraction
свойства от notification
полезной нагрузки, когда сообщение будет доставлено. Обходной путь, который работает, заключается в использовании свойства 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
, но использует свойство данных вместо:
// 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 -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"
Привет Самуил. Я не думаю, что ['requireInteraction'] (https://developers.google.com/web/updates/2015/10/notification-requireInteraction) - это то, что вы должны установить в своей полезной нагрузке. Его следует просто объявить, когда вы * строите * уведомление. Если вопрос только о поддержке, то 'requireInteraction' не принадлежит к полезной нагрузке« уведомление », но * может существовать * в« полезной нагрузке данных ». :) –
@AL. Я попытался добавить requireInteraction: true в полезной нагрузке данных или полезной нагрузке уведомления, но всплывающее уведомление на моем рабочем столе Chrome все равно исчезает через 20 секунд. –
. Одно из всплывающих окон ниже демонстрации не будет закрыто, пока пользователь не нажмет на него. https://googlechrome.github.io/samples/notifications/requireInteraction.html –