Progressive Web Apps
PWA(Progressive Web Apps)とは、WebページをネイティブアプリのようなUXを提供するためのものです。
なんでこれを思い出したかと言うと https://doper.io というWebサイトを開発していて、iOSクライアントは去年なんとか作りましたが、Androidはなかなか手が出せなくて、今年に入ってなんとかしようと思いPWAがいいんじゃないかと思いました。
条件
- Webサイトがhttps対応してること
- Android Chromeが必要
対応
manifest.json
manifest.jsonファイル作成します。
{
lang: "ja",
name: "Doper Lite",
short_name: "Doper Lite",
start_url: "/",
display: "standalone",
theme_color: "#24292e",
icons: [
{
src: "/img/launcher-icon48.png",
sizes: "48x48",
type: "image/png"
},
{
src: "/img/launcher-icon-72.png",
sizes: "72x72",
type: "image/png"
},
{
src: "/img/launcher-icon-96.png",
sizes: "96x96",
type: "image/png"
},
{
src: "/img/launcher-icon-144.png",
sizes: "144x144",
type: "image/png"
},
{
src: "/img/launcher-icon-192.png",
sizes: "192x192",
type: "image/png"
}
]
}
https://www.w3.org/TR/appmanifest/
作成したmanifest.jsonファイルは https://doper.io/manifest.json のようにアクセスできるようにします。
headタグ
headに以下のようにmanifestを指定します。
<link rel="manifest" href="/manifest.json">
service-worker.js
service-worker.jsを作成します
self.addEventListener('install', function (e) {
console.log('[ServiceWorker] Install');
});
self.addEventListener('activate', function (e) {
console.log('[ServiceWorker] Activate');
});
self.addEventListener('fetch', function (e) {
console.log('[ServiceWorker] Fetch');
});
以下のjsコードを埋め込みます。
<script>
if ('serviceWorker' in navigator) {
navigator.serviceWorker
.register('/service-worker.js')
.then(function () {
console.log('Service Worker Registered');
});
}
</script>
ホーム画面に追加表示タイミング
1週間で2回表示したときに表示されるという仕様らしいです。
以上で、Android Chromeでアクセスしてメニューから「ホーム画面に追加」するか、スクロールしてると「ホーム画面に追加」ボタンが現れるはずです。
https://developers.google.com/web/fundamentals/app-install-banners/?hl=ja#test
上のようにデスクトップからテストもできます。
こうやって並べて見ると気持ちいいw
ちょっと不思議
Androidアプリ持ってないサービスはなんでこういう対応しないんですかね?Qiitaみたいなテック系すらサポートしてないのはなぜ?