Инсталлируемые веб-приложения Service Workers, Cache API, WebRTC

Содержание

Слайд 2

Краткая история одного стартапа

Краткая история одного стартапа

Слайд 3

2007

2007

Слайд 4

Инсталляция

Инсталляция

Слайд 5

Инсталляция iOS

Инсталляция iOS





Слайд 6

2008

2008

Слайд 7

2010

2010

Слайд 8

Проблемы приложений Нет поискового трафика Нет трафика с емейл рассылок Нет кроссплатформенности

Проблемы приложений

Нет поискового трафика
Нет трафика с емейл рассылок
Нет кроссплатформенности

Слайд 9

Слайд 10

Progressive Web Apps Progressive - Work for every user, regardless of

Progressive Web Apps

Progressive - Work for every user, regardless of

browser choice because they’re built with progressive enhancement as a core tenet.
Responsive - Fit any form factor: desktop, mobile, tablet, or whatever is next.
Connectivity independent - Enhanced with service workers to work offline or on low quality networks.
App-like - Feel like an app to the user with app-style interactions and navigation because it's built on the app shell model.
Fresh - Always up-to-date thanks to the service worker update process.
Слайд 11

Progressive Web Apps Safe - Served via HTTPS to prevent snooping

Progressive Web Apps

Safe - Served via HTTPS to prevent snooping

and ensure content hasn’t been tampered with.
Discoverable - Are identifiable as “applications” thanks to W3C manifests and service worker registration scope allowing search engines to find them.
Re-engageable - Make re-engagement easy through features like push notifications.
Installable - Allow users to “keep” apps they find most useful on their home screen without the hassle of an app store.
Linkable - Easily share via URL and not require complex installation.
Слайд 12

Инсталляция https://www.w3.org/TR/appmanifest/ Working Draft 26 April 2016 Chrome + Mozilla +

Инсталляция

https://www.w3.org/TR/appmanifest/ Working Draft 26 April 2016
Chrome +
Mozilla +
Opera +
Edge Under

Consideration
Safari -
Слайд 13

Инсталляция

Инсталляция


Слайд 14

Инсталляция Название приложения { name: “My totally awesome photo app” short_name: “Photos” }

Инсталляция Название приложения

{
name: “My totally awesome photo app”
short_name: “Photos”
}

Слайд 15

Инсталляция Иконки { "icons": [{ "src": "icon/lowres", "sizes": "64x64", "type": "image/webp" }] }

Инсталляция Иконки

{
"icons": [{
"src": "icon/lowres",
"sizes": "64x64",
"type": "image/webp"
}]
}

Слайд 16

Инсталляция Режим отображения и ориентация { "display": "fullscreen", "orientation": "landscape" } fullscreen, standalone, minimal-ui, browser

Инсталляция Режим отображения и ориентация

{
"display": "fullscreen",
"orientation": "landscape"
}
fullscreen, standalone, minimal-ui, browser

Слайд 17

Инсталляция Стартовая страница { start_url: “/start_screen.html” }

Инсталляция Стартовая страница

{
start_url: “/start_screen.html”
}

Слайд 18

Инсталляция Scope { “scope”: “/myapp” }

Инсталляция Scope

{
“scope”: “/myapp”
}

Слайд 19

Инсталляция Обнаружение инсталляции @media all and (display-mode: standalone){ …} if (window.matchMedia("(display-mode:

Инсталляция Обнаружение инсталляции

@media all and (display-mode: standalone){ …}
if (window.matchMedia("(display-mode: standalone)").matches) {
/*

Приложение установлено */
} else {
/* Вывести пользователю надоедающий баннер */
}
Слайд 20

Инсталляция Момент инсталляции function handleInstall(ev){ const date = new Date(ev.timeStamp /

Инсталляция Момент инсталляции

function handleInstall(ev){
const date = new Date(ev.timeStamp / 1000);
console.log(`Yay!

Our app got installed at ${date.toTimeString()}`);
}
window.oninstall = handleInstall;
// Using .addEventListener()
window.addEventListener("install", handleInstall);
Слайд 21

Инсталляция

Инсталляция

Слайд 22

Camera

Camera

Слайд 23

Camera https://webqr.com/ https://github.com/gasolin/qrcode_scanner https://github.com/LazarSoft/jsqrcode https://davidwalsh.name/demo/iphone-camera.php

Camera

https://webqr.com/
https://github.com/gasolin/qrcode_scanner
https://github.com/LazarSoft/jsqrcode
https://davidwalsh.name/demo/iphone-camera.php

Слайд 24

Camera

Camera

Слайд 25

Camera

Camera

Слайд 26

Camera https://github.com/LazarSoft/jsqrcode/blob/master/src/qrcode.js

Camera https://github.com/LazarSoft/jsqrcode/blob/master/src/qrcode.js

Слайд 27

Camera

Camera





Слайд 28

Service Workers

Service Workers

Слайд 29

Service Workers

Service Workers

Слайд 30

Кеширование файлов var CACHE_NAME = 'app_serviceworker_v_1', cacheUrls = [ '/test_serviceworker/', '/test_serviceworker/index.html', '/test_serviceworker/css/custom.css', '/test_serviceworker/images/icon.png', '/test_serviceworker/js/main.js' ];

Кеширование файлов

var CACHE_NAME = 'app_serviceworker_v_1',
cacheUrls = [
'/test_serviceworker/',
'/test_serviceworker/index.html',
'/test_serviceworker/css/custom.css',

'/test_serviceworker/images/icon.png',
'/test_serviceworker/js/main.js'
];
Слайд 31

Кеширование файлов self.addEventListener('install', function(event) { event.waitUntil( // находим в глобальном хранилище

Кеширование файлов

self.addEventListener('install', function(event) {
event.waitUntil(
// находим в глобальном хранилище Cache-объект

с нашим //именем. если такого не существует, то он будет создан
caches.open(CACHE_NAME).then(function(cache) {
// загружаем в наш cache необходимые файлы
return cache.addAll(cacheUrls);
})
);
});
Слайд 32

Кеширование файлов

Кеширование файлов