AndroidアプリのAndroidManifest.xmlは以下のように設定します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.google.oauth.sample" >
<!-- インターネット通信を行うため必要 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- アカウント情報を取得するため必要 -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- Google Play Serviceを利用するため必要 -->
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</activity>
</application>
</manifest>
必要なパーミッションを追加して、Google Play Servicesを使用するために必要なメタデータを設定します。
アプリのbuild.gradleは以下のように設定します。
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.example.android.google.oauth.sample"
minSdkVersion 14
targetSdkVersion 22
versionCode 1
versionName "1.0"
// ビルド時に発生する
// com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
//を回避する設定
multiDexEnabled = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
// リポジトリを追加
repositories {
mavenCentral()
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'
// 以下依存ライブラリを追加
compile 'com.google.apis:google-api-services-drive:v2-rev177-1.20.0'
compile 'com.google.apis:google-api-services-plus:v1-rev232-1.20.0'
compile 'com.google.android.gms:play-services:7.5.0'
compile 'com.google.api-client:google-api-client-android:1.20.0'
compile 'com.google.http-client:google-http-client-gson:1.20.0'
}
multiDexEnabled = trueの設定を行わなければ、DexIndexOverflowExceptionでビルドエラーが発生します。依存ライブラリは2015年7月時点での最新版を利用しています。この組み合わせなら動作しますが、バージョンアップして動作が安定する可能性があるので、できる限り新しいバージョンを利用することを推奨します。
アプリの実装の解説に先立ち、アプリの動作を説明しておきます。アプリはメイン画面とメニュー操作だけの簡単な作りになっています。
アプリを起動すると、Google DriveとGoogle+を使用するアカウント選択ダイアログが表示されます。アプリの設計によりますが、このダイアログの表示を省略して、アカウント情報(具体的にはメールアドレス)をユーザーに手入力してもらうことも可能ですが、この方法が間違いないでしょう。
アカウントを選択すると、選択したアカウントのアカウント名が表示されます。この状態でGoogle APIが利用可能な状態になっています。
メニューから利用するサービスを選択します。ここではDriveを選択します。OAuthは先ほどのアカウントの選択ダイアログをキャンセルで閉じた場合にアクティブになり、再度アカウントの選択ダイアログを表示します。
APIの初回利用時にGoogle Developer Consoleで作成した認証画面が表示されます。ユーザーはOKをタップして同意しない限りAPIが利用できません。
この認証画面はOKを選択すると、次回以降表示されません。この認証画面やその周辺の実装のテストを行いたい場合、「Google設定 > 接続済みのアプリ」からテスト対象のアプリを選択し、「接続を解除」をタップすることで初期状態に戻すことができます。
Driveの機能として、Driveにあるファイル一覧を取得して、ファイル名と所有者を表示しています。全部モザイクで恐縮です。ぜひ、今回の記事とサンプルアプリを用いて実際に動作させてみてください。
Plusでは、ユーザーのプロフィールを取得して表示しています。後半のモザイクになっている部分は、ユーザープロフィールを持つPersonインスタンスをtoString()したJSON形式の文字列です。ここも、実際に動作させてみてどのような情報が含まれているか確認してみてください。
「OAuth」の基本動作を知る
RFCとなった「OAuth 2.0」――その要点は?
OAuthを悪用したアカウント乗っ取りに注意喚起、IPA
JavaでTwitterをOAuth認証して使えるTwitter4Jとは
OAuthでバーコード情報をTwitterに投稿するiPhoneアプリ作成Copyright © ITmedia, Inc. All Rights Reserved.