AndroidアプリでTwitterのOAuth認証の一部分を備忘録。
やりたいことはTwitterの認証画面を表示させて「承認」後、前のActivityに戻る動き。
まず認証画面を開く該当ActivityをManifestファイルに以下のように定義(今回はWebViewでTwitter認証画面を開いた)
<activity android:name="settingTwitter" android:screenOrientation="portrait" android:launchMode="singleInstance"> <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="app" /> </intent-filter> </activity>
OAuthのCallBackURLは「myapp://app」とする
そして上記でManifestファイルで定義したActivityでonNewIntentをオーバーライド。
そこでやりたい処理を書く(この場合はtokenとtokenSecretをプレファレンスに記録した)。そしてfinish()で終了させる。
import oauth.signpost.OAuthProvider;
import oauth.signpost.basic.DefaultOAuthProvider;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
@Override
public void onNewIntent(Intent intent){
super.onNewIntent(intent);
Uri uri = intent.getData();
if(uri != null && uri.toString().startsWith(CALLBACKURL)){
String verifire = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER);
try{
provider.retrieveAccessToken(consumer, verifire);
// トークンの書き込み
SharedPreferences pref = getSharedPreferences("Twitter", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString("token", consumer.getToken().toString());
editor.putString("tokenSecret", consumer.getTokenSecret().toString());
editor.commit();
Toast.makeText(settingTwitter.this, "Twitterの設定が完了しました", Toast.LENGTH_SHORT).show();
}catch(Exception e){
Toast.makeText(this, "トークンの書き込みに失敗しました", Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(this, "認証処理に失敗しました", Toast.LENGTH_SHORT).show();
}
finish();
}
なお
providerは
OAuthProvider provider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token", "http://twitter.com/oauth/access_token", "http://twitter.com/oauth/authorize");
consumerは
CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);

