我正在使用 XCode 7.3 在 Swift 中开发一个 iOS 应用程序。该应用程序与 DynamoDB 数据库通信,允许用户读取和写入数据。最近,我更新了我的豆荚,其中包括AWSDynamoDB
,AWSCognito
,AWSCognitoIdentityProvider
,和其他AWS豆荚。我还根据此页面上的说明设置了一个新的用户池:
作为遵循这些说明的一部分,我将以下代码放入 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
Run Code Online (Sandbox Code Playgroud)
我IDENTITY_POOL_ID
通过从 AWS 控制台导航到 Cognito、Federated Identities、我按照说明“编辑身份池”创建的身份池,然后复制“身份池 ID”旁边显示的字符串来获得 的值。我通过在APP_CLIENT_ID
同一页面上展开“身份验证提供程序”并选择“Cognito”选项卡获得了 的值。对于USER_POOL_NAME
,我在此页面上使用了“身份池名称”,而对于USER_POOL_ID
我使用了“身份验证提供程序”下列出的“用户池 ID”值。我不清楚我是否正确设置了这些值,因为我不完全确定开发人员指南说我应该使用哪些值。
更新 …
amazon-web-services ios amazon-dynamodb swift amazon-cognito
(注意:这与我发布的这个问题相关,但由于我原来的问题已得到解答,而且我现在遇到了不同的问题,所以我将其作为一个新问题发布。)
我正在为使用 DynamoDB 和 AWS Cognito 的 iOS 应用程序设置注册和登录。我最终让注册登录过程正常工作,但我注意到每当我注销然后立即尝试重新登录时,应用程序都无法执行此操作,并且我收到错误消息只有在Invalid login token. Can't pass in a Cognito token.
关闭并重新启动应用程序后才能我再次登录成功。
我主要使用这个示例项目来设置注册,但是当我实现登录方法时,我在从 Objective-C 转换到 Swift 时遇到了一些问题。我无法从示例中获取登录过程,因此我设置了一个显式登录方法:
if locked { return }
trimRegistrationValues()
let name = usernameField.text!
let user = pool!.getUser(name)
lock()
user.getSession(name, password: passwordField.text!, validationData: nil, scopes: nil).continueWithExecutor(AWSExecutor.mainThreadExecutor(), withBlock: {
(task:AWSTask!) -> AnyObject! in
if task.error != nil {
self.sendErrorPopup("ERROR: Unable to sign in. Error description: " + task.error!.description)
} else {
print("Successful Login")
let loginKey = "cognito-idp.us-east-1.amazonaws.com/" + …
Run Code Online (Sandbox Code Playgroud) 我正在Swift 3中开发一个iOS应用程序,并尝试按照本教程实现收据验证:http://savvyapps.com/blog/how-setup-test-auto-renewable-subscription-ios-app.但是,该教程似乎是使用早期版本的Swift编写的,因此我不得不进行一些更改.这是我的receiptValidation()函数:
func receiptValidation() {
let receiptPath = Bundle.main.appStoreReceiptURL?.path
if FileManager.default.fileExists(atPath: receiptPath!){
var receiptData:NSData?
do{
receiptData = try NSData(contentsOf: Bundle.main.appStoreReceiptURL!, options: NSData.ReadingOptions.alwaysMapped)
}
catch{
print("ERROR: " + error.localizedDescription)
}
let receiptString = receiptData?.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
let postString = "receipt-data=" + receiptString! + "&password=" + SUBSCRIPTION_SECRET
let storeURL = NSURL(string:"https://sandbox.itunes.apple.com/verifyReceipt")!
let storeRequest = NSMutableURLRequest(url: storeURL as URL)
storeRequest.httpMethod = "POST"
storeRequest.httpBody = postString.data(using: .utf8)
let session = URLSession(configuration:URLSessionConfiguration.default)
let task = session.dataTask(with: storeRequest as URLRequest) { data, …
Run Code Online (Sandbox Code Playgroud)