昨日、imakaraっていうアプリをリリースしてみた。
きっかけ
「いまから行くからね〜」って言ってから、
「いまどこ?」「○○過ぎたとこ〜」
「いまどこ?」「電車が遅れてて、△△駅でとまってる」
↑相手のイメージw
みたいなやりとりをいちいちメッセンジャーでやるのは面倒だ。 そんなやり取りをする時間があるなら、ふつうにネットサーフィンしていたい。
位置情報はべつにいつ抜かれても構わないから、相手が自分の位置を知りたいときに知れるシステムを作ろう、というのがきっかけでした。
やりたかったこと
いわゆる「待ち合わせアプリ」などは、常時測位している。これはものすごく効率が悪い。
GPS測位というのはスマホにおいては非常に電力を食う操作なので、 相手が私の場所を知りたいというのはせいぜい2,3秒であるとすると、その前後数秒だけ測位を行うようにするのが最も効率がいいのです。
サーバーの設計
カッコいいアーキテクチャを使おうとかは全然考えてなくて、 シンプルにRailsでHTTPサーバー1つ作るだけで完結させたい、という意図が強かった。Workerとかは状態管理が面倒なのでなるべく動かしたくない。ということで、
イメージ的にはこんな感じでプッシュを使いつつ実現する、ということをやってみました。
アプリの設計
常時測位しない、というのが最大の特徴なのですが、AndroidのFLP(Fused Location Provider)のAPIは
のように、常時測位を前提としたものしかありません。 なので、
requestLocationUpdateして、1回でも位置情報が取れたらそこでremoveLocationUpdateする という測位サービスを作り、 「測位して〜」プッシュを受け取ったときに、そのサービスを一発叩くようにしました。
あとは、画面ベースでてきとうにつくりました。
より広く使ってもらうために
追跡URLにはディープリンクが仕込んであって、アプリがインストールされていたら、位置をワンショットで示すだけでなく「新しい測位結果」プッシュを受け取って最新の位置情報をつねに見ることができるようになっています。
ただ、「Google playからimakaraっていうアプリをインストールして、それからこのURLを見てね」っていうと、大抵の人はGoogle playでimakaraを見つけられず、単純にブラウザでURLを見て満足してしまいます。 そこで、Firebase Dynamic Linksというのを使って、「アプリが入っていない人にはストアに飛ばし、アプリインストール後、ディープリンクを開く」というのを実現しました。
これにより、Androidにそこまで詳しくない人とか面倒くさがりな人でも、Google Playに飛ばされたときに「インストール」するだけなので、かなりスムーズに追跡URLをアプリで見るところまで到達できます。
さいごに
デザインは超絶適当なんで、フィードバックとかぷるりとかお待ちしています(てきとうw