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