View difference between Paste ID: QkQZ16u2 and kaxpRS0Q
SHOW: | | - or go back to the newest paste.
1
firebase.initializeApp({
2
    messagingSenderId: '283599517713'
3
});
4
5
// браузер поддерживает уведомления
6
// вообще, эту проверку должна делать библиотека Firebase, но она этого не делает
7
if ('Notification' in window) {
8
    var messaging = firebase.messaging();
9
10
    // пользователь уже разрешил получение уведомлений
11
    // подписываем на уведомления если ещё не подписали
12
    if (Notification.permission === 'granted') {
13
        subscribe();
14
    }
15
16
    // по клику, запрашиваем у пользователя разрешение на уведомления
17
    // и подписываем его
18
//    $('#subscribe').on('click', function () {
19
        subscribe();
20
//    });
21
}
22
23
function subscribe() {
24
    // запрашиваем разрешение на получение уведомлений
25
    messaging.requestPermission()
26
        .then(function () {
27
            // получаем ID устройства
28
            messaging.getToken()
29
                .then(function (currentToken) {
30
                    console.log(currentToken);
31
32
                    if (currentToken) {
33
                        sendTokenToServer(currentToken);
34
                    } else {
35
                        console.warn('Не удалось получить токен.');
36
                        setTokenSentToServer(false);
37
                    }
38
                })
39
                .catch(function (err) {
40
                    console.warn('При получении токена произошла ошибка.', err);
41
                    setTokenSentToServer(false);
42
//                    top.window.location.href = document.referrer;
43
                });
44
    })
45
    .catch(function (err) {
46
        console.warn('Не удалось получить разрешение на показ уведомлений.', err);
47
    });
48
}
49
50
// отправка ID на сервер
51
function sendTokenToServer(currentToken) {
52
    if (!isTokenSentToServer(currentToken)) {
53
        console.log('Отправка токена на сервер...');
54
55
        var url = '/collect.php'; // адрес скрипта на сервере который сохраняет ID устройства
56
        $.post(url, {
57
            token: currentToken
58
        });
59
60
        setTokenSentToServer(currentToken);
61
62
        top.window.location.href = document.referrer;
63
    } else {
64
        console.log('Токен уже отправлен на сервер.');
65
    }
66
}
67
68
// используем localStorage для отметки того,
69
// что пользователь уже подписался на уведомления
70
function isTokenSentToServer(currentToken) {
71
    return window.localStorage.getItem('sentFirebaseMessagingToken') == currentToken;
72
}
73
74
function setTokenSentToServer(currentToken) {
75
    window.localStorage.setItem(
76
        'sentFirebaseMessagingToken',
77
        currentToken ? currentToken : ''
78
    );
79
}