16

Я пытаюсь использовать Firebase messaging (web). Firebase по умолчанию ищет файл «firebase-messaging-sw.js», который содержит обслуживающего работника.Firebase: изменить местоположение обслуживающего персонала

Ожидается, что сценарий сервисного работника будет на абсолютном пути к приложению! Например: http://localhost/firebase-messaging-sw.js

Как изменить это местоположение по умолчанию ?! Поиск в официальных документах я нашел этот метод: useServiceWorker, который принимает регистрацию рабочего пользователя, но пытается его использовать. Я получаю сообщение об ошибке, что метод даже не существует!

Итак, как изменить местоположение сервисного работника для обмена сообщениями firebase?

ответ

28

Как Майкл выкрикнул, способ использования userServiceWorker(<registration>).

https://firebase.google.com/docs/reference/js/firebase.messaging.Messaging#useServiceWorker

Класс сообщений является то, что возвращается при вызове firebase.message().

Так образец будет:

navigator.serviceWorker.register('./example/sw.js') 
.then((registration) => { 
    messaging.useServiceWorker(registration); 

    // Request permission and get token..... 
}); 

Я просто попытался это на демо-приложение на Github без выпуска: https://github.com/firebase/quickstart-js/tree/master/messaging

6

Вы должны иметь возможность сделать firebase.messaging().useServiceWorker(registration) и пройти регистрацию существующего регистратора. Обратите внимание, что вы должны сделать это как можно раньше до любых вызовов, например. getToken() или onMessage().

+0

Да, конечно. Но, пытаясь этого, я получаю 'метод не существует'! – Dewan159

+0

Это работает для меня - вы уверены, что сделали «firebase.messaging(). UseServiceWorker()», а не 'firebase.messaging.useServiceWorker()'? –

+0

Также обратите внимание, что этот API был добавлен в версию 3.5.0 библиотеки, поэтому убедитесь, что вы обновили, по крайней мере, эту версию. – jwngr

0

С помощью useServiceWorker(registration) вы можете использовать notificationonclick событие на Firebase нажимной сообщений через выход щего сервиса работник.

firebase.messaging().useServiceWorker(registration) работает и решить мою проблему, но имейте в виду, что я не знаю, если:

  • это безопасный способ получить полезную нагрузку с сервера.

  • Это лучший способ обработки push-уведомлений.

+0

Является ли это ответом на вопрос или вы задаете вопросы (пункты)? –

+0

Пулевые пункты - это мои запросы, у меня нет идеи о безопасности и производительности при использовании Firebase Messaging с сервисным работником. Поскольку этот вопрос связан с этой темой, я не собираюсь создавать отдельный вопрос. –

+0

Я отредактировал формулировку в вашем ответе, так что ваши маркеры теперь относятся к другим пользователям (вместо вопросов). Ваш ответ - хорошее дополнение к этому вопросу, спасибо! –

Смежные вопросы