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 や 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が戻って来た時の終了結果をボタンに渡します:
@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セッションにはトークンと秘密情報とユーザー名とユーザー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にアクセスするを参照してください。
ゲスト認証はアプリケーション認証を拡張したものであり、 アクセス権の範囲やレート制限についてアプリケーション認証と同じ仕様です。 ですが、二つの大きな違いがあります:
ユーザー用のゲストトークンを取得するには、以下のメソッドが使用できます:
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 を使用している場合、ゲスト認証の設定と失効処理は自動で行われます。