Firebase Cloud Messaging для веб: как отправить на несколько токенов? - PullRequest
0 голосов
/ 04 июля 2018

Надеюсь, я не получаю отрицательных отзывов об этом, я пытался настроить веб-уведомления для моей CMS, используя Firebase, и я заметил, что Документация Google Firebase по этой теме огромный, я имею в виду очень большой, вы запутались.

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

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

Это мой код:

<!-- Firebase Technologies -->
<!-- Firebase App is always required and must be first -->
<script src="https://www.gstatic.com/firebasejs/5.1.0/firebase-app.js"> 
</script>
<script src="https://www.gstatic.com/firebasejs/5.1.0/firebase- 
messaging.js"></script>
<script>
// Initialize Firebase
var config = {
apiKey: "AIzaSyAR84lF2vbnfUWPZ2899dnqiTthgvfv7Ms",
authDomain: "lazemnicms.firebaseapp.com",
databaseURL: "https://lazemnicms.firebaseio.com",
projectId: "lazemnicms",
storageBucket: "lazemnicms.appspot.com",
messagingSenderId: "268754114869"
};
firebase.initializeApp(config);
messaging = firebase.messaging();
//Registering the service worker
navigator.serviceWorker.register("firebase-messaging-sw.js", {scope: "firebase-cloud-messaging-push-scope"}).then(function (registration) {

messaging.useServiceWorker(registration);

}).catch(function (err) {
  // registration failed :(
  console.log('ServiceWorker registration failed: ', err);
});

permissionGranted = false;

messaging.getToken().then(function(currentToken) {
if (currentToken) {
    console.log(currentToken);
    permissionGranted = true;
    //sendTokenToServer(currentToken);
    //updateUIForPushEnabled(currentToken);
} else {
    permissionGranted = false;
}
}).catch(function(err) {
    permissionGranted = false;
});

А также, если пользователь получил refreshedToken, как я могу узнать старый токен этого пользователя, чтобы я мог удалить его из своей базы данных после сохранения его / ее нового токена?

Эти вопросы меня действительно беспокоят.

Заранее спасибо.

1 Ответ

0 голосов
/ 04 июля 2018

В настоящее время API v1 позволяет отправлять только один токен за раз. Планируется добавить многоадресную рассылку (она присутствовала в предыдущем API ), но у меня нет графика времени, когда она будет доступна. Так что сейчас это означает, что вам нужно будет вызывать API FCM для каждого токена.

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

...