如何在iOS中使用AWSMobileClient获取AWS Cognito用户属性?

如何在iOS中使用AWSMobileClient获取AWS Cognito用户属性?,ios,amazon-web-services,amazon-cognito,Ios,Amazon Web Services,Amazon Cognito,问题很简单:我已经使用AWS Cognito和AWS Amplify向iOS应用程序添加了用户身份验证。我已成功实现登录和注册,但如何获取电子邮件、全名或电话号码等用户属性?根据,有几个属性帮助器可用于常见属性,如用户名: AWSMobileClient.getInstance().getUsername() AWSMobileClient.getInstance().isSignedIn() AWSMobileClient.getInstance().getIdentityId() 您还可以

问题很简单:我已经使用AWS Cognito和AWS Amplify向iOS应用程序添加了用户身份验证。我已成功实现登录和注册,但如何获取电子邮件、全名或电话号码等用户属性?

根据,有几个属性帮助器可用于常见属性,如用户名:

AWSMobileClient.getInstance().getUsername()
AWSMobileClient.getInstance().isSignedIn()
AWSMobileClient.getInstance().getIdentityId()
您还可以获取JWT令牌,然后提取任何用户属性:

AWSMobileClient.getInstance().getTokens().getIdToken().getTokenString()

在最新的SDK版本
2.8.x
中,您可以将getUserAttributes与以下API一起使用:

public func getUserAttributes(completionHandler: @escaping (([String: String]?, Error?) -> Void))
您可以在此处找到源代码:


如果您正在专门查找电子邮件地址,并且可能需要脱机查找,这将适用于您:

AWSMobileClient.sharedInstance().getTokens{(令牌,错误)在
如果let error=error{print(error.localizedDescription)}
如果让令牌=令牌{
让email=tokens.idToken?.claims?[“email”]作为?字符串
//completionHandler(电子邮件)…等。
}

<> > <代码> AWSMePixEclipse .SyrdStaseAs().GETUsReNAMEL()/代码>将是方便的,即使用户池被设置为使用电子邮件作为用户名,它也将返回用户池用户的ID。我认为这是一个bug,但还没有向AWS报告。

< P>我也在Android(KOTLIN)上进行了研究。

当您使用“电子邮件”和“密码”登录时,“用户名”为“电子邮件”

另一方面,在iOS(Swift)中,“username”实际上是cognito用户池的“username”,即使您使用“email”和“password”登录


太令人困惑了…

更新:

对于AWSMobileClient~>2.12.0,可以按如下方式获取用户属性

AWSMobileClient.default().getUserAttributes{(属性,错误)在
如果(错误!=nil){
打印(“错误:\(错误)”)
}否则{
如果让attributesDict=属性{
打印(attributesDict[“电子邮件”])
打印(attributesDict[“给定名称”])
}
}
}
AWSMobileClient.getInstance().getIdentityId()返回空值…知道为什么签名进程在响应时返回成功时会返回空值吗
// retrieve username
val username = AWSMobileClient.sharedInstance().username