对于未经身份验证的用户,Cognito getIdentityId()在swift中不起作用

时间:2016-07-22 19:27:04

标签: ios swift amazon-cognito

我有以下代码通过swift中的未经身份验证的用户获取Cognito ID以获取IOS应用: -

import Foundation

import AWSCore
import AWSCognito

class CognitoInit {

   func getCognitoIdentityId() -> String {

    let credentialsProvider = AWSCognitoCredentialsProvider(regionType:.USEast1,
                                                            identityPoolId:"My_idenitity_pool_id_in_aws")

    let configuration = AWSServiceConfiguration(region:.USEast1, credentialsProvider:credentialsProvider)

    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration

    credentialsProvider.getIdentityId().continueWithBlock { (task: AWSTask!) -> AnyObject! in
        if (task.error != nil) {
           return task.error?.localizedDescription
        }
        else {
            // the task result will contain the identity id
        return task.result
        }
        return nil
    }


    return "DEFAULT_COGNITO_ID"
   }
}

当调用存根ViewController中的getCognitoIdentityId()时,它总是返回" DEFAULT_COGNITO_ID"(我在模拟器中运行它)。通过调试器进入代码会发现async任务不在内部运行(来自if(task.error!= nil)的整个代码块{返回nil被绕过。

我错过了什么。我能想到的事情

  1. 是否必须单独启用网络/异步调用所需的权限?
  2. 我必须在Cognito Identity Pool中进行配置吗?
  3. 仿真器中是否阻止了异步任务?
  4. 请帮忙。我是快速发展的新手。

1 个答案:

答案 0 :(得分:1)

听起来它可能只是该游戏中的异步特性。您可以完全按照documentation中的描述尝试该示例,等待几秒钟,然后尝试通过

获取身份ID
credentialsProvider.identityId

看看会发生什么?因为它是异步的,所以以这种方式设置它将不会像你希望的那样工作,我想。您需要事先启动异步调用。