note63

事情

JavaでOauthしよう

JavaでOauthします。

調べてみて出てきたJavaのOauthライブラリは以下の3つ。

一番上はoauth.net自家製のものらしい、ページを見るといろいろな言語に対応している。
二番目はgoogle製?googleドライブとかのチュートリアルにも載ってたし多分そう。
そして今回使ったのが3番目、これが個人的に一番楽だったというか導入方法がわかりやすかったので使った。
ただはまりまくった部分も多かった(つらかった...)。

インストール

scrive-javaのGithubページ(上記リンク)を開き、README下部のGettingStartedページを開く。
そこのdownloads pageとapache commons codesからそれぞれjarファイルを落とす。
apache commons codesはバイナリファイルを選択しよう。(Marvenは使ってないのでスルー)

準備

AndroidManifestに以下を追加しておく。

<!-- インターネットを使えるようにする -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- コールバック先からActivityを呼び出すためにurlスキーマを設定 -->
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="scheme" android:host="hostname"/>

使おう

そうしたらあとはチュートリアル(Step One ~ Five)を黙々とこなしてくだけだけどAndroidTumblrだったので微妙に勝手が違うということでメモ。

Step One

まずは以下のようにOAuthServiceクラスのインスタンスを生成する。

OAuthService service = new ServiceBuilder()
                           .provider(TwitterApi.class)
                           .apiKey("your_api_key")
                           .apiSecret("your_api_secret")
                           .callback("callback_url")
                           .build();

ここでチュートリアルと違うのはcallbackを設定したこと。
これがないとoob(Out-of-band:帯域外)に自動でコールバックされるけどTumblrだからなのかAndroidだからなのかわからないけどOAuthConnectionExceptionが起きて落ちる。
あと、TumblrAPIページで設定してようがなかろうがコード内で指定したコールバックURLが優先されるっぽい。

Step Four

Step TwoとThreeは特に問題なし。
わかりづらいけど、Verifierインスタンの生成時に渡す引数はコールバック時にパラメータとして付属しているoauth_verifierを使用する。

Tumblrの場合はverifier_credentialsとかはないのでここで終わり。

注意

全体的にHTTP通信を行うのでUIスレッドで処理しようとすると落ちる。
そう考えるとイマイチな感じもするけど導入コストの低さは非常に魅力的。

参考