ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

Android アプリで Google Drive API を使う

Android アプリから Google Drive のファイルを扱う方法です。

前提

ここでは、次のような開発環境を前提としています。

クイックスタート

上のページの内容をベースに簡単に手順をまとめておきます。

ステップ 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 DriveAPI を使用できるようにします。

まずは上のリンク先を開き、次の手順を進めます。

  1. Google API コンソールで API プロジェクトを作成します (アプリごとにプロジェクトを作るのか、複数アプリで同じプロジェクトを使いまわすべきなのか、よくわかってない)
  2. API プロジェクトの中の 「Service」 タブを選んで、「Drive API」 を有効にする
  3. API Access」 タブを選んで、「Create an OAuth 2.0 client ID」 をクリック
  4. 「Branding Information」 セクションにて、アプリの名前を入力して 「Next」 をクリック。 製品ロゴや web サイトの URL もあるなら入力する
  5. 「Client ID Settings」 セクションで次の手順を行う:
    1. 「Application type」 で 「Installed application」 を選択
    2. 「Installed application type」 で 「Android」 を選択
    3. 「Package name」 で自分の Android アプリのパッケージ名を入力
    4. 「Signing certificate fingerprint」 にステップ 1 で得たフィンガープリントをコピーして貼り付ける
    5. 「Create Client ID」 をクリック

ステップ 3: Create and Configure an Android Project

ここからはアプリを作成していきます。 まずは Android アプリのプロジェクトを作成します。

公式サイトのクイックスタートにはいろいろ書いていますが、Android Studio を使ってる場合はとりあえず適当にプロジェクトを作ればよいです。 ただし、アプリのパッケージ名はステップ 2 で入力したものに合わせる必要があります。

依存ライブラリなどは build.gradle に書くので、ここでは何もしません。

ステップ 4: Set up the sample

Google Drive を使うアプリのサンプルを書いたので参考にしてください。 (公式ドキュメントのサンプルとは別です。)

アプリのサンプルコード

テキストエディタと 「Save」 ボタンと 「Load」 ボタンがある Activity のみが含まれるアプリです。

コードは次のとおり。

とりあえず動くという段階で、例外処理などはちゃんとやってないので、実際にアプリを作る時にはいろいろ変更が必要です。

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()
}
AndroidManifest.xml

AndroidManifest.xml には次のパーミッションを追加しておく必要があります。

<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.INTERNET" />

ステップ 5: Run the sample

ここまででアプリから Google Drive を使う準備はできましたので、アプリをデバッグ用にパッケージングして実行します。

ステップ 4 のサンプルアプリの場合、アプリ起動時に Google アカウントを選択して、その後テキストエディタに文字を入力して 「Save」 をタップすると、Google Drive に 「google_drive_test」 というファイルが作成されると思います。

通信失敗時などのエラーはちゃんとハンドリングしてないので、うまくいかない場合は logcat を見てください。

*1:2.7 はまだリリースされてないから 1.7 の間違いっぽい?