Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MoT TechTalk #4 Androidエンジニア必見!タクシーアプリGOのUXを高める工夫

MoT TechTalk #4 Androidエンジニア必見!タクシーアプリGOのUXを高める工夫

・GOアプリの紹介
・地図UIの工夫
  ・タクシーアイコンの描画の工夫とアニメーション
  ・道路への引き込みについて
  ・Google Maps の padding を正しく扱うための工夫(画面の大きさに関わらず、Googleのロゴを出す)
  ・Google Maps に描画するものと、独自 View に描画するものの切り分け方
・どんな(※)タクシーでも便利!アプリならできるスマートな降車(CameraX/超音波ビーコン)
  (※GO加盟車両に限る)
  ・スマートな降車とは
  ・超音波ビーコンを使った決済機能
  ・超音波ビーコンを使った GO Pay
  ・2次元バーコードを使った GO Pay
  ・Androidのカメラやばい話
  ・CameraXがでたけど当時はalpha6だった話
  ・CameraXを入れた話
  ・GO Android ユーザーアプリのライブラリ選定
・機能開発の速度を落とさずにいかに並行してマルチモジュール化を進めたか
  ・マルチモジュールを導入することになったきっかけ
  ・マルチモジュールとは
  ・どのようにマルチモジュールを導入するか
  ・マルチモジュール化の現状と今後

GO Inc. dev

May 27, 2021
Tweet

More Decks by GO Inc. dev

Other Decks in Technology

