Сообщения успешно отправлены, но уведомления не отображаются в Firebase Cloud Messaging

#firebase #push-notification #firebase-cloud-messaging

#firebase #push-уведомление #firebase-cloud-messaging

Вопрос:

Сообщения отображаются как успешно отправленные, но всплывающие уведомления не отображаются.

С помощью onMessage иногда возможно зарегистрировать сообщение.

Запрос токена FCM работает только на localhost.

При попытке на сайте .com сообщение об ошибке зависит от того, использую ли я ПК или chromebook — генерируемые сообщения об ошибках отличаются.

Я использовал 2 разных устройства, но всегда браузер Chrome. Облачная функция записывает сообщение и ответ FCM в журнал функций, что подтверждает успешную отправку.

Когда я удалил onMessage с веб-страницы получателя, не было никаких признаков какого-либо уведомления.

Веб-страница открыта во время этих испытаний. Это веб / javascript.

Для разрешения уведомлений установлено значение разрешить на обоих устройствах.

Я потратил часы на поиск в Интернете, пытаясь найти какой-либо намек на то, что попробовать.

firebase-messaging-sw.js

 importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/3.9.0/firebase-messaging.js');


firebase.initializeApp({
  'messagingSenderId': '593287500713' 
});

const messaging = firebase.messaging();
  

соответствующий код, который выполняется с веб-страницей

  messaging.onMessage(function (payload) {
      console.log('Message received. ', payload);
    });
  

Я предполагаю, что без onMessage уведомления должны отображаться на основе Firebase SDK, но этого не происходит. НЕВЕРНОЕ ПРЕДПОЛОЖЕНИЕ

В фоновом режиме ничего не отображается. (Я думаю, уведомления должны появляться автоматически.)

Я могу запросить и получить токен FCM при запуске на локальном хосте, но тот же код выдает ошибку при развертывании. «В запросе отсутствует требуемая аутентификация …»

Я связался со службой поддержки @ Google, которая заверила меня, что это предложение, а затем еще одно, на 100% устранит проблему. Ничто не имело никакого значения.

Я попробовал фрагменты кода в Firebase docs, а также примеры github.

Если бы я мог найти существующий код, который работает, это было бы отличным началом, потому что я думаю, что найти решение после примерно 40 часов усилий безнадежно.

Я пропустил что-то очевидное?

Обновления….

Я обнаружил две причины, по которым уведомления не отображаются.

1) На моем компьютере была установлена настройка, которая, похоже, частично подавила отображение. Неожиданно, потому что отображаются уведомления YouTube. (Откройте панель уведомлений в правом нижнем углу экрана. «помощь в фокусировке» с символом полумесяца. Если при нажатии на него написано «включено» или «только сигналы тревоги», я думаю, это ограничивает то, что видно.)

2) Мое предположение, основанное на документах Firebase и видео, заключалось в том, что onMessage () предназначен для предотвращения уведомлений, когда пользователь находится на веб-странице, и позволяет разработчику игнорировать или обрабатывать уведомления на странице. Наполовину верно. По-видимому, уведомления по умолчанию игнорируются, ЕСЛИ onMessage () что-то с ними не сделает. В документах приведены фрагменты кода для onMessage (), но только как войти в консоль.

Кроме того, обнаружена забавная проблема. Теперь, когда мой компьютер зарегистрировал получателя сообщений, он получает их, даже если этот получатель вышел из системы и вошел в систему на другом устройстве. Это звучит как проблема.

Текущая рабочая версия кода. Это отображается на веб-странице / в приложении (НЕ в messaging-sw.js файл

Ответ №1:

Вводное видео по обмену сообщениями предполагает, что это плохой пользовательский интерфейс, когда уведомления с веб-сайта появляются, когда кто-то находится на веб-сайте. Поэтому код может включать onMessage () либо для игнорирования уведомления, либо для обработки его на странице.

В документах приведена версия onMessage, которая просто регистрирует уведомление на консоли и содержит комментарий о выполнении чего-то еще.

В других частях документации объясняется, что система автоматически отображает уведомления.

Поэтому я сделал вывод, что без onMessage () уведомления будут отображаться автоматически.

Кажется, я был неправ.

Мне потребовалось огромное количество времени, чтобы разобраться в этом и найти некоторый код для отображения уведомлений. (Даже сейчас я не уверен, что понял, что происходит, но, похоже, следующее работает)

Это отображается на веб-странице / в приложении. (Не в messaging-sw.js. При их размещении будет выдана ошибка «использование оконных методов»)

[Обратите внимание, что я также обнаружил, что мой компьютер был настроен таким образом, который, казалось, позволял YouTube отправлять уведомления, но не позволял отображать уведомления FCM. (Смотрите объяснение в вопросе)

До сих пор я тестировал это, когда веб-страница открыта, веб-страница работает в фоновом режиме и когда браузер закрыт. Уведомления отображаются со звуком по умолчанию и отображаются в панели уведомлений.

Это также происходит, если получатель вышел из веб-страницы и вошел в систему на другом устройстве.. сообщения продолжают поступать на то же устройство.

Сообщения отправляются на устройства, а не пользователям]

  messaging.onMessage(function (payload) { 
      try{  //try???
      console.log('Message received. ', payload);

      noteTitle = payload.notification.title; 
      noteOptions = {
        body: payload.notification.body,
        icon: "typewriter.jpg", //this is my image in my public folder
      };

      console.log("title ",noteTitle, " ", payload.notification.body);
          //var notification = //examples include this, seems not needed

      new Notification(noteTitle, noteOptions);//This can be used to generate a local notification, without an incoming message. noteOptions has to be an object
    }
    catch(err){
      console.log('Caught error: ',err);
    }
    });

``````````