#angular #firebase #firebase-cloud-messaging #service-worker
#angular #firebase #firebase-облако-обмен сообщениями #service-worker
Вопрос:
Я добавил click_action
параметры в push
функцию. Вот мой пример кода.
self.addEventListener("push", function(event) {
var title = event.data.json().notification.title;
var body = event.data.json().notification.body;
var icon = "/assets/img/logo.png";
var click_action =
"http://localhost:4200/#/jobs/notification/"
event.data.json().data.job_no;
event.waitUntil(
self.registration.showNotification(title, {
body: body,
icon: icon,
click_action: click_action
})
);
});
Для обработки click
на notification
, определен notificationclick
обработчик событий.
Например:
self.addEventListener('notificationclick', function(event) {
var redirect_url = event.notification.data.click_action;
event.notification.close();
event.waitUntil(
clients
.matchAll({
type: "window"
})
.then(function(clientList) {
console.log(clientList);
for (var i = 0; i < clientList.length; i ) {
var client = clientList[i];
if (client.url === "/" amp;amp; "focus" in client) {
return client.focus();
}
}
if (clients.openWindow) {
return clients.openWindow(redirect_url);
}
})
);
});
Но я не могу получить click_action
параметр в notificationclick
функции. Я хочу перенаправить push-уведомление на указанный URL в click_action
.
Пожалуйста, помогите мне.
Ответ №1:
Я решил эту проблему. Я отправил дополнительный параметр в запросе. Вот мой пример кода:
self.addEventListener("push", function(event) {
var title = event.data.json().notification.title;
var body = event.data.json().notification.body;
var icon = "/assets/img/logo.png";
var click_action =
"http://localhost:4200/#/jobs/notification/"
event.data.json().data.job_no;
event.waitUntil(
self.registration.showNotification(title, {
body: body,
icon: icon,
data: {
click_action
}
})
);
});
И используя click_action
, и вот пример кода:
self.addEventListener('notificationclick', function(event) {
var redirect_url = event.notification.data.click_action;
event.notification.close();
event.waitUntil(
clients
.matchAll({
type: "window"
})
.then(function(clientList) {
console.log(clientList);
for (var i = 0; i < clientList.length; i ) {
var client = clientList[i];
if (client.url === "/" amp;amp; "focus" in client) {
return client.focus();
}
}
if (clients.openWindow) {
return clients.openWindow(redirect_url);
}
})
);
});
Комментарии:
1. привет, ребята, не могли бы вы, пожалуйста, помочь мне разобраться в этой проблеме. в каком файле вы объявили этот метод. когда я использую этот метод в firebase-messaging-sw.js . Я не показал никакого отражения
2. @NikitaGarg если у вас все еще возникают проблемы, попробуйте отправить сообщение с помощью fcmOptions. Надеюсь, это поможет…
Ответ №2:
Реализация ‘notificationclick‘ не сработала у меня с использованием Google firebase cloud messaging. Вместо этого я использовал fcmOptions, поскольку реализация предназначена только для перенаправления, а ссылкой можно управлять с сервера.
Читая ссылку на документацию, очевидно, что она не обслуживается с помощью fcmOptions, и, пожалуйста, обратите внимание, что это должна быть ссылка HTTPs. В документе указано использование fcm_options, который, возможно, устарел, поскольку он был переименован в fcmOption
Способ отправки сообщения (вручную), который сработал для меня, заключается в
var message = {
data: {
a:1
},
notification: {
title: 'title',
body: 'body'
},
webpush: {
fcmOptions: {
link: 'https://www.walcron.com'
}
},
token: VALID_TOKEN
};
Всем, кто занимается этим Firebase CM, удачи. Потратил несколько часов на просмотр документов service-worker, firebase-admin и this GCM. В конце концов, кодов очень мало, но их действительно трудно переварить, поскольку область действия была такой большой!