春ですね、梅の咲く時期!!
twitter API 1.1ですが、
2013/03/05で切り替えみたいな記事見ましたので、旧APIでAndroid実装してた部分の、改修やってみました。
今頃修正しても、遅いのですが(汗、、)
現時点で、旧API 1.0でも動くみたいですが、将来的に無くなると予想して作業です。
twitter4J 2.x -> 3.0.3 の移植ですが、結構ハマリました。Androidのサンプルが少い気がしました。
準備などは下記サイトを参考。
推奨されない方法みたいですが、WebView使ってます。
基本はtwitter4J 2.xに似てます。下記ソースです。
1) requestTokenの生成, Intent起動して、onActivityResultでAccesToken生成します、
==============================================
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.auth.AccessToken;
import twitter4j.auth.OAuthAuthorization;
import twitter4j.auth.RequestToken;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationContext;
public static OAuthAuthorization _oauth = null;
private RequestToken requestToken = null;
String mCallbackURL = "myapp://oauth";
public class LoadTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void ... params) {
try
{
exec_connect();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
try
{
start_Intent();
}catch(Exception e){
e.printStackTrace();
}
}
}
private void start_Intent() throws Exception{
try
{
Intent intent = new Intent(this, TwitterLogin.class);
intent.putExtra("auth_url", requestToken.getAuthorizationURL());
this.startActivityForResult(intent, REQUEST_CODE);
}catch( Exception e){
throw e;
}
}
private void exec_connect() throws Exception{
try
{
//Log.d(TAG, "#exec_connect=" );
//Twitetr4Jの設定を読み込む
Configuration conf = ConfigurationContext.getInstance();
//Oauth認証オブジェクト作成
_oauth = new OAuthAuthorization(conf);
_oauth.setOAuthConsumer(m_Const.CONSUMER_KEY, m_Const.CONSUMER_SECRET) ;
//アプリの認証オブジェクト作成
try {
requestToken = _oauth.getOAuthRequestToken(mCallbackURL);
} catch (TwitterException e) {
e.printStackTrace();
}
}catch( Exception e){
throw e;
}
}
2) WebView, コールバック[oauth_verifier]をGETします。
==============================================
package com.kuc_arc_f.app.hoge;
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.kuc_arc_f.fw.*;
public class TwitterLogin extends Activity {
//
private com.kuc_arc_f.fw.ComUtil m_Util = new ComUtil();
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.twitterlogin );
try
{
init_proc();
}catch(Exception e){
e.printStackTrace();
m_Util.errorDialog(this, e.toString() + e.getMessage());
}
}
//
private void init_proc() throws Exception{
try
{
WebView webView = (WebView)findViewById(R.id.twitterlogin);
webView.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
String CALLBACK_URL = "myapp://oauth";
if(url != null && url.startsWith(CALLBACK_URL)){
String[] urlParameters = url.split("\\?")[1].split("&");
String oauthToken = "";
String oauthVerifier = "";
if(urlParameters[0].startsWith("oauth_token")){
oauthToken = urlParameters[0].split("=")[1];
}else if(urlParameters[1].startsWith("oauth_token")){
oauthToken = urlParameters[1].split("=")[1];
}
if(urlParameters[0].startsWith("oauth_verifier")){
oauthVerifier = urlParameters[0].split("=")[1];
}else if(urlParameters[1].startsWith("oauth_verifier")){
oauthVerifier = urlParameters[1].split("=")[1];
}
Intent intent = getIntent();
intent.putExtra("oauth_token" , oauthToken);
intent.putExtra("oauth_verifier", oauthVerifier);
setResult(Activity.RESULT_OK, intent);
finish();
}
}
});
// 認証ページを表示。
webView.loadUrl(this.getIntent().getExtras().getString("auth_url"));
}catch(Exception e){
throw e;
}
}
}
3) AccessTokenをGETします。
==============================================
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if(resultCode == RESULT_OK){
super.onActivityResult(requestCode, resultCode, intent);
TokenTask tsk = new TokenTask();
tsk.execute(intent);
}
}
public class TokenTask extends AsyncTask<Intent, Void, Void> {
@Override
protected Void doInBackground(Intent ... params) {
try
{
m_RetAcToken= m_Const.NG_CODE;
AccessToken token = null;
token = _oauth.getOAuthAccessToken( requestToken, params[0].getExtras().getString("oauth_verifier"));
//Log.d(TAG, "TokenTask.token="+ token.getToken());
//Log.d(TAG, "TokenTask.token.oauth_token_secret="+ token.getTokenSecret());
m_RetAcToken= m_Const.OK_CODE;
} catch (TwitterException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
try
{
if(m_RetAcToken.equals( m_Const.OK_CODE)){
//ok
}else{
m_Util.errorDialog(BG01Act.this, "system error, fail get AccessToken .");
}
}catch(Exception e){
e.printStackTrace();
}
}
}
==============================================
*)参考サイト様:
http://techbooster.org/android/mashup/5301/
http://techbooster.org/android/5040/
http://qiita.com/items/f6f39900fd5e449045f9