サイトのトップへ戻る

Twitter 開発者 ドキュメント日本語訳

Twitterにログインする

TwitterCore キットを使用すると Twitterにログインできます。この機能によってアプリケーションユーザーはTwitterへの認証ができるようになります。

注意

FabricのTwitter 証明書自動生成機能を使っていない場合、この機能を使う前にTwitter appで“このアプリをTwitterへのログインに使うことを許可する(Allow this application to be used to Sign in to Twitter)”にチェックを入れるようにしてください。


認証トークンを取得しようとした時、このキットは内部にインストールされたTwitter appを使ってシングルサインオンを実施します。 Twitter appを使って認証トークンにアクセスできなかった場合、諦めてウェブビューを使い、OAuth のプロセスを終了させます。

ユーザーを認証する最も簡単な方法は TwitterLoginButtonを使うことです。レイアウト内に、以下コードを記載したログインボタンを追加してください:

<com.twitter.sdk.android.core.identity.TwitterLoginButton
     android:id="@+id/login_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />

ボタンは以下のように描写されます。:



Activity上のボタンを設定する

ボタンを表示するActivity や Fragment では、コールバックを作成してログインボタンに設定する必要があります。

import com.twitter.sdk.android.core.Callback;
import com.twitter.sdk.android.core.Result;
import com.twitter.sdk.android.core.TwitterException;
import com.twitter.sdk.android.core.TwitterSession;
import com.twitter.sdk.android.core.identity
                                                  .TwitterLoginButton;
...

loginButton = (TwitterLoginButton) 
                              findViewById(R.id.login_button);
loginButton.setCallback(new Callback<TwitterSession>() {
   @Override
   public void success(Result<TwitterSession> result) {
       // Do something with result, which provides a 
       // TwitterSession for making API calls
   }

   @Override
   public void failure(TwitterException exception) {
       // Do something on failure
   }
});


Activityが戻って来た時の終了結果をボタンに渡す

次に、Activityが戻って来た時の終了結果をボタンに渡します:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    //activity の終了結果をログインボタンに渡す。
    loginButton.onActivityResult(requestCode, resultCode, 
                                                                        data);
}

注意

Fragment上で TwitterLoginButton を使用している場合は、代わりに以下の手順を使用してください。


Fragmentを管理しているActivity 内で、Activity の終了結果をFragmentに渡します。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // activityの終了結果を fragmentに渡す,、
    // そうするとfragmentがそれをログインボタンに渡します。
    Fragment fragment = getFragmentManager()
                .findFragmentById(R.id.your_fragment_id);
    if (fragment != null) {
        fragment.onActivityResult(requestCode, resultCode, data);
    }
}


Twitterセッション

ログインが正常に成功した場合、成功結果としてTwitterセッションが確立されます。 このTwitterセッションにはトークンと秘密情報とユーザー名とユーザーIDが含まれており、アクティブセッションとなって自動的に維持されます。 後になってTwitterセッションの再取得が必要になった場合は、セッションマネージャを使ってください。

TwitterSession session = 
        Twitter.getSessionManager().getActiveSession();
TwitterAuthToken authToken = session.getAuthToken();
String token = authToken.token;
String secret = authToken.secret;


ゲスト認証

ゲスト認証を使用することで、ユーザーがTwitter にログインする必要なく、特定のTwitter APIリソースに素早くアクセスできます。 これを使えるのは、ユーザーを識別する情報を必要としないAPIリクエストに制限されます。 例えば、ゲスト認証ではツイートをすることができません。一方でユーザーの公開ツイートのタイムラインを取得することはできます。 詳細はTwitter REST APIにアクセスするを参照してください。

ゲスト認証はアプリケーション認証を拡張したものであり、 アクセス権の範囲やレート制限についてアプリケーション認証と同じ仕様です。 ですが、二つの大きな違いがあります:

  1. レート制限はあなたのアプリケーションユーザー数に応じて拡張できます。
  2. ゲスト認証のトークンには有効期間があります。


ユーザー用のゲストトークンを取得するには、以下のメソッドが使用できます:

import com.twitter.sdk.android.core.AppSession;
import com.twitter.sdk.android.core.Callback;
import com.twitter.sdk.android.core.Result;
import com.twitter.sdk.android.core.TwitterCore;
import com.twitter.sdk.android.core.TwitterException;
...

TwitterCore.getInstance().logInGuest(new Callback() {
   @Override
    public void success(Result result) {
        AppSession guestAppSession = result.data;
    }

    @Override
    public void failure(TwitterException exception) {
        // ゲスト認証でAppセッションが取得できない
    }
});

ゲスト認証のリクエスト作成時に発生しうる、トークンの失効処理を制御します。

TwitterApiClient twitterApiClient =  TwitterCore.getInstance().getApiClient(guestAppSession);
twitterApiClient.getSearchService().tweets("#fabric", null, null, null, null, 50, null, null, null, true, new Callback() {
    @Override
    public void success(Result result) {
        // use result tweets
    }

    @Override
    public void failure(TwitterException exception) {
        final TwitterApiException apiException = (TwitterApiException) exception;
        final int errorCode = apiException.getErrorCode();
        if (errorCode == TwitterApiConstants.Errors.APP_AUTH_ERROR_CODE || errorCode == TwitterApiConstants.Errors.GUEST_AUTH_ERROR_CODE) {
            // 新規にguestAppSessionを取得する
            // 必要であればリトライする
        }
    }
});

最後に、TweetUi キットのTweetUtils.loadTweet かTweetUtils.loadTweets helpers を使用している場合、ゲスト認証の設定と失効処理は自動で行われます。