Search code examples
iosamazon-web-servicesamazon-cognitoaws-mobilehub

Calling GetID with amazon cognito in ios


I am following this blog post from amazon: https://mobile.awsblog.com/post/Tx2UQN4KWI6GDJL/Understanding-Amazon-Cognito-Authentication

I have this set up:

AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"IdentityPool"];

AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider];

AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;

In iOS how do I call GetID?


Solution

  • You have to getId and then refresh the credentials. First do:

    Obj-C:

    // Retrieve your Amazon Cognito ID
    [[credentialsProvider getIdentityId] continueWithBlock:^id(AWSTask *task) {
        if (task.error) {
            NSLog(@"Error: %@", task.error);
        }
        else {
            // the task result will contain the identity id
            NSString *cognitoId = task.result;
        }
        return nil;
    }];
    

    Swift:

    // Retrieve your Amazon Cognito ID
    credentialsProvider.getIdentityId().continueWithBlock { (task: AWSTask!) -> AnyObject! in
        if (task.error != nil) {
            print("Error: " + task.error.localizedDescription)
        }
        else {
            // the task result will contain the identity id
            let cognitoId = task.result
        }
        return nil
    }
    

    Then refresh:

    - (BFTask *)getIdentityId {
        if (self.identityId) {
            return [BFTask taskWithResult:self.identityid];
        } else {
            return [[BFTask taskWithResult:nil] continueWithBlock:^id(BFTask *task) {
                if (!self.identityId) {
                    return [self refresh];
                }
                return [BFTask taskWithResult:self.identityid];
            }];
        }
    }
    
    - (BFTask *)refresh {
        return [[BFTask taskWithResult:nil] continueWithBlock:^id(BFTask *task) {
              // make a call to your backend, passing logins on provider
              MyLoginResult *result = [MyLogin login:user password:password withLogins:self.logins];
              // results should contain identityid and token, set them on the provider
              self.token = result.token;
              self.identityId = result.identityId;
              // not required, but returning the identityId is useful
              return [BFTask taskWithResult:self.identityid]; 
        }];
    }
    

    From documentation HERE