Android Chromeで開発機のlocalhostにつなぐと、Service Workerが動かない
Android Chromeで開発機のlocalhost(HTTP)上で動かしているウェブサイトに接続するとService Workerが動かない。もしやHTTPSじゃないとService Workerが動かない?
サービスワーカーは、セキュリティ上の理由から HTTPS での実行に制限されています。
ローカルでの開発を容易にするために、 localhost はブラウザーによって安全なオリジンとみなされます。
あー完全に理解した。ホストしているPCでlocalhostに接続すると動くなーと思ってたらそういう条件なんだ。スマホからパソコンのlocalhostに接続したら特権を失うということなのね。
Service Workerを使うプッシュ通知のテストを本番環境でやるの、さすがに利用者の迷惑になるだろうから、やめねばと思っている。
プッシュ通知を登録する人なんて開発者以外に誰もいないでしょと思ってたら、1人いるっぽいんですよね。大切にしたい。
利用者が1人しかいない中で、本番環境を使ってテストしたくないとかいうのは開発者のエゴだろうか。
いや、やっぱりちゃんとローカルでテストできるようにしよう。localhostをhttpsで接続できるようにしよう。
スマホでプッシュ通知をタップするとService Workerのコードが表示される
2022年8月6日
再発した。時間がたったプッシュ通知をタップすると発生するようだ。
2022年8月3日
Service Workerで、オフラインの時だけキャッシュを使うようにした副作用で治ったように見える。原因がわかっていないので経過観察。
あれ
Service Workerで、オフラインの時だけキャッシュを使う機能を実装するより先に、ChromeのPWAインストール要件にオフライン対応必須化は延期されたことを知っていれば、もっと手抜きで済ませられたな。Service WorkerとCache APIの勉強にはなったし、利用者体験の向上にもつながるが、必ずしも今必要なことではなかった。
Service Workerで、オフラインの時だけキャッシュを使う
self.addEventListener('fetch', event => {
event.respondWith(
fetch(event.request).then(response=>{
//最初にfetchし、fetchに成功したらキャッシュに保存する
let responseClone = response.clone();
caches.open(CACHE_NAME).then(cache=>{
cache.put(event.request, responseClone);
})
return response;
}).catch(error=>{
//fetchに失敗したらキャッシュを返す;
console.log(error);
return caches.match(event.request);
})
);
}
『The service worker lifecycle』
『Why my Service Worker is always waiting to activate?』
2022年7月31日日記
昨晩23時にねて、今朝11時に起きた。よく寝た。睡眠不足が募っていたがこれで返済できたはずだ。
起きてから4時間ぐらい漢字の振り仮名データを作る作業をした。IMEが作りたい。ありもののデータも活用したいが、これまで書いた入力データを利用してIMEが作れれば、めちゃくちゃ自分に特化したIMEが作れるのではないかと画策している。日本語でコンピュータを使う最も重要なソフトウェアの一つなので、これの利便性向上は重要だ。
ただ、IMEを作ったとしてそれでどうやって儲けるんだという点に関しては全然見通しが立っていない。
『t_wの輪郭』にプッシュ通知機能を追加した。簡単にできるかなと軽く見ていたら、Service Workerが絡み、DBが絡みとなかなか大変だった。最終的には何とか動くものを作り上げることができた。コードがまだ汚いところがあるので、リファクタリングを進めた後に記事にできたらいいのだが。まあほかの人の記事もあるのでそれを参照いただければなんとかなる。正直もうこのまま動いてるコードを触りたくない。なんで動いているのか全然把握できていない。