OAuth認証を使用したTwitterアプリ

アンドロイドからツイッターOAuth認証を行う場合の大まかな手順

  1. ツイッターのアカウントを取得する。
  2. アプリケーション登録申請する。
  3. ツイッター用ライブラリのインストール
  4. プログラミング

ツイッターのアカウントを取得する。

ツイッターのサイトでアカウントを作成する。

アプリケーションを登録申請する。

このページからアプリケーションを登録申請する。
アプリケーションの種類をブラウザアプリケーションに設定する。(WebViewを使って認証させるため)
コールバックURLに「http://」から始まるURLを指定する。とりあえず「http://localhost」でも動くことを確認した。
試しに「file:///android_asset/index.html」みたいなURIを指定してみたがツイッターからコールバックが帰ってこなかった。

登録が終わったらここから登録したアプリを選択しConsumer keyとConsumer secretを確認しておく。

ツイッター用ライブラリのインストール

  1. twitter用ライブラリをtwitter4jのページからダウンロードする
  2. twitter4j-2.1.6.zipで試した。 ダウンロードしたファイルを展開しtwitter4j-core-2.1.6.jarを取り出す。
  3. 取り出したファイルをエクリプスのプロジェクトへコピーする。
  4. コピーしたjarファイルを右クリックしBuild Path→Add Build Pathを選択する

プログラミング

認証の流れ

  1. 取得したConsumer keyとConsumer secretとコールバックURLを使用しリクエストトークンをツイッターからゲット
    // Twitterクラスのインスタンスを作成
    twitter = new TwitterFactory().getInstance();
    // カスタマーキーをセット
    twitter.setOAuthConsumer(KEY, KEY_SECRET);
    // リクエストトークンをゲット
    requestToken = twitter.getOAuthRequestToken(CALLBACK_URL);
    				
  2. リクエストトークンから認証用URLを取得しWebViewにてそのURLのページを表示
    // 認証用URLを取得
    url = requestToken.getAuthorizationURL();
    				
  3. ユーザーに認証してもらう。 認証が終わるとコールバックURLにoauth_tokenとoauth_verifierが戻ってくるのでそれをゲット
  4. リクエストトークンとoauth_verifierを使ってaccessTokenをツイッターからゲット
    AccessToken accessToken;
    accessToken = twitter.getOAuthAccessToken(requestToken,oauth_verifier);
    				
  5. accessTokenをプリファレンスを使用し保存
    // プリファレンスに アクセストークンを保存
    // (String型にするために2つに分割しています。)
    SharedPreferences pref = 
      getSharedPreferences(PREFERENCE_NAME,MODE_PRIVATE);
    
    SharedPreferences.Editor editor=pref.edit();
    editor.putString("oauth_token",accessToken.getToken());
    editor.putString("oauth_token_secret",accessToken.getTokenSecret());
    editor.commit();
    				

ツイットする場合の流れ

  1. プリファレンスからaccessTokenを取得
    // プリファレンスから保存したトークンを読み込み
    SharedPreferences pref = 
      getSharedPreferences(PREFERENCE_NAME, MODE_PRIVATE);
    // トークンを取得
    String token = pref.getString("oauth_token", "").toString();
    // トークンシークレットを取得
    String tokenSecret = 
      pref.getString("oauth_token_secret", "").toString();
    				
  2. accessTokenとConsumer key、Consumer secretを使用しツイッターの認証を行う
    認証処理はツイット毎に必要ではなくて最初に一回実行する。
    // カスタマーキーをセット
    twitter.setOAuthConsumer(KEY, KEY_SECRET);
    // OAuth認証処理
    twitter.setOAuthAccessToken(token, tokenSecret);
    				
  3. ツイット処理
    String str_msg = "つぶやき";
    twitter.updateStatus(str_msg);