メニュー
Amazon Cognito
開発者ガイド (Version 最終更新日: 2017 年 8 月 26 日)

チュートリアル: iOS アプリのユーザープールを統合する

このチュートリアルでは、ユーザープールの使用を開始できます。

ステップ 1: コンソールを使用してアプリのユーザープールをコンソールを作成する

以下の手順では、ユーザープールを作成してアプリで使用する方法を説明します。この手順では、デフォルトの設定を使用してプール ID、アプリのクライアント ID、アプリのクライアントシークレットを作成します。これらの設定のカスタマイズについては、「AWS マネジメントコンソールでの Amazon Cognito ユーザープール設定ステップ」を参照してください。

アプリのユーザープールを作成するには

  1. Amazon Cognito コンソールにサインインします。

  2. [Manage your User Pools] を選択します。

  3. [Create a User Pool] を選択します。

  4. [Pool name] で、プールの名前を入力して [Review defaults] を選択します。

  5. 左のナビゲーションバーで、[Apps] を選択し、[Add an app] を選択します。ユーザープールに複数のアプリクライアントを作成し、プラットフォームごとに 1 つのアプリを作成できます。

  6. [App name] に、アプリの名前を入力します。[Generate client secret] をオンにしたまま、[Create app] を選択して [Save changes] を選択します。

  7. 左のナビゲーションバーから、[Review] を選択して [Create pool] を選択します。

  8. プール ID を記録します。左のナビゲーションバーにある [Apps] にアプリのクライアント ID とアプリのクライアントシークレットが表示されます。

ステップ 2: UserPool オブジェクトを作成する

クライアントアプリの UserPool オブジェクトを作成する必要があります。ステップ 1 で取得したユーザープール ID、アプリのクライアント ID、アプリのクライアントシークレットを使用して、AWSCognitoIdentityUserPool を作成します。

Copy
//setup service config AWSServiceConfiguration *serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; //create a pool AWSCognitoIdentityUserPoolConfiguration *configuration = [[AWSCognitoIdentityUserPoolConfiguration alloc] initWithClientId:@"CLIENT_ID" clientSecret:@"CLIENT_SECRET" poolId:@"USER_POOL_ID"]; [AWSCognitoIdentityUserPool registerCognitoIdentityUserPoolWithConfiguration:serviceConfiguration userPoolConfiguration:configuration forKey:@"UserPool"]; AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"];

ステップ 3: アプリ用にユーザーをサインアップする

ユーザーをサインアップするには、アプリの登録 UI がユーザーから情報を収集して signUp を呼び出す必要があります。

Copy
NSMutableArray * attributes = [NSMutableArray new]; //Set user attributes by retrieving them from your UI. These values are hardcoded for this example AWSCognitoIdentityUserAttributeType * phone = [AWSCognitoIdentityUserAttributeType new]; phone.name = @"phone_number"; //All phone numbers require +country code as a prefix phone.value = @"+15555555555"; AWSCognitoIdentityUserAttributeType * email = [AWSCognitoIdentityUserAttributeType new]; email.name = @"email"; email.value = @"email@mydomain.com"; [attributes addObject:phone]; [attributes addObject:email]; //set username and password by retrieving them from your UI. They are hardcoded in this example. AWSCognitoIdentityUser *user = [[pool signUp:@"username" password:@"password" userAttributes:attributes validationData:nil] continueWithSuccessBlock:^id _Nullable(AWSTask<AWSCognitoIdentityUser *> * _Nonnull task) { NSLog(@"Successfully registered user: %@",task.result.username); return nil; }];

ステップ 4: アプリ用のユーザーを確認する

E メールアドレスまたは電話番号が確認されると、ユーザーが確認されます。次の例では、ユーザーが登録フロー中に E メールまたは携帯電話の SMS で確認コードを受け取ります。サインアップを完了するには、そのコードを入力する必要があります。エンドユーザーから確認コードを入手したら、confirmSignUp を呼び出します。

