アンドロイドのあれこれ
[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
WebView使わずに、twitter4j のOAuth認証
Androidで、twitter4jライブラリーを使ったWebViewなしOAuth認証サンプルコードの紹介します。
OAuth認証にWebViewってなにがいけないの?という方は以下の記事を読むのをおすすめします。
OAuthの認証にWebViewを使うのはやめよう
http://shogo82148.github.com/blog/2012/11/24/no-more-webview/
Twitter4j
http://twitter4j.org/
OAuth認証にWebViewってなにがいけないの?という方は以下の記事を読むのをおすすめします。
OAuthの認証にWebViewを使うのはやめよう
http://shogo82148.github.com/blog/2012/11/24/no-more-webview/
Twitter4j
http://twitter4j.org/
WebViewを使わずにOAuthの認証する方法はほかにもありますが、ここで紹介する方法はWebViewのかわりに本アプリからブラウザーアプリを立ち上げてユーザーが認証したあとにアプリへ戻るようにしています。
SignTwitterActivty.java
TwitterCallbackAsyncTask.java
ブラウザーアプリからのインテントを受け取るためにAndroidManifest.xmlにintent-filterを追加
PS.
(´;ω;`)アドベントカレンダーなのに毎日の更新が追いつかなくて申し訳ありませんm(__;)m
SignTwitterActivty.java
public class SignTwitterActivity extends Activity{
private static String ConsumerKey = "xxxx";
private static String ConsumerSecret = "xxxxxxxxxxxxxxxxxxxxxxxx";
public static RequestToken _req = null;
public static OAuthAuthorization _oauth = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button reqOAuth = (Button)findViewById(R.id.request_oauth);
reqOAuth.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//twitterにoauthリクエストする
startTwitterOAuth();
}
});
}
//twitterにoauthリクエストを送る
private void startTwitterOAuth(){
//Twitetr4jの設定を読み込む
Configuration conf = ConfigurationContext.getInstance();
//Oauth認証オブジェクト作成
_oauth = new OAuthAuthorization(conf);
//Oauth認証オブジェクトにconsumerKeyとconsumerSecretを設定
_oauth.setOAuthConsumer(ConsumerKey, ConsumerSecret);
//アプリの認証オブジェクト作成
try {
//認証後アプリに戻るようにcallbackを設定
_req = _oauth.getOAuthRequestToken("demotwittercallback://SignTwitterActivity");
} catch (TwitterException e) {
Log.v("TEST", "err:" + e.getErrorMessage(), e);
}
String uri = _req.getAuthorizationURL();
//ブラウザーアプリへ移動、RequestTokenを取得するために
startActivity(new Intent(Intent.ACTION_VIEW , Uri.parse(_uri)));
finish();
}
@Override
protected void onResume() {
super.onResume();
//callback - Twitterの認証画面から発行されるIntentからUriを取得
Uri uri = getIntent().getData();
if(uri != null && uri.toString().startsWith("demotwittercallback://SignTwitterActivity")){
TwitterCallbackAsyncTask callbackTask = new TwitterCallbackAsyncTask(this);
callbackTask.execute(uri);
}
}
}
TwitterCallbackAsyncTask.java
public class TwitterCallbackAsyncTask extends AsyncTask<Uri, Integer, AccessToken>{
@Override
protected AccessToken doInBackground(Uri... params) {
Uri callbackUri = params[0];
String resp = null;
AccessToken accToken = null;
String verifier = callbackUri.getQueryParameter("oauth_verifier");
try {
accToken = SignTwitterActivity._oauth.getOAuthAccessToken(
SignTwitterActivity._req, verifier);
} catch (TwitterException e) {
Log.v("ERR","callback err:" + e.getMessage());
return null;
}
return accToken;
}
@Override
protected void onPostExecute(AccessToken result){
if (result != null) {
/**
/* tokenとtokenSecretの取得
/* String token = result.getToken();
/* String tokenSecret = result.getTokenSecret();
*/
} else {
Log.v("ERR","callback task error.");
}
}
}
ブラウザーアプリからのインテントを受け取るためにAndroidManifest.xmlにintent-filterを追加
....
<activity android:name=".SignTwitterActivity">
<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="demotwittercallback" />
</intent-filter>
</activity>
....
PS.
(´;ω;`)アドベントカレンダーなのに毎日の更新が追いつかなくて申し訳ありませんm(__;)m
COMMENT