Как инициализировать AWSCognitoIdentityUserAttributeType в Swift?

Я новичок в разработке iOS / Swift. Я пытаюсь реализовать регистрацию / вход пользователей с помощью AWS Cognito. После инициализации SDK с конфигурацией по умолчанию я делаю:

let pool = AWSCognitoIdentityUserPool(forKey: "UserPool")

[с последующим]

pool.signUp(...) 

для регистрации пользователя.

Мне нужно передать массив AWSCognitoIdentityUserAttributeType методу signUp, но я не могу инициализировать объекты этого типа.

var first_name = AWSCognitoIdentityUserAttributeType(
                                 dictionary: ["given_name": "rob"])

приводит к следующей ошибке:

2016-07-10 08:48:43.025 Demo1[4199:111322] -
         [AWSCognitoIdentityUserAttributeType initWithDictionary:]: 
         unrecognized selector sent to instance 0x7fee54a6ede0

person ranji    schedule 10.07.2016    source источник
comment
Я наконец понял, как инициализировать AWSCognitoIdentityUserAttributeType в Swift! пусть first_name = AWSCognitoIdentityUserAttributeType () first_name.name = given_name first_name.value = rob   -  person ranji    schedule 12.07.2016


Ответы (3)


Я считаю, что вам следует сделать это, создать массив AWSCognitoIdentityUserAttributeType, затем создать группу объектов этого типа, присвоить «имя», а затем «значение», как я сделал ниже. Затем вы можете использовать атрибуты этого объекта в своем пуле.

    var attributes = [AWSCognitoIdentityUserAttributeType]()
    let name = AWSCognitoIdentityUserAttributeType()
    let email = AWSCognitoIdentityUserAttributeType()
    let gender = AWSCognitoIdentityUserAttributeType()
    let birthdate = AWSCognitoIdentityUserAttributeType()
    let username = AWSCognitoIdentityUserAttributeType()

    let myFormatter = DateFormatter()
    myFormatter.dateFormat = "dd/MM/yyyy"

    name?.name = "name"
    email?.name = "email"
    gender?.name = "gender" //implementar genero ainda
    birthdate?.name = "birthdate"
    sobrenome?.name = "family_name"
    username?.name = "preferred_username"


    let birthdateNsDate:Date = birthdateField.date as Date
    birthdate?.value = myFormatter.string(from: birthdateNsDate)
    name?.value = nameTextField.text!
    email?.value = emailTextField.text!


    attributes.append(name!)
    attributes.append(email!)
    attributes.append(gender!)
    attributes.append(birthdate!)
    attributes.append(sobrenome!)
    attributes.append(username!)
person Fernando Rocha    schedule 04.10.2016

Следующий фрагмент демонстрирует, как использовать

AWSCognitoIdentityUserAttributeType * phone = [AWSCognitoIdentityUserAttributeType new];
phone.name = @"phone_number";
//phone number must be prefixed by country code
phone.value = @"+15555555555";
AWSCognitoIdentityUserAttributeType * email = [AWSCognitoIdentityUserAttributeType new];
email.name = @"email";
email.value = @"[email protected]";

//sign up the user
[[pool signUp:@"username" password:@"password" userAttributes:@[email,phone] validationData:nil] continueWithBlock:^id _Nullable(AWSTask<AWSCognitoIdentityUserPoolSignUpResponse *> * _Nonnull task) {
    dispatch_async(dispatch_get_main_queue(), ^{
        if(task.error){
            [[[UIAlertView alloc] initWithTitle:task.error.userInfo[@"__type"]
                                        message:task.error.userInfo[@"message"]
                                       delegate:self
                              cancelButtonTitle:@"Ok"
                              otherButtonTitles:nil] show];
        }else {
            AWSCognitoIdentityUserPoolSignUpResponse * response = task.result;
            if(!response.userConfirmed){
                //need to confirm user using user.confirmUser:
            }
        }});
    return nil;
}];

Следующая ссылка описывает использование пулов пользователей с iOS SDK: https://docs.aws.amazon.com/cognito/latest/developerguide/using-amazon-cognito-user-identity-pools-ios-sdk.html.

person Roshan    schedule 06.11.2018

Единичный экземпляр:

e.g.,

AWSCognitoIdentityUserAttributeType(name: "key", value: "string")

Массив как параметр при вызове функции:

awsUserPool.currentUser()?.update([
    AWSCognitoIdentityUserAttributeType(name: "key0", value: string0),
    AWSCognitoIdentityUserAttributeType(name: "key1", value: string1)
])

Значения необходимо преобразовать в строку. Например.,

    AWSCognitoIdentityUserAttributeType(name: "key", value: "\(number)")
person Carl    schedule 29.01.2018
comment
Карл, ваш пример кода: AWSCognitoIdentityUserAttributeType (имя: ключ, значение: число) возвращает ошибку. Кажется, что атрибуту AWS всегда требуется строковое значение, даже если настраиваемый атрибут хранится в Cognito в виде числа. Вы согласны? - person Steve W.; 21.01.2019
comment
@ СтивВ. ты прав! В моем собственном коде я использовал только строки, но я очень увлекся написанием своего ответа. Я внес поправку. Этот тип API от AWS, похоже, отказался от Amazon. AWSCognitoSync, например, также ограничен значениями String и недавно был объявлен устаревшим и заменен AWSAppSync - гораздо более сложным API. - person Carl; 22.01.2019