// firebase_subscribe.js firebase.initializeApp({ messagingSenderId: '411645841077' }); // браузер поддерживает уведомления if ('Notification' in window) { var messaging = firebase.messaging(); // пользователь уже разрешил получение уведомлений // подписываем на уведомления если ещё не подписали if (Notification.permission === 'granted') { subscribe(); } } function subscribe() { // запрашиваем разрешение на получение уведомлений messaging.requestPermission() .then(function () { // получаем ID устройства messaging.getToken() .then(function (currentToken) { if (currentToken) { sendTokenToServer(currentToken); } else { console.warn('Не удалось получить токен.'); setTokenSentToServer(false); } }) .catch(function (err) { console.warn('При получении токена произошла ошибка.', err); setTokenSentToServer(false); }); }) .catch(function (err) { console.warn('Не удалось получить разрешение на показ уведомлений.', err); }); } // отправка ID на сервер function sendTokenToServer(currentToken) { if (!isTokenSentToServer(currentToken)) { var url = '/pwa/push/'; $.post(url, { token: currentToken }); setTokenSentToServer(currentToken); } } // используем localStorage для отметки того, // что пользователь уже подписался на уведомления function isTokenSentToServer(currentToken) { return window.localStorage.getItem('sentFirebaseMessagingToken') == currentToken; } function setTokenSentToServer(currentToken) { window.localStorage.setItem( 'sentFirebaseMessagingToken', currentToken ? currentToken : '' ); } subscribe();