https://webpush-scala.herokuapp.com
世間に、JavaScript(Node.js)で全部やるサンプルはいくつかあったけど、(コレ作った時点で)JavaやScalaのサンプルがほぼ見当たらなかったので。
https://github.com/xuwei-k/webpush-scala
うまくいくと、以下のような感じで、右上にぴょこっと出ます
webpushといえば、個人的に身近なところ(?)だと、gitterのwebのクライアントとかでしょうかね。
webpush自体の説明は、あまり詳細な説明しませんが(ググったほうが正確でわかりやすい説明あるのでは)、一応適当に簡単に説明すると、
最近標準化されつつある*1やつで、コレ書いてる2016年9月時点では、ChromeとFirefoxしか対応してません。
一度登録すれば、ブラウザさえ開いてあれば、そのwebページ開いてすらいなくても通知送信できるし、
鍵生成して登録さえすればそれ使ってgoogleかmozillaのサーバーにデータ送りつければ後は任せるだけ(?)で、色々便利です。
いくつかScalaのサンプル作ったポイント、感想としては
- play2.5でちゃんと作るのあまり経験ない(2.4以前の古いDI使わない書き方ばかりやってた)ので、むしろそっちが戸惑った部分多かった
- 強制的にhttpsにリダイレクトする部分とかも
- webpushはlocalhostもしくはhttpsではないと動かない => herokuはタダでhttps対応になるらしい => (๑•̀ㅂ•́)و✧
- 生のJSやhtmlに近いものを書いたけど、全然最新事情分からないし、(多少は頑張ったけど)雑になった・・・
- Scala.js使おうと一瞬迷ったが、まぁやるなら後でいいか・・・みたいな気持ち
- 古いgoogleのGCMに送る方式と、標準化されはじめたJWT使う新しい方式*2あるらしいけど、新しいJWTの方使った
- https://github.com/MartijnDwars/web-push Javaのライブラリかろうじて存在していて一応使えるけど、Javaでの情報かなり少ないし、このライブラリもつい1週間前頃にJWT対応版リリースされた、みたいな状況
- このライブラリのhttp送信部分のクラスの作りが雑で不安
- いくつかあれな部分があったので、pull reqしてた https://github.com/MartijnDwars/web-push/commits/master?author=xuwei-k
- constとかletとか、文字列埋め込みとか、JSの新しい文法使っているので、たぶんそういうのに対応した新しいブラウザじゃないと動きません*3