やぎLabs

AndroidアプリでTwitterのOAuth認証後の処理

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);

この時間帯に他の人が読んでる記事