ログイン機能を使うとアプリユーザーがTwitter認証できるようになります。
注意
FabricのTwitter 証明書自動生成機能を使っていない場合、この機能を使う前にTwitter appで“このアプリをTwitterへのログインに使うことを許可する(Allow this application to be used to Sign in to Twitter)”にチェックを入れるようにしてください。
このSDKでは、まずAccounts.framework.経由でTwitter のアカウントシステムを使おうとします。これに失敗した場合、諦めてOAuth のフローに切り替えます。
認証が成功した後、このSDKは自動的にアカウントをiOSシステムアカウントへ保存し、TWTRSession
にはトークンと秘密情報とユーザー名とユーザーIDが含まれます。
認証に失敗した場合、the error will be non-nil.
ユーザーを識別する情報が必要なAPIリクエストでは、ユーザー認証が必要です。例えば、:ツイートや他ユーザーのフォロー。
ユーザーを認証する最も簡単な方法は、TWTRLogInButton
を使うことです:
// Objective-C TWTRLogInButton* logInButton = [TWTRLogInButton buttonWithLogInCompletion: ^(TWTRSession* session, NSError* error) { if (session) { NSLog(@"signed in as %@", [session userName]); } else { NSLog(@"error: %@", [error localizedDescription]); } }]; logInButton.center = self.view.center; [self.view addSubview:logInButton];
// Swift let logInButton = TWTRLogInButton(logInCompletion: { (session, error) in if (session != nil) { println("signed in as \(session.userName)"); } else { println("error: \(error.localizedDescription)"); } }) logInButton.center = self.view.center self.view.addSubview(logInButton)
そうするとボタンは以下のように描写されます:
// Objective-C [[Twitter sharedInstance] logInWithCompletion:^ (TWTRSession *session, NSError *error) { if (session) { NSLog(@"signed in as %@", [session userName]); } else { NSLog(@"error: %@", [error localizedDescription]); } }];
// Swift Twitter.sharedInstance().logInWithCompletion { (session, error) -> Void in if (session != nil) { println("signed in as \(session.userName)"); } else { println("error: \(error.localizedDescription)"); } }
最初にユーザー認証を行わずにSDKを使用するには、ゲストとしてログインする必要があります。ゲスト認証で使用できるのは、ユーザーを識別する情報を必要としないAPIリクエストに制限されます。 例えば、ゲスト認証ではツイートをすることができません。一方でユーザーの公開ツイートのタイムラインを取得することはできます。
ゲスト認証はアプリケーション認証を拡張したものであり、 アクセス権の範囲やレート制限についてアプリケーション認証と同じ仕様です。 ですが、二つの大きな違いがあります
ユーザー用のゲストトークンを取得するには、以下のメソッドが使用できます:
// Objective-C [[Twitter sharedInstance] logInGuestWithCompletion:^(TWTRGuestSession *guestSession, NSError *error) { if (guestSession) { // make API calls that do not require user auth } else { NSLog(@"error: %@", [error localizedDescription]); } }];
// Swift Twitter.sharedInstance().logInGuestWithCompletion { guestSession, error in if (guestSession != nil) { // make API calls that do not require user auth } else { println("error: \(error.localizedDescription)"); } }
Twitterキットでは、トークンが期限切れになったら自動でリトライをします。加えて、タイムアウトを検知して手動でリトライを発生させるのに使えるコードサンプルを以下に示します。
// Objective-C [[[Twitter sharedInstance] APIClient] loadTweetWithID:@"20" completion:^(TWTRTweet *tweet, NSError *error) { if (error.domain == TWTRAPIErrorDomain && (error.code == TWTRAPIErrorCodeInvalidOrExpiredToken || error.code == TWTRAPIErrorCodeBadGuestToken)) { // can manually retry by calling -[Twitter logInGuestWithCompletion:] } }];
// Swift Twitter.sharedInstance().APIClient.loadTweetWithID("20") { tweet, error in if error.domain == TWTRAPIErrorDomain && (error.code == .InvalidOrExpiredToken || error.code == .BadGuestToken) { // can manually retry by calling Twitter.sharedInstance().logInGuestWithCompletion } }