Сафарі
Налаштування облікового запису розробника¶
Примітка
Для повного налаштування облікового запису розробника вам потрібен MacBook.
- Перейдіть за адресою
https://developer.apple.com/account/resources/identifiers/list
і створіть новий індентифікатор. - Виберіть "Webite Push IDs" і натисніть "Продовжити".
- Вкажіть опис та індентифікатор (бажано використовувати зворотне доменне ім'я додатку) і натисніть "Продовжити".
- Отримайте certSigningRequest, відкривши Keychain.app > Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority..., заповніть поля та натисніть "Продовжити".
- Поверніться до створеного Website Push ID і натисніть "Створити сертифікат", щоб завантажити сертифікат з попереднього кроку. Після декількох невеликих кроків ви зможете завантажити файл
website_aps_production.cer
. - Додайте завантажений файл сертифіката до Keychain.app і натисніть "Експортувати 2 елементи...", щоб отримати сертифікат і приватний ключ (.p12).
Front-end integration¶
-
Setup Google Analytics on your main page:
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>
-
Налаштуйте скрипт APNS:
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
<скрипт const googleAnalyticsData = () => {}; const data = {}; const data = {}; const const data = {}; gtag('get', '<YOUR_GTAG>', 'client_id', clientId => { data.clientId = clientId; }) повернути дані; }; const requestPerm = () => { if ('safari' in window && 'pushNotification' in window.safari) { let permissionData = window.safari.pushNotification.permission('web.com.artemHrytsenko.fcmflutternotification'); checkRemotePermission(permissionData); } }; let gaData = googleAnalyticsData(); const checkRemotePermission = (permissionData) => { } }. if (permissionData.permission === 'default') { { window.safari.pushRemotePermission = (permissionData.permission === 'default') window.safari.pushNotification.requestPermission( 'https://app.neucurrent.com/push/api', // URL веб-сервісу. '<WEBSITE_PUSH_ID>', { "retailer_name": "<RETAILER_NANE>", "назва_сайту": "<WEBSITE_TITLE>", "дозволені_домени": '["https://app.neucurrent.com"]'', "url_format_string": "https://app.neucurrent.com/push/api/v2", "url_сервісу": "https://app.neucurrent.com/push/api", "device_id": gaData.clientId }, checkRemotePermission ); } else if (permissionData.permission === 'denied') { // Користувач відмовився. console.log('denied') } else if (permissionData.permission === 'granted') { // Користувачеві дозволено використовувати токен. // permissionData.deviceToken тепер можна використовувати. // надсилаємо запит до методу NeuCurrent на реєстрацію токену згідно Swagger UI API NeuCurrent. Дивіться приклад нижче } }; </script>
Надсилання запиту до 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
else if (permissionData.permission === 'granted') { 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": permissionData.deviceToken, "платформа": "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) }) }) }
-
Повний приклад:
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 76 77 78 79 80 81
<скрипт const googleAnalyticsData = () => {}; const data = {}; const const data = {}; gtag('get', '<YOUR_GTAG>', 'client_id', clientId => { data.clientId = clientId; }) повернути дані; }; const requestPerm = () => { {\i1 if ('safari' in window && 'pushNotification' in window.safari) { let permissionData = window.safari.pushNotification.permission('<WEBSITE_PUSH_ID>'); checkRemotePermission(permissionData); } }; let gaData = googleAnalyticsData(); const checkRemotePermission = (permissionData) => { } }. if (permissionData.permission === 'default') { { window.safari.pushRemotePermission = (permissionData.permission === 'default') window.safari.pushNotification.requestPermission( 'https://app.neucurrent.com/push/api', '<WEBSITE_PUSH_ID>', { "retailer_name": "<RETAILER_NANE>", "назва_сайту": "<WEBSITE_TITLE>", "дозволені_домени": '["https://app.neucurrent.com"]'', "url_format_string": "https://app.neucurrent.com/push/api/v2", "url_сервісу": "https://app.neucurrent.com/push/api", "device_id": gaData.clientId }, checkRemotePermission ); } else if (permissionData.permission === 'denied') { // Користувач відмовився. console.log('denied') } else if (permissionData.permission === 'granted') { { 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": permissionData.deviceToken, "платформа": "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) }) }) } }; </script>
-
Вітаємо! Ви завершили процес інтеграції.
Інтеграція з NeuCurrent¶
Будь ласка, надайте команді NeuCurrent сертифікат *.p12
, пароль до нього та набір іконок (icon_16x16.png, icon_16x16@2x.png, icon_32x32.png, icon_32x32@2x.png, icon_128x128.png, icon_128x128@2x.png).