#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);
}
});
``````````