2011年12月13日

【Android】GoogleのOAuthを利用する

前回はOAuthとIntentの話を中心にさせていただきました。
かなり重要ですので、今回を読む前に前回のブログ記事を読んで下さい。

では、今回GoogleのOAuthを利用します。

AndroidではGoogleに限り、登録アカウントから選択する方法もあるのですが、
今回はブラウザ経由での認証の説明をしたいと思います。



まずはManifest.xmlを編集します。

AndroidManifest.xml

<activity
    android:label="@string/app_name"
    android:name=".GoogleOAuthActivity"
    android:launchMode="singleInstance"
  >
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <!-- Intent filter for OAuth -->
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="myapp" android:host="callback"/>
    </intent-filter>
  </activity>

さて、intent-filterに新しいものが追加されています。
ブラウザからのIntentを受け取る際の決まりみたいになっています。
dataの行ですが、
schemeとhostが指定されています。
これはGoogleのOAuthが完了した際のcallbackになりますので、
変更する際は気をつけて下さい。
myappとcallbackの部分は変更して使用して下さい。

また、android:launchMode="singleInstance"
という一文が追加されています。
これを追加しないと、Intentを受け取った際に、別のプロセスになってしまいます。
どういう不都合があるかというと、callbackで受け取ったデータが、
入力したClient ID等と紐づきません。
これも決まり文句として入れておきましょう。

次に、OAuthですが、
singpostの.jarファイルを2つ使用します。

signpost-core-1.2.1.1.jar
signpost-commonshttp4-1.2.1.1.jar

の2つになります。
こちらは現在の最新版になりますが、DL時の最新版をダウンロードして下さい。
仕様が変更されていたらすいません。

この2つを使いいよいよOAuthのコード…と言いたいところですが、
GoogleからClient IDとClient Secretを発行してもらわなければいけません。

Google APIs Consoleへアクセスして下さい。
利用したいAPIの申し込みをして、Client IDとClient Secretを所得して下さい。

Client IDとClient Secretが発行されたらいよいよコーディングへ入ります。

と、いった所で次回にしたいと思います。

次回はsignpostのライブラリを利用したOAuthになります。

よろしくお願いします。