読者です 読者をやめる 読者になる 読者になる

tomoima525's blog

Androidとか技術とかその他気になったことを書いているブログ。世界の秘密はカレーの中にある!サンフランシスコから発信中。

バックアップ機能がついたTwitCal 3.4.0をリリースしました

android twitter 開発

Android向けのカレンダー形式TwitterClient TwitCalの最新版をリリースしました。 今回はいつものバグ修正と合わせて、バックアップ機能を追加しました。

TwitCal Free ツイートをカレンダーでふりかえろう
TwitCal Free ツイートをカレンダーでふりかえろう
開発元:tomoima@kumonos
無料
posted with アプリーチ

広告無し、FavしたTweetも表示できるPro版はこちら

TwitCal Pro ツイートをカレンダーでふりかえろう
TwitCal Pro ツイートをカレンダーでふりかえろう
開発元:tomoima@kumonos
¥100
posted with アプリーチ

詳細については以下を御覧ください。

バックアップ機能

TwitCalに保存されているデータをバックアップし、他の端末に同期することができるようになります。携帯の買い替えをした場合、今まではTwitCalを再インストールした場合、直近の3000件しか表示できませんでした。バックアップ機能を使うことで、旧端末にあるデータを引き継ぐことが出来るようになります。 f:id:tomoima525:20160913143825p:plain:w400
データのバックアップ先はGoogle Driveになります。そのためバックアップ機能を使うためにはGoogle Accountが必要になります。

ちなみに、バックアップした生データはJSON形式になっています。

f:id:tomoima525:20160913143858p:plain:w400
アプリでjsonファイル開くとこんな感じ

Pro版を利用してもらうと、Favしたツイートも取得できます。このデータを使ってツイートを分析したり整理したり面白いことができるんじゃないでしょうか...!!

内部的な実装の話

Google Drive API

バックアップ機能を実装するにあたり、どんなAndroid端末でも安全にデータを同期できるところを検討したところ、Google Drive APIに行き当たりました。

Google Driveへのアップロードの仕組みとしては

  1. TwitCalのデータをRealmから全件取得
  2. Gsonを使ってJSON形式にシリアライズ
  3. シリアライズしたデータをGoogle Drive APIを使ってアップロード

となります。同期の仕組みは上の逆の順番になります。Realmが相当高速とは言え、そのデータをシリアライズ、アップロードするには5秒以上の時間がかかります。そこで今回はIntentServiceを使って実装しました。Google Drive APIには素晴らしいサンプルがあるのですが、IntentServiceを使ったケースはなかったため、若干手間取りました。
具体的には

  1. Google Drive APIはConnection結果を受け取るために onActivityResultが必要だが、IntentServiceにはない
  2. Google Drive APIは一部非同期処理でCallbackを受け取る実装になっているが、IntentService#onHandleIntent()の処理が終了と同時にワーカースレッドを閉じてしまい、Callbackが受け取れない

という問題がありました。 1.については、Activity起動時にGoogle Drive APIに接続していない場合は接続させることで解決しました。
2.については、CountDownLatchを使って処理が完了するまでワーカースレッドをWaitさせることで対応しました。*1 上記の具体的な実装はこちらのサンプルアプリにまとめてあります。

github.com

サンプルアプリの利用方法

Sampleアプリで利用されている、Google Drive APIを使うためには、ドキュメントに記載があるとおり、OAuth認証を設定する必要があります

Realmアップデート(0.86 -> 1.2.0)

前回アプリのリリースをした3月時点では0.87.2が最新だったのですが、気づけば 1.0を大幅に超えて1.2.0がリリースされていました。0.87.2 からの変更点は数多くあったのですが、非同期処理方法の拡充とgradle plugin対応が大きかったです。あと、 createOrUpdateAllFromJson のようなリクエストデータをまるごとRealmに格納できるようなAPIが追加されていたのが個人的には嬉しかったです。

まとめ

このアプリは自分が使いたい機能を淡々と入れてますが、興味持っていただければ使ってフィードバックもらえると嬉しいです!

TwitCal Free ツイートをカレンダーでふりかえろう
TwitCal Free ツイートをカレンダーでふりかえろう
開発元:tomoima@kumonos
無料
posted with アプリーチ

広告無し、FavしたTweetも表示できるPro版はこちら

TwitCal Pro ツイートをカレンダーでふりかえろう
TwitCal Pro ツイートをカレンダーでふりかえろう
開発元:tomoima@kumonos
¥100
posted with アプリーチ

*1:これは最新のRealmであれば Realm.waitForChange() で解決できるかも...