Twitter4jを使ってOAuth認証をアプリ内で行う方法

Twitterを連携して、OAuth認証を取る方法はいくつかあるようですが、今回はアプリ内で行う方法を勉強したいと思います。

※多くのサイトでアプリの認証はブラウザアプリに飛ばして、ブラウザで認証後callbackを利用していました。

 

ブラウザアプリに飛ばして認証してもいいのですが、その方法をしなかったのは、「気にいらなかったから」です。

特にブラウザアプリに遷移をしても構わないのであればいいのですが、他のアプリに移動するのが少し気になるのでアプリ内で完結を目指します。

Twitter4j

を利用します。

ダウンロードのところにAndroid用のものが用意されているので、ダウンロードします。

 

中を見ると、アプリのデータが入っているのですが、・・・量が多い。

 

.jarファイルや、javadoc(?)などが大量にあって、何を使えばいいのか不明でした。。

 

ここで使うのはlibディレクトリの中にある「twitter4j-core-android-2.2.5.jar」

だけでした。(今回は。他のはちょっと分からない。)

 

ライブラリを取得できたので、アプリを作成します。

twitter4j-core-android-2.2.5.jarをlibフォルダを作成してその中にいれたら、右クリックでAdd to Pathをすると、アプリにライブラリのpathが通ります。

static final String CALLBACK_URL = "好きな言葉";
static final String CONSUMER_ID = "コンシューマーID";
static final String CONSUMER_SECRET = "コンシューマーシークレット";
private RequestToken _reqToken = null;
private Twitter _twitter = null;

を用意します。

CONSUMER_IDとかはTwitter側で開発者登録をして、アプリ登録をすると発行されます

開発者ページ

で、アプリを認証させるには、まずTwitter4jでいくつかのオブジェクトを作成します。

_twitter = new TwitterFactory().getInstance();
_twitter.setOAuthConsumer(CONSUMER_ID, CONSUMER_SECRET);
try {
_reqToken = _twitter.getOAuthRequestToken(CALLBACK_URL);
} catch (TwitterException e) {
finish();
}
Toast.makeText(this, _reqToken.getAuthorizationURL(), 800).show();

クラスはeclipseの補完に任せておりますが、補完で上記のクラスが出なかった場合には、もう一度、先ほどのtwitter4jのbuild pathを見てみましょう。

で、このクラスに関してはインターネットの接続をするので、manifestを書き換えます。

追加:

<uses-permission android:name="android.permission.INTERNET"/>

でパブリッシュをすると、URLがToastで表示されると思います。

 

そのURLがアクセスするURLです。

layoutのxmlを下記のようにします。

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout 
 android:orientation="vertical" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 xmlns:android="http://schemas.android.com/apk/res/android">  
 <LinearLayout 
 android:id="@+id/LinearLayout01" 
 android:layout_height="wrap_content" 
 android:layout_width="wrap_content">
 </LinearLayout>  
</LinearLayout>

必要なのは、中のLinearLayout01だけです。

でアプリ内にwebViewを追加して、OAuthのURLを追加、及び、OAuthの認証後にToastでToken出力の関数を書きます。

private void callOauth(String _url){

 WebView webView = new WebView(this);
 LinearLayout _ll = (LinearLayout)findViewById(R.id.LinearLayout01);
 _ll.addView(webView);
 webView.setWebViewClient(new WebViewClient(){

 // ページ描画完了時に呼ばれる。
 public void onPageFinished(WebView view, String url) {
 super.onPageFinished(view, url);
 if(url != null && url.startsWith(CALLBACK_URL)){
 // URLパラメータを分解する。
 String[] urlParameters = url.split("\\?")[1].split("&");
 String oauthToken = "";
 String oauthVerifier = "";

 // oauth_tokenをURLパラメータから切り出す。
 if(urlParameters[0].startsWith("oauth_token")){
 oauthToken = urlParameters[0].split("=")[1];
 }else if(urlParameters[1].startsWith("oauth_token")){
 oauthToken = urlParameters[1].split("=")[1];
 }

 // oauth_verifierをURLパラメータから切り出す。
 if(urlParameters[0].startsWith("oauth_verifier")){
 oauthVerifier = urlParameters[0].split("=")[1];
 }else if(urlParameters[1].startsWith("oauth_verifier")){
 oauthVerifier = urlParameters[1].split("=")[1];
 }

 Toast.makeText(TwitterInfoActivity.this, oauthToken, 800).show();
 Toast.makeText(TwitterInfoActivity.this, oauthVerifier, 800).show();

 }
 }
 });

 // Activity1で設定した認証ページを表示。
 webView.loadUrl(_url);
 }

でこれを最初のTwitterのオブジェクトを作成したところで、

callOauth(_reqToken.getAuthorizationURL());

で実行をしてあげれば、OAuth認証でTokenを受け取る部分までをアプリ内で実装できました。

参考サイト:Twitter4j-2.2.xを使ったOAuth認証のコーディング例

 

ちょっと情報が少なかったので。(参考書でもブラウザになげてるものが多かったので)

自分でも覚える為にまとめてみました。

 

本当は自前のクラスでtwitter apiをたたくのがいいのかもしれないですが、時間に余裕がある時にやって見ます。

 

以上です。

前後の記事

前の記事:

次の記事:

関連の記事

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