Androidでtwitter4jを利用してOAuth認証(ブラウザ)
2011 年 7 月 4 日
コメントはありません
他のIntentから遷移し、URL表示しないブラウザを立ち上げ認証したらhogehoge。
public class OAuthActivity extends Activity {
final private String CONSUMER_KEY = "xxxxxx";
final private String CONSUMER_SECRET = "xxxxxx";
private String CALLBACK_URL = "myapp://oauth";
private OAuthAuthorization oauth;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WebView webview = new WebView(this);
setContentView(webview);
Configuration config = new ConfigurationBuilder().build();
oauth = new OAuthAuthorization(config);
oauth.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
oauth.setOAuthAccessToken(null);
try {
String url = oauth.getOAuthRequestToken(CALLBACK_URL).getAuthorizeURL();
webview.loadUrl(url);
} catch (TwitterException e) {
Toast.makeText(this, R.string.twitter_failed, Toast.LENGTH_LONG).show();
finish();
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Uri uri = intent.getData();
if (uri != null && uri.toString().startsWith(CALLBACK_URL)) {
String verifier = uri.getQueryParameter("oauth_verifier");
try {
AccessToken at = oauth.getOAuthAccessToken(verifier);
Log.d(getLocalClassName(), "screen_name = " + at.getScreenName());
Log.d(getLocalClassName(), "access_token = " + at.getToken());
Log.d(getLocalClassName(), "access_token_secret = " + at.getTokenSecret());
// hogehoge
Toast.makeText(this, R.string.twitter_login_success, Toast.LENGTH_LONG).show();
finish();
} catch (Exception e) {
Log.w(getLocalClassName(), e.getMessage());
Toast.makeText(this, R.string.twitter_login_failed, Toast.LENGTH_LONG).show();
finish();
}
}
}
}
AndroidManifest.xml該当箇所。
lunchModeで多重起動させない。
あとヒストリー残さない。
ブラウザから「myapp://oauth」でIntentが起動するように。
<activity
android:name=".OAuthActivity"
android:launchMode="singleTask"
android:noHistory="true"
>
<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="oauth" />
</intent-filter>
</activity>