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 を使用している場合、ゲスト認証の設定と失効処理は自動で行われます。