Как заставить `fcm_options.link` функционировать в веб-уведомлениях firebase

#node.js #firebase #push-notification #firebase-cloud-messaging

#node.js #firebase #push-уведомление #firebase-облако-обмен сообщениями

Вопрос:

Я пытаюсь заставить мои веб-уведомления FCM содержать интерактивную ссылку на мой сайт, используя firebase admin SDK (версия 7.0.0) для node.js . Насколько я могу судить, я полностью следую документации, но я не могу заставить ссылку работать. Чтобы уточнить, мои уведомления работают нормально в противном случае, это просто ссылка, с которой я не должен работать.

В документации говорится:

Для уведомлений, отправляемых с сервера приложений, JavaScript API FCM поддерживает ключ fcm_options.link. Обычно это значение задается для страницы в вашем веб-приложении

Я включил webpush.fcm_options.link в свое уведомление. Я позаботился о том, чтобы включить в свое сообщение явную notification полезную нагрузку, поскольку в документации указано, что data сообщения не поддерживают fcm_options.link .

Вот структура моего сообщения на данный момент:

 {
    notification: {
        title: 'Title',
        body: 'Body',
    },
    data: {
       // my data here
    },
    webpush: {
        notification: {
            requireInteraction: true,
            icon: '/icons/notification.png'
        },
        fcm_options: {
            link: 'https://example.com/'
        }
    },
    // android: {},
    // apns: {},
    topic: 'sometopic'
};
  

Вот функция, которую я использую для отправки сообщения:

 const admin = require('firebase-admin')

const sendMessage = message => {
    admin
        .messaging()
        .send(message)
        .then(response => {
            console.log(response)
        })
        .catch(error => {
            console.log(error)
        });
};
  

link Свойство должно работать в соответствии с документацией: мой URL включает https и мое уведомление отправляется с сервера приложений и включает в себя явную полезную нагрузку уведомления. На данный момент нажатие на уведомление просто приводит к его исчезновению, и больше ничего не происходит.

Комментарии:

1. Хм… Все выглядит правильно. Я хотел убедиться, что вы используете новый FCM API, и, похоже, так оно и есть. Какую версию Admin вы используете? Тем временем я постараюсь узнать больше от команды

2. @JenPerson использует 7.1.1 несколько дней назад, и да, я использую api версии v1. большое спасибо за вашу помощь!

3. Не могли бы вы также сообщить, какую версию Firebase client SDK вы используете?

4. @MertcanMermerkaya 5.8.5

5. Должно быть достаточно всего двух строк: firebase.initializeApp(<your_app_config>); firebase.messaging(); . Если вы не вызовете setBackgroundMessageHandler , SDK сам создаст уведомление и link должно сработать.

Ответ №1:

ОБНОВЛЕНИЕ: Я разобрался, в чем была проблема — мой сотрудник службы использовал importScripts функцию, но я использовал устаревшую версию скрипта firebase, который не поддерживал fcm_options.link . Я изменил его на свою текущую версию firebase ( 5.8.5 ), и это работает. Все отсортировано!

Комментарии:

1. Возникла та же проблема, и оказалось то же самое, спасибо за обновление.

2. @camargue92 Спасибо. Это сделало это за меня. Думаю, мы скопировали код из руководства по firebase . Вы должны пометить это как принятое.

3. моя текущая версия 7.6.2, уже совместимая с sw.js но fcm выдает ошибку при отправке Messaging payload contains an invalid "webpush" property. Valid properties are "data" and "notification" каких-либо других подсказок?

4. В итоге я использую тип данных FCM и обрабатываю отображение уведомления (и события щелчка) от service worker notificationclick

Ответ №2:

в уведомлении попробуйте это

 "notification":{
"title":"IssA",
"body":"Lafi",
"icon": "Icon URL",
"click_action": "Your URL here"
}
  

Комментарии:

1. это текущее решение для javascript SDK 7.1.0

2. это для Firebase FCM

Ответ №3:

В последней версии, с использованием firebase admin в node js, это правильная конфигурация:

         var message = {
          notification: {
            title: "",
            body: ""                
          },
          webpush: {
            fcmOptions: {
              link: "https://yourlink.web.app"
            }
          }
        };