Copy
//replace VERIFICATION_CODE with the value the user inputs [[user confirmSignUp:@"VERIFICATION_CODE"] continueWithSuccessBlock:^id _Nullable(AWSTask<AWSCognitoIdentityProviderConfirmSignUpResponse *> * _Nonnull task) { NSLog(@"Successfully confirmed user: %@",user.username); return nil; }];

ステップ 5: アプリ用のユーザーを認証する

確認済みユーザーを認証するには、以下に示すように AWSCognitoIdentityInteractiveAuthenticationDelegate プロトコルを実装し、プールのデリゲートを設定します。このプロトコルは、カスタムログオン UI を管理し、エンドユーザーから受け取ったユーザー名とパスワード情報を受け入れます。プロトコルのメソッドは、ユーザーが一度も認証されない場合、ユーザーがサインアウトした場合、またはユーザーの更新トークン (30 日間有効) の有効期限が切れた場合にのみ予備されます。

Copy
//This code goes in your AppDelegate pool.delegate = self; -(id<AWSCognitoIdentityPasswordAuthentication>) startPasswordAuthentication{ //implement code to instantiate and display login UI here //return something that implements the AWSCognitoIdentityPasswordAuthentication protocol return loginUI; } //This code goes in your Login UI -(void) getPasswordAuthenticationDetails: (AWSCognitoIdentityPasswordAuthenticationInput *) authenticationInput passwordAuthenticationCompletionSource: (AWSTaskCompletionSource *) passwordAuthenticationCompletionSource { //using inputs from login UI create an AWSCognitoIdentityPasswordAuthenticationDetails object. //These values are hardcoded for this example. AWSCognitoIdentityPasswordAuthenticationDetails * result = [[AWSCognitoIdentityPasswordAuthenticationDetails alloc] initWithUsername:@"USERNAME" password:@"PASSWORD"]; //set the result to continue the sign-in process passwordAuthenticationDetails.result = result; }; -(void) didCompletePasswordAuthenticationStepWithError:(NSError*) error { dispatch_async(dispatch_get_main_queue(), ^{ //present error to end user if(error){ [[[UIAlertView alloc] initWithTitle:error.userInfo[@"__type"] message:error.userInfo[@"message"] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Ok", nil] show]; }else{ //dismiss view controller [self dismissViewControllerAnimated:YES completion:nil]; } }); }

ステップ 6: ユーザーの詳細を取得する

ユーザーの詳細を取得するには、以下に示すように getDetails を呼び出します。

Copy
[[user getDetails] continueWithSuccessBlock:^id _Nullable(AWSTask<AWSCognitoIdentityUserGetDetailsResponse *> * _Nonnull task) { AWSCognitoIdentityUserGetDetailsResponse *response = task.result; for (AWSCognitoIdentityUserAttributeType *attribute in response.userAttributes) { //print the user attributes NSLog(@"Attribute: %@ Value: %@", attribute.name, attribute.value); } return nil; }];

ステップ 7: アプリユーザーが AWS リソースにアクセスするための認証情報を取得する

ユーザーが AWS リソースにアクセスするための認証情報を取得するには、まずユーザープールを ID プールに関連付け、次に AWSCognitoIdentityUserPoolAWSCognitoCredentialsProvider に指定します。次の手順では、ID プールを取得する方法について説明します。

ID プールを作成するには

  1. Amazon Cognito コンソールにサインインします。

  2. フェデレーテッドアイデンティティの管理を選択します。

  3. [Create new identity pool] を選択します。[Identity pool name] に ID プールの名前を入力します。

  4. [Authentication providers] セクションを展開します。

  5. [Cognito] タブで、[User Pool ID] と [App Client ID] を指定します。

  6. ID プールの関連付けを設定したら、AWSCognitoIdentityUserPoolAWSCognitoCredentialsProvider に指定して AWS 認証情報をアプリに入力します。

    Copy
    AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"IDENTITY_POOL_ID" identityProviderManager:pool]; AWSServiceConfiguration *defaultServiceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider]; AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = defaultServiceConfiguration;

次のステップ

このチュートリアルで説明している機能の使用例については、「Objective-C sample on Github」または「Swift sample on Github」を参照してください。