PWAを実装する上でサブドメインで管理されているものは実装が難しいとずっと悩まされてきたが、PWA自体まだまだ開発段階の技術であることがさらに実装を悩ませている。
BackgroundSyncを使って予約投稿をするという案は、まだメソッドを理解しきれていない部分が多く、どうにかしたら実装可能なのかもしれないが、ネイティブアプリケーションのように通知が受け取れるようになるプッシュ通知において、ブラウザごとに方法が異なっているため、全ての端末に対応できるコードが書けないという問題がある。
PWAでプッシュ通知を行うためには、受け取るService Workerと配信するサーバが必要になるが、この両者を取り持つ登録と認証を行う仕組みが2種類あり、一方はGoogleのソリューションである[Firebase Cloud Messaging]、一方が[IETF]が標準化する[Voluntary Application Server Identification for Web Push]である。
### FCM
FCMではFirebaseにプロジェクトを準備し、メッセージをやり取りするためのIDを発行、manifest.jsonに書く必要がある。
```json
{
"gcm_sender_id": "発行したid",
}
```
そのためVAPIDに比べると手間がかかるほか、FCMでユーザごとに固有のメッセージを送信するには、ユーザが登録したエンドポイントに対して通知を発行し、通知を受け取ったService Workerが内容を別のプログラムに取りに行くという必要があり、通知の発行とデータの送信が一括でできない。
またFCMはGoogleのソリューションであるため、FirefoxやEdgeでは使えないという問題がある。
### VAPID
VAPIDはIETFが標準化しているもので、通知の発行と共にデータを載せることが可能であり、内容を暗号化し送信をする。そのためサーバで公開鍵と暗号鍵を生成する必要があるが、これらはweb-push(Node.js)やweb-push-php(PHP)といったライブラリが公開されているため、ライブラリに乗っかってしまえば何ら問題はない。
問題なのは実装しようとしているサーバがPHPで書かれていて、ライブラリを使えるバージョンではないということであった。
### Apple頑張って
PWAのプッシュ通知はまだ開発段階の技術であるため、OSやブラウザによっては対応していないものがある。中でもiPhoneのOSであるiOS、標準搭載されているブラウザのsafariがプッシュ通知に対応していない。
[iOSの11.3からのPWA対応でできるようになったこと]
現在最新のiOSは12.1だが、特にPWAに関してのアップデートはなかったため、未だにPWAを実装する上でiOSはネックである。PWAはクロスプラットフォーム対応というのが強みだったはずなのだが......
[Firebase Cloud Messaging]: firebase.google.com/docs/cloud-messaging
[IETF]: https://www.nic.ad.jp/ja/basics/terms/ietf.html
[Voluntary Application Server Identification for Web Push]: https://tools.ietf.org/html/rfc8292
[iOSの11.3からのPWA対応でできるようになったこと]: https://medium.com/@takeshiamano/iosの11-3からのpwa対応でできるようになったこと-313f638a172b