twitter4jを使用したAndroid Twitterアプリケーション作成

ここで説明している仕組みを使って、Camera2Tweetというアプリを公開しました。
https://market.android.com/details?id=com.yujimny.android.c2t

twitter4jは2.1.12を使用

アプリを作る上でユーザ認証が一番の課題だが、Twitterは現在Basic認証を許していない。
xAuthはTwitterさんと英語でやり取りしなければいけないらしいので、
認証はOAuthを使用、ブラウザを介してTwitterサイトで認証し、コールバックでアプリに戻ってくる仕組みに。

http://twitter.com/apps/Twitterサイトに自分の作成するアプリケーションを登録します。
アプリケーションの種類はブラウザアプリケーションを選択。
登録したらConsumer keyとConsumer secretを控えておく。
ちなみにここに記載してあるコールバックURLは下記ソースコードのコールバックURLとは別です。

Activityのソース一部分。
FooBarActivityとしておきます。

private static final String CONSUMER_KEY = "〜〜〜"; // Twitterサイトから取得したconsumer_key
private static final String CONSUMER_SECRET = "〜〜〜"; // Twitterサイトから取得したconsumer_secret
private static final String CALLBACK_URL = "myapp://oauth"; // TwitterサイトからコールバックされるURL

// Twitter
private Twitter mTwitter;
private OAuthAuthorization mOauth;
private String mAccessToken, mAccessTokenSecret;
private Configuration mConf;

private void askOAuth() {
	ConfigurationBuilder cbuilder = new ConfigurationBuilder();
	cbuilder.setOAuthConsumerKey(CONSUMER_KEY);
	cbuilder.setOAuthConsumerSecret(CONSUMER_SECRET);
	Configuration conf = cbuilder.build();
	mOauth = new OAuthAuthorization(conf);
	mOauth.setOAuthAccessToken(null); // これをやらないと下記getOAuthRequestToken()で例外が発生する
	String authUrl = null;
	try {
		authUrl = mOauth.getOAuthRequestToken(CALLBACK_URL).getAuthorizationURL();
	} catch (Exception e) {
		Logger.putLog(e.toString());
		return;
	}
	Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl));
	startActivity(intent);
}

@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 = mOauth.getOAuthAccessToken(verifier);
			mAccessToken = at.getToken();
			mAccessTokenSecret = at.getTokenSecret();
			createTwitterInstance();
		} catch (Exception e) {
			Logger.putLog(e.getMessage());
		}
	}
}

private void createTwitterInstance(){
	ConfigurationBuilder cbuilder = new ConfigurationBuilder();
	cbuilder.setOAuthConsumerKey(CONSUMER_KEY);
	cbuilder.setOAuthConsumerSecret(CONSUMER_SECRET);
	cbuilder.setOAuthAccessToken(mAccessToken);
	cbuilder.setOAuthAccessTokenSecret(mAccessTokenSecret);
	mConf = cbuilder.build();
	TwitterFactory twitterFactory = new TwitterFactory(mConf);
	mTwitter = twitterFactory.getInstance();
}

AndroidManifest.xmlの一部。
・launchMode="singleTask"
・intent-filterにコールバックURLを指定
・INTERNETパーミション
がポイント。

launchMode="singleTask"にしないとブラウザからのコールバックを受けるonNewIntent()が呼ばれない。
上記ソースコードでコールバック先をmyapp://oauthとしたので、intent-filterにこのように記述。

INTERNETパーミションはインターネットに接続するのだから当然必要。

]
        
            
            
            
            
        
        
            
            
        



これでTwitterクラスのインスタンスが出来ればこっちのもんですね。

参考URL
http://garlicg.blog92.fc2.com/blog-entry-2.html