Як я робив 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/
Tags
bme280 bmp280 gps mpu-6050 options stm32 ssd1331 ssd1306 eb-500 3d-printer soldering tim mpu-9250 dma watchdog piezo exti web raspberry-pi docker ngnix solar bluetooth foc html css brushless flask dc-dc capture gpio avr rs-232 mpx4115a atmega mongodb st-link barometer pwm nvic git java-script programmator dht11 hih-4000 pmsm encoder max1674 smd sensors rtc adc lcd motor timer meteo examples i2c usb flash sms rfid python esp8266 servo books bldc remap eeprom bkp battery ethernet uart usart displays led websocket nodemcu wifi
Архіви