【勝手にアプリレビュー】Suica-hackerを使ってみて

定期的に色んなアプリを使ってみて、技術的な観点等でのレビューを書いてみようかと思ってます。

まあ私自身も厳しい指摘をされるアプリを作っているわけですが、色んな観点からアプリを意識的に使ってみようと試みたところで、この記事を書くことにしました。

レビュー観点について

まずは、どのような観点でレビューを行っていくか、基本的な要素をまとめておきます。

基本的には、以下の項目を重点において勝手にレビューしたいと思います。

項目 具体的な内容
アプリ容量 アプリの容量が大きすぎないか
Permission 提供する機能に対して要求するPermissionは適切かどうか
操作感 使いやすさ・わかりやすさ。動作環境への最適化
実装 使ってみてわかった実装の良い点・悪い点
その他 気になった点

※項目は今後少しずつ変えていきます

※あくまで個人的な観点でのレビューになります

注意点

いくつかこのレビュー書く上で注意点があります。

  • アプリが提供する機能を全て使っていない場合があります。
  • 開発者観点でのレビューが目的となるので、アプリが提供するサービスの内容等についてはあまり触れません。
  • 勝手にレビューするので、開発者としての個人的意見が多くなるかもしれません。
  • 実装についてのレビューは全て見た目の動きやLog等から見られる範囲で判断しております。
  • APKを逆コンパイルせずに見ているので、間違っている点は多くあると思いますのでご了承ください。
  • 良い点・悪い点は正直に書きます。ちょっと荒っぽい表現が出るかもしれませんが、許してねー!ということで。。。

そして一番誤解しないで欲しいことが、 愛着も持って使用してるアプリだからこそレビューを書いてます。

その点だけ、開発者の方が見た場合は誤解しないでください!!

今回レビューするアプリ「Suica-hacker」

ということで、記念すべき第一弾のアプリは株式会社ジェネストリーム様がリリースしているSuica-hackerです。

このアプリは、Suica/PASMOをかざすだけで自動的に利用履歴を取り込み、交通費精算のリストを作ってくれます。

目的としては、月末の交通費精算等の作業を楽ちんにすることみたいです。

なので、利用履歴をCSV形式でエクスポートできるのが特徴です。

このアプリをほぼほぼ作っているのは@shin_kugiさんじゃないのかなーと思ってます。

このアプリについてFacebookで意見を述べたことがあるんですが、使っていて気になる点が多くあったので勝手にレビュー書いてしまいます。

アプリ容量

Nexus5で一ヶ月くらい使ってみた結果です。ちなみに、ランタイムはARTです。

f:id:operando:20141103173052j:plain

アプリ容量がデータを含めて16MBなら問題ないと思います。

しかし、提供している機能の割にはちょっと多くない?と思いました。

でも、最近だとGoogle Play Serviceのlibraryを含めると軽く3MB強になったりするので、これくらいのサイズになるのは仕方ないと思います。

Permission

Suica-hacker バージョン 1.0.4 のPermissionをGoogle Playのページから確認しました。

以下のような感じです。

  • アプリ内購入
  • 端末とアプリの履歴
    • 実行中のアプリの取得
  • ID
    • この端末上のアカウントの検索
  • 連絡先/カレンダー
    • カレンダーの予定と機密情報の読み取り
    • 画像/メディア/ファイル
    • USB ストレージのコンテンツの変更または削除
    • 保護されたストレージへのアクセスのテスト
  • その他
    • インターネットからデータを受信する
    • ネットワークへのフルアクセス
    • NFC の管理
    • バイブレーションの制御
    • 端末のスリープの無効化
    • ネットワーク接続の表示
    • Bluetooth デバイスのペアの設定

アプリ内購入のPermissionがあるのは、利用履歴のエクスポートが有料だからですね、多分。

カレンダーのPermissionは、アプリ内でカレンダーの予定表が見れる機能があり、そこで使われてますね。

その他のPermissionは、Suica読み取りが必要なので当たり前のようにNFC関連。後はネットワーク。あれ?Bluetoothってどこで使ってるのかな?

ちょっと気になるPermissionはあるけど、提供してる機能に対してセキュリティ的に問題なものはないという感じ。よくある連絡先読み取りとかのPermissionはないし。

操作感

実はこの操作感が割りと気になっているところです。

Navition Drawerの使い方

まず、このアプリのメニューはNavigation Drawerで実装されてます。

以下のような感じ。

f:id:operando:20141103180731j:plain

Navigation Drawerなので、各メニューのTopに値する画面はFragmentで実装されていると思ってました。しかし、使ってみて気づいたことが各メニューのTopに値する画面もActivityで作られてるような気がします。

通常、Navigation Drawerから各メニューをタップした場合、Navigation以外のコンテンツ部分を各Fragmentで切り替えるのが良いとされてます。そこから更に、詳細画面等の深い階層へ潜る場合にはActivityを使うというふうにする方が個人的には良いと思ってます。別にFragmentでもいいんだけど、Fragmentだるい。

