Scalaでwebpushのサンプルを作った

https://webpush-scala.herokuapp.com

世間に、JavaScript(Node.js)で全部やるサンプルはいくつかあったけど、(コレ作った時点で)JavaScalaのサンプルがほぼ見当たらなかったので。


https://github.com/xuwei-k/webpush-scala


うまくいくと、以下のような感じで、右上にぴょこっと出ます

webpushといえば、個人的に身近なところ(?)だと、gitterのwebのクライアントとかでしょうかね。
webpush自体の説明は、あまり詳細な説明しませんが(ググったほうが正確でわかりやすい説明あるのでは)、一応適当に簡単に説明すると、

最近標準化されつつある*1やつで、コレ書いてる2016年9月時点では、ChromeFirefoxしか対応してません。
一度登録すれば、ブラウザさえ開いてあれば、そのwebページ開いてすらいなくても通知送信できるし、
鍵生成して登録さえすればそれ使ってgooglemozillaのサーバーにデータ送りつければ後は任せるだけ(?)で、色々便利です。



いくつか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対応版リリースされた、みたいな状況
  • constとかletとか、文字列埋め込みとか、JSの新しい文法使っているので、たぶんそういうのに対応した新しいブラウザじゃないと動きません*3

*1:詳細な時期感よく知らない

*2:または "vapid", "Voluntary Application Server Identification" などでググってみましょう

*3:webpush対応してるのがそもそも新しいやつだけだから、ええやろ、みたいな気持ち