3

我正在使用XCode 7.3在Swift中开发iOS应用程序。该应用程序与DynamoDB数据库通信,允许用户读取和写入数据。最近,我更新了我的Pod,其中包括​​,AWSCognitoAWSCognitoIdentityProvider和其他AWS吊舱。我还建立了一个新的用户群,根据此页面上的说明:AWS Cognito错误:未设置身份验证代理

http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-integrating-user-pools-with-identity-pools.html

由于以下这些指令的一部分,我把下面的代码在AppDelegate类的didFinishLaunchingWithOptions方法:

let serviceConfiguration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: nil) 
    let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId:APP_CLIENT_ID, clientSecret: appSecret, poolId: USER_POOL_ID) 
    AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfiguration, userPoolConfiguration: userPoolConfiguration, forKey: USER_POOL_NAME) 
    let pool = AWSCognitoIdentityUserPool(forKey:USER_POOL_NAME) 
    let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: IDENTITY_POOL_ID, identityProviderManager:pool) 
    let configuration = AWSServiceConfiguration(region:.USEast1, credentialsProvider:credentialsProvider) 
    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration 

通过从AWS控制台开始导航到Cognito,Federated Identities,我按照说明创建的身份池,“编辑身份池”,然后复制“身份池ID”旁边显示的字符串,我获得了IDENTITY_POOL_ID的值。通过在同一页面上展开“Authentication Providers”并选择“Cognito”选项卡,我获得了APP_CLIENT_ID的值。对于USER_POOL_NAME,我在此页面上使用了“身份池名称”,对于USER_POOL_ID,我使用了“身份验证提供程序”下列出的“用户池ID”值。我不清楚我是否正确设置了这些值,因为我不完全确定开发者指南的哪些值正在说我应该使用。

更新吊舱和完成这些修改后,当我运行的应用程序,我看到的错误:

[Error] AWSCredentialsProvider.m line:569 | __44-[AWSCognitoCredentialsProvider credentials]_block_invoke.345 | Unable to refresh. Error is [Error Domain=com.amazonaws.AWSCognitoIdentityProviderErrorDomain Code=-1000 "Authentication delegate not set" UserInfo={NSLocalizedDescription=Authentication delegate not set}]

这也是现在无法访问DynamoDB数据,虽然应用程序仍然没有启动。我怀疑部分问题是我的DynamoDB数据库不在USEast中,但我不确定这是否会导致此错误。除了更改AppDelegate中的代码外,我还试图查找可能的原因,但错误仍然相同。我可以调查哪些可能的原因?如果它有所不同,我试图让应用程序授权用户,除了恢复DynamoDB功能,并且我想在解决此问题的过程中完成这两个操作。

回答

3

看起来您尝试让用户注册或登录时出现问题。在示例代码中,您不设置pool.delegate值。这条线应该是在你的AppDelegate

pool.delegate = self 

这也应该实现AWSCognitoIdentityInteractiveAuthenticationDelegate

这篇博文应该帮助您入门: https://mobile.awsblog.com/post/TxGNH1AUKDRZDH/Announcing-Your-User-Pools-in-Amazon-Cognito

示例应用程序也可能会有所帮助 https://github.com/awslabs/aws-sdk-ios-samples/blob/75ada5b6283b7c04c1214b2e1e0a6394377e3f2b/CognitoYourUserPools-Sample/Objective-C/CognitoYourUserPoolsSample/AppDelegate.h

+0

谢谢,这些链接非常有帮助。但是,现在我已经设置了登录/注册屏幕,当我输入信息并尝试注册我的应用时,出现新的错误:{“__ type”:“ResourceNotFoundException”,“message”:“用户池客户端####不存在。“}这与我用于APP_CLIENT_ID的值相同,我从”身份验证提供程序“下的”应用程序客户端ID“字段复制它,但它在其他地方看起来并不存在。这应该与我在用户池或我的联合身份池中看到的其他值匹配吗?创建我的泳池时,我应该从哪里获得这个价值? – user3726962

+0

没关系,我更仔细地查看了用户池控制台,发现了我正在寻找的值。 – user3726962

相关问题