Як я робив PWA
PWA - це не клей :) Що таке Progressive Web Apps? Гугліть =>.
ОСЬ ЩО З ЦЬОГО ВИЙШЛО: https://avislab.github.io/map/
1. Робимо звичайне Web-application (HTML - сторіночку з JavaScript - тиком :))
Наприклад, щось таке /files/map/0.html
Зверніть увагу HTTPS немає, тому доступу до вашої локації не буде.
2. Генеруємо іконки (використовуємо генератор іконок, або малюємо свої):
icon-128x128.png
icon-144x144.png
icon-152x152.png
icon-192x192.png
icon-384x384.png
icon-512x512.png
icon-72x72.png
icon-96x96.png
Кладемо їх у директорію icons.
3. Генеруємо маніфест (використовуємо генератор маніфестів) кладемо його там де index.html
Приклад manifest.json:
{
"name": "Avislab Navigator",
"short_name": "Navigator",
"start_url": "index.html",
"display": "fullscreen",
"theme_color": "#3367D6",
"background_color": "#3367D6",
"icons": [
{
"src": "icons/icon-72x72.png",
"sizes": "72x72",
"type": "image/png"
},
{
"src": "icons/icon-96x96.png",
"sizes": "96x96",
"type": "image/png"
},
{
"src": "icons/icon-128x128.png",
"sizes": "128x128",
"type": "image/png"
},
{
"src": "icons/icon-144x144.png",
"sizes": "144x144",
"type": "image/png"
},
{
"src": "icons/icon-152x152.png",
"sizes": "152x152",
"type": "image/png"
},
{
"src": "icons/icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "icons/icon-384x384.png",
"sizes": "384x384",
"type": "image/png"
},
{
"src": "icons/icon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
]
}
3. У <header> index.html прописуємо щось таке: (копіюємо текст з генератора маніфестів):
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
<link rel="manifest" href="manifest.json">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="application-name" content="My Test PWA">
<meta name="apple-mobile-web-app-title" content="My Test PWA">
<meta name="msapplication-starturl" content="/">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="theme-color" content="#3367D6">
<link rel="icon" href="icons/icon-72x72.png">
<link rel="apple-touch-icon" href="icons/icon-72x72.png">
4. Додаємо service worker
service worker - це ще один файл, який ми додаємо в наш проект, він дозволить працювати в автономному режимі. service worker - має бути обов`язково, це вимога PWA. Навіть якщо він Вам нафіг не потрібний його доведеться створити.
Для спрощення життя використовуємо sw-toolbox.
Нам потрібно покласти файл sw-toolbox.js біля index.html
та написати свій файл sw.js:
`use strict`;
importScripts(`sw-toolbox.js`);
toolbox.precache(["index.html"]);
toolbox.router.get(`/*`, toolbox.networkFirst, { networkTimeoutSeconds: 5});
5. Реєструємо service worker - додати у index.html:
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('sw.js').then(
function(registration) {
// Registration was successful
console.log('ServiceWorker registration successful with scope: ', registration.scope);
},
function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
});
}
</script>
6. Записати це все на сайт з HTTPS. Нема HTTPS - нема PWA. Насправді без HTTPS буде працювати але не все. Якщо у Вас немає сайту з HTTPS - не біда. Залити можна на GitHub безкоштовно використовуючи GitHub Pages.
ОСЬ ЩО ВИЙШЛО: https://avislab.github.io/map/
Тепер, коли відкриваємо URL з нашим PWA у МОБІЛЬНОМУ пристрої (телефон / планшет), браузер запропонує встановити його як "додаток". (Далі прошу стримувати емоції). Якщо цього не станеться, не хвилюйтесь - зайдіть за посиланням ще раз. Деякі браузери пропонують встановити PWA тільки якщо Ви вже заходили на сайт. Якщо це зробити (встановити додаток), на робочому столі з`явиться іконка за допомогою якої можна запускати ваш додаток. А вікно браузера буде відкриватися як ми налаштували у маніфесті. Тобто можна на весь екран, і не буде видно що це відкривається браузер.
Все. А що ще? Ну ваш Web - додаток зможе працювати без інтернету, якщо він на це здатний взагалі, і якщо правильно запиляти service worker. Більше нічого особливого PWA вашому web-app не додасть.
PWA не дало мені можливості:
- керувати підключеннями Wi-Fi, Bluetooth
- не змогло керувати дисплеєм, немає можливості заборонити гасити екран коли ваш додаток працює. Можна лише зі збоченнями, але вони працюють не завжди
- PWA не мають доступу до всіх сенсорів. Ті данні що надходять, типу deviceorientation, з технічної точки зору - убогість
- Данні можна зберігати тільки у LocalStorage (та ще в куках). Якщо користувач почистить кеш браузера разом з данними, збережені дані Вашого додатка зникнуть.
Отака вона...PWA...
Успіхів.
P.S.
Посилання:
Генератор маніфестів:
https://tomitm.github.io/appmanifest/
Генератор іконок:
https://www.favicon-generator.org/
Гугло-мірялка PWA:
https://developers.google.com/web/tools/lighthouse/
Недавні записи
- Text to speech. Українська мова
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
Tags
docker sensors rtc led timer wifi remap sms css websocket mongodb bme280 rfid bluetooth esp8266 nodemcu bkp piezo bmp280 i2c mpu-6050 encoder examples avr brushless ngnix nvic displays bldc java-script pmsm barometer pwm lcd ethernet stm32 raspberry-pi capture usart gpio exti atmega meteo solar smd dma adc eeprom eb-500 flask python ssd1306 uart options flash mpx4115a html gps st-link 3d-printer servo dc-dc foc git books battery hih-4000 watchdog dht11 web tim programmator ssd1331 mpu-9250 usb rs-232 motor max1674 soldering
Архіви