Сообщения успешно отправлены, но уведомлений в Firebase Cloud Messaging не видно - PullRequest
0 голосов
/ 27 марта 2019

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

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

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

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

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

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

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

Разрешение на уведомление установлено на обоих устройствах.

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

firebase-сообщений-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, а также примеры на github.

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

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

ОБНОВЛЕНИЕ ....

Я нашел две причины не видеть уведомления.

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

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

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

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

1 Ответ

0 голосов
/ 06 апреля 2019

Вводное видео для обмена сообщениями говорит о том, что плохой UX - получать уведомления от веб-сайта, появляющегося, когда кто-то находится на сайте. Поэтому код может включать 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);
    }
    });

``````````



...