Android アプリで Google Drive API を使う
Android アプリから Google Drive のファイルを扱う方法です。
- Google Drive SDK のドキュメント: Drive | Google Developers
前提
ここでは、次のような開発環境を前提としています。
- Android Studio を使用 (Android Studio
2.7*1 ) - ビルドには Gradle を使用 (Gradle 1.7)
クイックスタート
- Android で Drive SDK を使うためのクイックスタート: GitHub - googledrive/android-quickstart: Quickstart application showing the Google Drive API for Android
上のページの内容をベースに簡単に手順をまとめておきます。
ステップ 1: Generate the signing certificate fingerprint (SHA1)
アプリのユーザーが Google Drive へのアクセス権をアプリに与える際に、Google Drive 側がアプリを識別するために証明書のフィンガープリントを使うようです。 デバッグ用にアプリをパッケージングして Google Drive にアクセスする場合も当然ながらアプリを認可してもらう必要があるので、デバッグ用パッケージ作成の際に使用する証明書のフィンガープリントを取得します。
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore -list -v
デフォルトでは、デバッグ用パッケージ作成の際に使用する証明書は ~/.android/debug.keystore にあるので、上記コマンドを実行すればフィンガープリントを得られます。 keytool コマンドは JDK に含まれているので、パスが通っていれば使えるはずです。
Windows (Vista 以降?) の場合も C:\Users\user_name\.android\debug.keystore にあるのですが、多分ユーザーホームを表すためにチルダを使えないので、代わりに下記コマンドを使用すればよいはずです。
keytool -exportcert -alias androiddebugkey -keystore %USERPROFILE%/.android/debug.keystore -list -v
パスワードを聞かれるので、デフォルトのデバッグキーストアのパスワードである “android” を入力してください。 コマンドの結果としていろいろ表示されますが、「証明書のフィンガプリント」 の 「SHA1」 の項が次のステップで必要なので、それをメモっておいてください。
ステップ 2: Enable the Drive API
次に、アプリから Google Drive の API を使用できるようにします。
- Google API コンソール: Google Cloud Platform
まずは上のリンク先を開き、次の手順を進めます。
- Google API コンソールで API プロジェクトを作成します (アプリごとにプロジェクトを作るのか、複数アプリで同じプロジェクトを使いまわすべきなのか、よくわかってない)
- API プロジェクトの中の 「Service」 タブを選んで、「Drive API」 を有効にする
- 「API Access」 タブを選んで、「Create an OAuth 2.0 client ID」 をクリック
- 「Branding Information」 セクションにて、アプリの名前を入力して 「Next」 をクリック。 製品ロゴや web サイトの URL もあるなら入力する
- 「Client ID Settings」 セクションで次の手順を行う:
ステップ 3: Create and Configure an Android Project
ここからはアプリを作成していきます。 まずは Android アプリのプロジェクトを作成します。
公式サイトのクイックスタートにはいろいろ書いていますが、Android Studio を使ってる場合はとりあえず適当にプロジェクトを作ればよいです。 ただし、アプリのパッケージ名はステップ 2 で入力したものに合わせる必要があります。
依存ライブラリなどは build.gradle に書くので、ここでは何もしません。
ステップ 4: Set up the sample
Google Drive を使うアプリのサンプルを書いたので参考にしてください。 (公式ドキュメントのサンプルとは別です。)
アプリのサンプルコード
テキストエディタと 「Save」 ボタンと 「Load」 ボタンがある Activity のみが含まれるアプリです。
- Activity 起動時に Google アカウントを選択
- 「Save」 をタップするとテキストエディタに入力した文字列が選択した Google アカウントの Google Drive に保存される (ファイル名は “google_drive_test”)
- 「Load」 をタップすると、Google Drive に保存されているテキストがテキストエディタに入力される
コードは次のとおり。
とりあえず動くという段階で、例外処理などはちゃんとやってないので、実際にアプリを作る時にはいろいろ変更が必要です。
build.gradle
build.gradle は上のような感じです。
dependencies { // com.google.android.gms.common.AccountPicker とかで必要 compile 'com.google.android.gms:play-services:3.1.36+' // Drive API ( http://code.google.com/p/google-api-java-client/wiki/APIs#Drive_API ) compile 'com.google.apis:google-api-services-drive:v2-rev96-1.16.0-rc' compile 'com.google.http-client:google-http-client-gson:1.16.0-rc' compile 'com.google.api-client:google-api-client-android:1.16.0-rc' }
com.google.android.gms:play-services:3.1.36+ は Android SDK Manager で用意されるリポジトリを使うので、次の作業が必要です。
他の依存ライブラリは Maven セントラルリポジトリからとってくるので、次の記述をしておけばよいはずです。
repositories { mavenCentral() }
ステップ 5: Run the sample
ここまででアプリから Google Drive を使う準備はできましたので、アプリをデバッグ用にパッケージングして実行します。
ステップ 4 のサンプルアプリの場合、アプリ起動時に Google アカウントを選択して、その後テキストエディタに文字を入力して 「Save」 をタップすると、Google Drive に 「google_drive_test」 というファイルが作成されると思います。
通信失敗時などのエラーはちゃんとハンドリングしてないので、うまくいかない場合は logcat を見てください。
参考文献
- Drive API の Javadoc: Overview (Drive API v2 (Rev. 288) 1.23.0)
- API リファレンス: API Reference | Drive REST API v2 | Google Developers (具体的にどういう API を叩けるのかはここを見ればよいと思います)
- Google Developers Japan: Google ドライブと Google Drive SDK を公開しました
- プログラム備忘録 Android で Google Drive API の利用手順
- SUGARSPOT WEBLOG: [Android]Google Drive SDKを触ってみる
*1:2.7 はまだリリースされてないから 1.7 の間違いっぽい?