Transcript

  1. Mobility Technologies Co., ⾼柳 翔 (@sobachanko) 主な呼ばれ⽅︓そばちゃん • チームハッスルリーダー •

    趣味・特技︓飲酒 • 元ホテルマン 諏訪村 夏彦 (@napplecomputer) 主な呼ばれ⽅︓なっぴー • ⼆輪の免許を最近取りました • 次は第⼆種電気⼯事⼠を取るために勉強中 • 今⽇⼟地を買ってきました
  2. Mobility Technologies Co., Son Semyeong (@Hand-Tomi) 主な呼ばれ⽅︓そんくん • 556のAndroid開発者 •

    ⼈⽣⽬標︓家買 • ラーメン屋さん、「バリ男」 VIPだった 松延 萌菜 (@nb_matsu) 主な呼ばれ⽅︓まつのぶさん • エンジニア採⽤のリーダー • 最近すこしだけウイスキーブーム • 視聴者を代弁する質問役
  3. Mobility Technologies Co., • タクシーアイコンの描画の⼯夫とアニメーション • 道路への引き込みについて • Google Maps

    の padding を正しく扱うための⼯夫 (画⾯の⼤きさに関わらず、Google ロゴを表⽰する) • Google Maps に描画するものと、独⾃ View に描画するものの切 り分け⽅ 地図UIの⼯夫
  4. Mobility Technologies Co., • タクシーアイコンの描画の⼯夫とアニメーション • 道路への引き込みについて • Google Maps

    の padding を正しく扱うための⼯夫 (画⾯の⼤きさに関わらず、Google ロゴを表⽰する) • Google Maps に描画するものと、独⾃ View に描画するものの切 り分け⽅ 地図UIの⼯夫
  5. Mobility Technologies Co., ▪ Google Maps 上に Marker として描画している ▪

    タクシーの位置情報は API をポーリングして定期的 に取得 ▪ 前回と今回の位置情報を⽐較してアニメーションさせ ている ▪ 向いている⽅⾓を計算して、アイコンが正しく進 ⾏⽅向に向くようにしている タクシーアイコン
  6. Mobility Technologies Co., • タクシーアイコンの描画の⼯夫とアニメーション • 道路への引き込みについて • Google Maps

    の padding を正しく扱うための⼯夫 (画⾯の⼤きさに関わらず、Google ロゴを表⽰する) • Google Maps に描画するものと、独⾃ View に描画するものの切 り分け⽅ 地図UIの⼯夫
  7. Mobility Technologies Co., • ⾼速道路や⾞が⽴ち⼊れない道などを除外 • ⼤きい道路の場合、どちら側なのかの判定もしている • 細かい点で⾔うと、交差点の 5m

    以内なども除外している なぜ引き込みを⾏うのか 最初にピンが置かれた位置からすぐに 配⾞依頼がかけられるようにするための⼯夫
  8. Mobility Technologies Co., • タクシーアイコンの描画の⼯夫とアニメーション • 道路への引き込みについて • Google Maps

    の padding を正しく扱うための⼯夫 (画⾯の⼤きさに関わらず、Google ロゴを表⽰する) • Google Maps に描画するものと、独⾃ View に描画するものの切 り分け⽅ 地図UIの⼯夫
  9. Mobility Technologies Co., ▪ 上の図のように上部と右側に padding を設定する と地図の緑で囲われた位置を制御できる範囲とし て指定できる ▪

    GO では上下に padding を設定している ▪ 地図の上にコンテンツを配置する場合によく利⽤ される ▪ Google Maps のロゴの位置は左下に固定で表⽰さ れ、カスタマイズができない Google Maps の padding とは
  10. Mobility Technologies Co., Google Maps を利⽤する場合、Google ロゴを隠して はいけないと明確に規定されている https://developers.google.com/maps/documentat ion/android-sdk/map?hl=ja#map_padding

    下部のUIパーツ(コントロールパネルと呼んでいる) は画⾯毎に⾼さが違うため、画⾯毎に適切に padding を設定する必要がある Google ロゴの調整が⼤変
  11. Mobility Technologies Co., <androidx.constraintlayout.widget.ConstraintLayout ・・・ > <FrameLayout android:id=”@+id/control_panel” ・・・ />

    <Space android:id=”@+id/map_padding” app:layout_constraintTop_toTopOf=”@id/fab_menu” app:layout_constraintBottom_toBottomOf=”parent” /> </androidx.constraintlayout.widget.ConstraintLayout> Google ロゴの調整が⼤変 override fun onViewCreated(view: View, savedInstanceState: Bundle?) { binding.mapPadding.doOnLayout { view -> googleMap.setPadding(0, 0, 0, view.height) } }
  12. Mobility Technologies Co., • タクシーアイコンの描画の⼯夫とアニメーション • 道路への引き込みについて • Google Maps

    の padding を正しく扱うための⼯夫 (画⾯の⼤きさに関わらず、Google ロゴを表⽰する) • Google Maps に描画するものと、独⾃ View に描画するものの切 り分け⽅ 地図UIの⼯夫
  13. Mobility Technologies Co., ▪ Google Maps 上に描画する場合のメリット ▪ 扱いが簡単(緯度経度を渡すだけで画⾯上の正しい座標に描画してくれ る)

    ▪ Google Maps 上に描画する場合のデメリット ▪ 描画速度が遅いので素早い動きに弱い Google Maps 上で描画するもの/しないもの
  14. Mobility Technologies Co., ▪ するもの ▪ タクシーアイコン(Marker として描画) ▪ 乗⾞地/降⾞地決定後のピン

    ▪ しないもの ▪ 乗⾞地決定前のピン ▪ フキダシ ※点線に関しては画⾯によって描画⽅法が違う(後述) Google Maps 上で描画するもの/しないもの
  15. Mobility Technologies Co., ▪ するもの ▪ タクシーアイコン(Marker として描画) ▪ 乗⾞地/降⾞地決定後のピン

    ▪ しないもの ▪ 乗⾞地決定前のピン ▪ フキダシ ※点線に関しては画⾯によって描画⽅法が違う(後述) Google Maps 上で描画するもの/しないもの
  16. Mobility Technologies Co., ▪ 素早く動かされても追従できるように独⾃の View を 地図の上に置いて描画している ▪ 計算には三⾓関数を⽤いて現在地と地図の中⼼座

    標間に点線を描画 ▪ 余談︓乗⾞地ピンも Lottie のアニメーションを利⽤す るために独⾃ View 上で描画している 点線の描画について(乗⾞地決定前)
  17. Mobility Technologies Co., • Androidのカメラ実装は⻤⾨中の⻤⾨ ◦ 機種依存がつらい ◦ メモリ管理がつらい ◦

    単純に実装がつらい ▪ 学習コスト⾼め ▪ コールバック地獄 ▪ 設定値が⾮常に多い • できれば実装したくない ◦ 撮影するだけならカメラアプリにお願いする⼿もある • そこでCameraX Androidのカメラやばい話
  18. Mobility Technologies Co., • Google I/O 2019にて発表された、カメラアプリを簡単に実装するためのラ イブラリ • 通常のカメラAPIをラッピングしている

    • 実装が超簡単 ◦ 通常のカメラAPIはハードウェアを最⼤限に活⽤することを⽬指してい るのに対し、CameraXはシンプルなAPIを提供することを⽬指している • 機種依存を吸収してくれる ◦ CameraX Test Labで継続的に⾃動テストしている • ただし当時のバージョンはalpha06 CameraX
  19. Mobility Technologies Co., • 明確な基準はない • 以下の内容から判断する ◦ 安定版かどうか ◦

    ライブラリの影響範囲 ▪ 影響範囲が広い場合、ライブラリの不具合・破壊的変更の影響が⾮ 常に⼤きく、ライブラリの更新のリスクとコストが⼤きくなりがち。 ▪ 影響範囲によってはQAコストを確保できずなかなか更新できなくな る開発上のリスクも有る ◦ Google関連かサードパーティー製か ▪ サードパーティー製の場合、メンテナンスがされているか GO Android ユーザーアプリのライブラリ選定基準
  20. Mobility Technologies Co., モジュールとは • appモジュールを除外して内部ライブ ラリと理解しても⼤丈夫です。 • モジュールはコンテナとして機能し、その中にア プリのソースコード、リソース

    ファイルが含まれ るほか、モジュール レベルのビルドファイルや Android マニフェスト ファイルなどのアプリレベ ルの設定も含まれます。
  21. Mobility Technologies Co., マルチモジュール化の⽅法 - レイヤーごとに プレゼンテーション層 ビジネスロジック層 データ層 •

    上位モジュールが下位モジュール に依存しないことを保証できる • 独⽴性を保つモジュール構造を作 ることが可能
  22. Mobility Technologies Co., マルチモジュール化の⽅法 - 機能ごと :app ログイン機 能 配⾞機能

    履歴機能 • 機能別にコードがまとまっている ので理解しやすい • 修正の影響範囲を最低限にまとめ ることができる
  23. Mobility Technologies Co., MoTモジュール構造 :app :login :android-core :repository :model •

    login : ログイン関連モジュール • favorite : お気に⼊り関連モジュ ール • history : 乗⾞履歴関連モジュール • android-core : リソース、共通ビ ュー, Utilなど共通クラス • repository : データソースアクセ ス • model : 整理したmodelモジュー ル Activity/Fragment ViewModel UseCase :favorite Activity/Fragment ViewModel UseCase :history Activity/Fragment ViewModel UseCase
  24. Mobility Technologies Co., 新機能モジュールを⼊れられように環境を構築した :app :login :legacy :legacy-core :history •

    legacy : 未整理のモ ジュールをまとめた モジュール • legacy-core : 未整 理のmodelモジュー ル、repositoryモジ ュールをまとめたモ ジュール