Веб
Перш ніж запускати веб-інтеграцію, переконайтеся, що налаштування Налаштування - Firebase було повністю завершено.
-
Налаштуйте Google Analytics на головній сторінці:
index.html1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
<html lang="en"> <script type="text/javascript" async="" src="https://www.google-analytics.com/analytics.js"></script> <script type="text/javascript" async="" src="https://www.googletagmanager.com/gtag/js?id=<YOUR_ID>&l=dataLayer&cx=c"></script> <script type="module" src="chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/hook.js"></script> <head> <meta charset="UTF-8"> <title>Push test</title> <link rel="manifest" href="manifest.json"/> <!-- Global site tag (gtag.js) - Google Analytics --> <script async="" src="https://www.googletagmanager.com/gtag/js?<YOUR_ID>"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '<YOUR_ID>'); </script> </head>
-
Додати Firebase SDK:
-
Якщо ви використовуєте npm і модульний пакувальник, такий як Webpack або Rollup, ви можете встановити Firebase SDK за допомогою:
npm install firebase
-
Ініціалізуйте Firebase SDK за допомогою коду:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
import { initializeApp } from "firebase/app"; import { getAnalytics } from "firebase/analytics"; const firebaseConfig = { apiKey: "", authDomain: "", projectId: "", storageBucket: "", messagingSenderId: "", appId: "", measurementId: "", }; // використовувати config з початкового налаштування веб-застосунку Firebase const app = initializeApp(firebaseConfig); const analytics = getAnalytics(app);
1 2 3 4 5 6 7 8 9 10 11 12 13
import { initializeApp } from "firebase/app"; const firebaseConfig = { apiKey: "", authDomain: "", projectId: "", storageBucket: "", messagingSenderId: "", appId: "", measurementId: "", }; // використовувати config з початкового налаштування веб-застосунку Firebase const app = initializeApp(firebaseConfig);
Помістіть скрипт в HTML коді сайту:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<script type="module"> import { initializeApp } from "https://www.gstatic.com/firebasejs/9.4.1/firebase-app.js"; import { getAnalytics } from "https://www.gstatic.com/firebasejs/9.4.1/firebase-analytics.js"; const firebaseConfig = { apiKey: "", authDomain: "", projectId: "", storageBucket: "", messagingSenderId: "", appId: "", measurementId: "", }; // використовувати config з початкового налаштування веб-застосунку Firebase const app = initializeApp(firebaseConfig); const analytics = getAnalytics(app); </script> </span> </span> </span> </span> </p
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<script type="module"> import { initializeApp } from "https://www.gstatic.com/firebasejs/9.4.1/firebase-app.js"; const firebaseConfig = { apiKey: "", authDomain: "", projectId: "", storageBucket: "", messagingSenderId: "", appId: "", measurementId: "", }; // використовувати config з початкового налаштування веб-застосунку Firebase const app = initializeApp(firebaseConfig); </script> </span> </span> </span> </span> </p
-
-
Налаштування хмарних повідомлень:
1 2 3 4 5 6 7 8 9
import { getMessaging, getToken } from "firebase/messaging"; getToken(messaging, { vapidKey: '<ВАШ_ПУБЛІЧНИЙ_VAPID_KEY_FROM_FIREBASE_INITIAL_SETUP>' }) .then(token => { // надсилаємо запит до методу NeuCurrent на реєстрацію токену згідно з інтерфейсом NeuCurrent API Swagger UI. Дивіться приклад нижче }) .catch(err => { // обробити помилку або відмовити у видачі дозволу });
Надсилання запиту до NeuCurrent API
Зверніть увагу, що в коді ви повинні відправити HTTP-запит до NeuCurrent API з отриманим токеном пристрою. Дивіться приклад нижче:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
getToken(messaging, { vapidKey: '<Ваш_PUBLIC_VAPID_KEY_FROM_FIREBASE_INITIAL_SETUP>' }) .then(token => { // надсилаємо запит до методу NeuCurrent на реєстрацію токену згідно з інтерфейсом NeuCurrent API Swagger UI. Дивіться приклад нижче const googleAnalyticsData = () => {}; const data = {}; const token = {}; const data = {}; const const data = {}; gtag('get', '<YOUR_GTAG>', 'client_id', clientId => { data.clientId = clientId; }) повернути дані; }; let gaData = googleAnalyticsData(); let credentials = {{}. ім'я користувача: '<>', password: '<>' }; // запитуємо облікові дані у команди NeuCurrent fetch('https://app.neucurrent.com/push/api/v1/oauth/rotate-token/', { метод: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(credentials) }) .then(async response => { let {токен_доступу, тип_токена_доступу} = await response.json(); let body = { "device_data": { "device_token": token, "платформа": "WEB", "event_name": "device_token_event", "device_id": gaData.clientId }, "client_keys": { "device_id": gaData.clientId, "client_id": gaData.clientId, "email": "<EMAIL_КОРИСТУВАЧА_ЯКЩО_ІСНУЄ>", "phone": "<ТЕЛЕФОН_КОРИСТУВАЧА_ЯКЩО_ІСНУЄ>", "номер_картки_лояльності": "<НОМЕР_КАРТКИ_ЛОЯЛЬНОСТІ_ЯКЩО_ІСНУЄ>" } }; fetch('https://app.neucurrent.com/push/api/v1/device-token/add/', { method: 'POST', headers: { 'Content-Type': 'application/json', Авторизація: `${access_token_type} ${access_token}` }, body: JSON.stringify(body) }) .catch(err => { console.error(err) }) }) .catch(err => { console.error(err) // обробити помилку або відмовити в дозволі });
- Повний приклад:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
import { initializeApp } from "firebase/app"; import { getAnalytics } from "firebase/analytics"; import { getMessaging, getToken } from "firebase/messaging"; const firebaseConfig = { apiKey: "", authDomain: "", projectId: "", storageBucket: "", messagingSenderId: "", appId: "", measurementId: "", }; // використовувати config з початкового налаштування веб-застосунку Firebase const app = initializeApp(firebaseConfig); const analytics = getAnalytics(app); getToken(messaging, { vapidKey: '<YOUR_PUBLIC_VAPID_KEY_FROM_FIREBASE_INITIAL_SETUP>' }) .then(token => { // надсилаємо запит до методу NeuCurrent на реєстрацію токену згідно з інтерфейсом NeuCurrent API Swagger UI. Дивіться приклад нижче const googleAnalyticsData = () => {}; const data = {}; const token = {}; const data = {}; const const data = {}; gtag('get', '<YOUR_GTAG>', 'client_id', clientId => { data.clientId = clientId; }) повернути дані; }; let gaData = googleAnalyticsData(); let credentials = {{}. ім'я користувача: '<>', password: '<>' }; // запитуємо облікові дані у команди NeuCurrent fetch('https://app.neucurrent.com/push/api/v1/oauth/rotate-token/', { метод: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(credentials) }) .then(async response => { let {токен_доступу, тип_токена_доступу} = await response.json(); let body = { "device_data": { "device_token": token, "платформа": "WEB", "event_name": "device_token_event", "device_id": gaData.clientId }, "client_keys": { "device_id": gaData.clientId, "client_id": gaData.clientId, "email": "<EMAIL_КОРИСТУВАЧА_ЯКЩО_ІСНУЄ>", "phone": "<ТЕЛЕФОН_КОРИСТУВАЧА_ЯКЩО_ІСНУЄ>", "номер_картки_лояльності": "<НОМЕР_КАРТКИ_ЛОЯЛЬНОСТІ_ЯКЩО_ІСНУЄ>" } }; fetch('https://app.neucurrent.com/push/api/v1/device-token/add/', { метод: 'POST', headers: { 'Content-Type': 'application/json', Авторизація: `${access_token_type} ${access_token}` }, body: JSON.stringify(body) }) .catch(err => { console.error(err) }) }) .catch(err => { console.error(err) // обробити помилку або відмовити в дозволі });
5. Створіть та запустіть додаток1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
<script type="module"> import { initializeApp } from "https://www.gstatic.com/firebasejs/9.4.1/firebase-app.js"; import { getAnalytics } from "https://www.gstatic.com/firebasejs/9.4.1/firebase-analytics.js"; import { getMessaging, getToken } from "https://www.gstatic.com/firebasejs/9.4.1/firebase-messaging.js";; const firebaseConfig = { apiKey: "", authDomain: "", projectId: "", storageBucket: "", messagingSenderId: "", appId: "", measurementId: "", }; // використовувати config з початкового налаштування веб-застосунку Firebase const app = initializeApp(firebaseConfig); const analytics = getAnalytics(app); getToken(messaging, { vapidKey: '<YOUR_PUBLIC_VAPID_KEY_FROM_FIREBASE_INITIAL_SETUP>' }) .then(token => { // надсилаємо запит до методу NeuCurrent на реєстрацію токену згідно з інтерфейсом NeuCurrent API Swagger UI. Дивіться приклад нижче const googleAnalyticsData = () => {}; const data = {}; const token = {}; const data = {}; const const data = {}; gtag('get', '<YOUR_GTAG>', 'client_id', clientId => { data.clientId = clientId; }) повернути дані; }; let gaData = googleAnalyticsData(); let credentials = {{}. ім'я користувача: '<>', password: '<>' }; // запитуємо облікові дані у команди NeuCurrent fetch('https://app.neucurrent.com/push/api/v1/oauth/rotate-token/', { метод: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(credentials) }) .then(async response => { let {токен_доступу, тип_токена_доступу} = await response.json(); let body = { "device_data": { "device_token": token, "платформа": "WEB", "event_name": "device_token_event", "device_id": gaData.clientId }, "client_keys": { "device_id": gaData.clientId, "client_id": gaData.clientId, "email": "<EMAIL_КОРИСТУВАЧА_ЯКЩО_ІСНУЄ>", "phone": "<ТЕЛЕФОН_КОРИСТУВАЧА_ЯКЩО_ІСНУЄ>", "номер_картки_лояльності": "<НОМЕР_КАРТКИ_ЛОЯЛЬНОСТІ_ЯКЩО_ІСНУЄ>" } }; fetch('https://app.neucurrent.com/push/api/v1/device-token/add/', { метод: 'POST', headers: { 'Content-Type': 'application/json', Авторизація: `${access_token_type} ${access_token}` }, body: JSON.stringify(body) }); }) .catch(err => { console.error(err) }) }) .catch(err => { console.error(err) // обробити помилку або відмовити в дозволі }); </script>
firebase-messaging-sw.js
:
6. Вітаємо! Ви завершили процес інтеграції.firebase-messaging-sw.js1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
importScripts('https://www.gstatic.com/firebasejs/8.2.1/firebase-app.js'); importScripts('https://www.gstatic.com/firebasejs/8.2.1/firebase-messaging.js'); // Для оптимальної роботи з Cloud Messaging також додайте Firebase SDK для аналітики. importScripts("https://www.gstatic.com/firebasejs/8.2.1/firebase-analytics.js"); firebase.initializeApp({ apiKey: "", projectId: "", messagingSenderId: "", appId: "", }); // використовуємо конфіг з початкового налаштування Firebase Web App self.addEventListener('push', function(event) { let data = event.data.json().notification; let options = { dir: "ltr", body: data.body, tag: "", image: data.image, icon: data.icon, badge: data.icon, renotify: false, actions: JSON.parse(event.data.json().data['gcm.notification.actions']), silent: false, persistent: true, requireInteraction: false, sticky: false, notificationCloseEvent: true, data: { options: { clickAction: data.click_action } } }; self.registration.showNotification(data.title, options); }); self.addEventListener('notificationclick', function(event) { event.notification.close(); // Android потребує явного закриття. let url = event.action; if (url == '') { // клік на будь-якій області на кнопці, окрім кнопок event.notification.close(); return clients.openWindow(event.notification.data.options.clickAction); } event.waitUntil( clients.matchAll({type: 'window'}).then( windowClients => { // Перевіряємо, чи вже відкрито вікно/вкладка з цільовим URL for (var i = 0; i < windowClients.length; i++) { var client = windowClients[i]; if (client.url === url && 'focus' in client) { return client.focus(); } } // Якщо ні, то відкриваємо цільовий URL у новому вікні/вкладці. if (clients.openWindow) { return clients.openWindow(url); } }) ); });
Додаткові джерела