Веб-push-уведомление FCM не может нажать на ссылку уведомления click_action

#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. В конце концов, кодов очень мало, но их действительно трудно переварить, поскольку область действия была такой большой!