Amazon Cognito の Twitter 連係を iOS アプリから使ってみた
待ちに待った Twitter 認証!
本日、Amazon Cognito にアップデートがあり、Cognito Identity に待ちに待った Twitter / Digits 認証がサポートされました!概要についてはせーのがまとめておりますので、こちらをご参照ください。
ということで、早速使ってみました。
Twitter のアプリの作成
まず Twitter のアプリを作成しましょう。Twitter をモバイルアプリから使用するには、現在は Fabric というサービスを通して利用するようになっています。アカウントの登録方法は下記のブログにまとめていますので、参照にしながら登録しましょう。Fabric は、利用申請を行い、承認されてから利用できるようになります。もし実際にアプリで利用したい場合、登録までに少し時間がかかることを念頭に置いておきましょう。
登録が完了したら、Fabric の Web コンソールから Consumer Key と Secret Key をメモしておきましょう。
Congito Identity Pool の作成
次に Cognito の IdentityPool を作成します。作成方法は下記を参考にしてください。
上記ブログの ③ Public Identity Providers のところが、今回から新しくなりました。タブに Twitter / Digits が増えています。ここは Twitter の Consumer Key と Consumer Secret を入力します。
あとはアプリ側の実装です。上記手順で TwitterKit はインポートできているはずですので、次に AWS Mobile SDK をインポートしましょう。
pod 'AWSCore'
次に、適当な View Controller に認証処理を実装しましょう。
#import "ViewController.h" #import <TwitterKit/TwitterKit.h> #import <AWSCore/AWSCognitoIdentity.h> @interface ViewController () @property (weak, nonatomic) TWTRLogInButton *logInButton; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // TWTRLogInButtonの設定 TWTRLogInButton *logInButton = [TWTRLogInButton buttonWithLogInCompletion:^(TWTRSession *session, NSError *error) { if (error) { NSLog(@"Error : %@", error); } else { NSLog(@"UserName : %@", session.userName); self.logInButton.hidden = YES; NSString *value = [NSString stringWithFormat:@"%@;%@", session.authToken, session.authTokenSecret]; [self getIdentityId:value]; } }]; logInButton.center = self.view.center; self.logInButton = logInButton; [self.view addSubview:logInButton]; } - (void)getIdentityId:(NSString *)identity { NSDictionary *logins = @{@"api.twitter.com":identity}; AWSCognitoCredentialsProvider *provider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityId:nil identityPoolId:@"us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" logins:logins]; [[provider getIdentityId] continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task) { if (task.cancelled || task.faulted) { NSLog(@"Error"); } else { NSString* cognitoId = provider.identityId; NSLog(@"cognitoId: %@", cognitoId); UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:cognitoId delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; [alert show]; } return nil; }]; }
以上で終わりです。アプリを実行すると、Twitter 認証が表示され…
Cognito の IdentityId が取得できました!
まとめ
Twitter ログインは国内では特に必須とも言える機能なので、Twitter 認証だけで AWS Credentials が得られるのは非常に有難いですね!ぜひ使ってみてください。