Невозможно загрузить URL-адрес данных для push-уведомлений GCM для Chrome в событии "messagesclick"
Работая над push-уведомлениями GCM для Chrome, я настроил push-уведомления на случай, когда работник службы получает push-уведомление для GCM.
Я запускаю сервисный звонок. Эта служба возвращает объект данных, в котором у меня есть URL, который я хочу открыть в тот момент, когда пользователь нажимает на уведомление.
Вот код, который у меня есть.
Var urlOpen = null;
self.addEventListener('push', function(event) {
event.waitUntil(
fetch(serviceLink).then(function(response) {
if (response.status !== 200) {
console.log('Looks like there was a problem. Status Code: ' +
response.status);
throw new Error();
}
return response.json().then(function(data) {
console.log(data);
var title = data.title;
var body = data.desc;
var icon = data.image;
var tag = 'notification tag';
urlOpen = data.clickUrl;
return self.registration.showNotification(title, {
body: body,
icon: icon,
tag: tag
})
});
})
);
});
self.addEventListener('notificationclick', function(event) {
event.waitUntil(
clients.openWindow(urlOpen).then(function (){
event.notification.close();}));
});
Это работает нормально, но иногда на некоторых устройствах уведомления. Но при нажатии на уведомления открывается null
в строке браузера.
Что я делаю неправильно?
1 ответ
Вы не можете рассчитывать на вашего работника службы, существующего между push
событие и notificationclick
событие. Браузер может очень хорошо закрыть работника после push
событие было обработано, а затем перезапустите его для notificationclick
событие, означающее, что ваш urlOpen
переменная была переинициализирована в null
,
Я думаю, что вы, вероятно, можете как-то сохранить URL-адрес на самом объекте уведомления, что было бы лучше - похоже, здесь есть пример этого. В противном случае вам придется сохранить его в indexedDB или что-то в этом роде.