Navigation Drawerを使う際の画面遷移パターンは、公式サイトでも細かく紹介されてます。

Navigation Drawer | Android Developers

これの通りそのまま作れ!というわけではないですが、ここに書かれていることはそこそこ納得できることなので、見ておくといいと思います。

スプラッシュ画面の動作

このアプリには、カッコイイ!!スプラッシュ画面があります。

しかし、このスプラッシュ画面・・・私が嫌いな実装になってます。このスプラッシュ画面実装のBadなことは後々Qiitaに書こうかと思ってます。

何が嫌かというと、以下のような場面で予期せぬ動作をするからです。

  1. ユーザが間違ってアプリを起動した場合、スプラッシュ画面ですぐにバックキーを押す
  2. スプラッシュ画面が閉じる
  3. 数秒経過すると、スプラッシュ画面の表示時間が終わり、アプリのTop画面が表示される
  4. 「は??え??間違っただけだし、開かなくていいから!」

ということが、Androidのアプリのスプラッシュ画面には多い!

ユーザなめてんのか!と言いたくなるレベルですが、私もよくこのうざい実装やってしまうので、なんとも言えない・・・。

どのようにスプラッシュ画面の表示時間を制御しているかによりますが、次の画面へ遷移する際には、まずスプラッシュ画面がまだ表示中なのかどうかをisFinishingメソッド)等でチェックすることをオススメします。

isFinishingメソッドでも防げないパターンはあると思いますが、最低限何かしらの工夫をした方が良いと思います。

実装

NFCの読み取り

機能実装の気になったところは、このアプリで一番重要なNFCの読み取り部分です。

一番大切なところなのに、え?こんな残念なことってあるの?という感じになってます。

まず、NFC読み取りの画面でSuicaをかざすと、私のNexus5では以下にようになります。

f:id:operando:20141103183604j:plain

おわかりいただけただろうか…。。。

あれ?@yanzmさんが作ってるSuica Reader反応しちゃってるけど!これは大ダメージ!!

はい。私のNexus5にはSuica Readerがインストールされてます。

まず言えることは、これ暗黙的Intentになってますね。だから他にアプリも引っかかってます。これはまずくないか・・・。

似ている機能を提供しているアプリと混在させた状態で実装テストしてみることは大切です。もしかしたらNexus5とかだけこうなる可能せもありますが、コレの場合はそんなことないと思います。

30日間無料のトリック

利用履歴をエクスポートする機能がありますが、これはインストールしてから30日間だけ無料な機能みたいです。

はい、上の一文に大きなトリックが隠されてます。

「インストールしてから30日間だけ無料」

どういう意味かわかりますか?私はAndroidアプリで月額課金(定期購読)の実装を経験したことがあるので、お金周りの実装には鼻が利くんです。

要は、アンインストールし、再インストールすれば「30日間」という制約が解除されます。

無料な期間をアプリ内だけで管理している可能性が高いので、アプリをアンインストールしたらそれまでの経過日数の情報も消えます。

再インストールしたら、初めて利用するユーザということになるので、またインストールした日付から30日間無料なんです。

ということは、やろうと思えばずっと無料でエクスポート機能が使える!

多分これは、開発者の方も気づいていると思います。いや、気づいていると願いたい!

このように無料な期間を再インストールすることで、無限に使えることを避けたい場合には、いくつか方法があります。

  • ユーザ登録の機能をつけ、有料機能はログインしないと使えないようにする
    • 新規登録した日付から30日間無料として、サーバ上でそこら辺の制御をする
    • しかし、毎回新規登録されたら防げない
  • In-app Billingの機能を利用する
    • Googleアカウントに紐づけて購入・購読状態を管理する
    • 具体的な情報を管理するのはGoogle側のサーバなので、実装が割りと楽
    • 定期購読(Subscriptions)については、無料トライアルの期間を設けられる機能が存在するので、それを利用する
    • 上記の機能を使えば、同じGoogleアカウントを使っている場合、無料トライアルの回数を1回だけに制御できる
    • 多分これも別のアカウントを使われたら防げない

その他

利用履歴の一覧を表示しているListViewは、多分libraryを使用しているのではないかと思います。

使えばわかるんですが、このListViewはiPhoneによくあるパターンな気がします。

正直、俺これ嫌い。

はい、ただのわがままです。

しかし、このアプリで使われているListViewはAndroidアプリではあまり使われないタイプな気がします。個人的には、CardUI等の方が好ましいと思います。

おわりに

長々と書きましたが、Suica-hackerはとてもいいアプリです!

NFCが使えるAndroidユーザなら、ぜひ使ってみてください!

Suicaの乗換履歴から簡単交通費精算「スイカハッカー」 - Google Play の Android アプリ

この記事を開発者の方が見てくれると嬉しいですが、開発者含めデザイナーさん等もいたらなんか怒られそうな雰囲気・・・。

こんな感じで不定期に勝手にアプリレビュー書いていきます!