2016-07-22 11 views
1

動作しない私は、iOSアプリのために迅速に認証されていないユーザーを経由してCognito IDを取得するための次のコードを持っている: -Cognito getIdentityIdは()認証されていないユーザーのために迅速に

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" 
    } 
} 

をするときgetCognitoIdentityId()スタブでViewControllerは常に "DEFAULT_COGNITO_ID"(私はエミュレータでそれを実行しています)を返します呼び出されます。デバッガを介してコードにステップインすると、非同期タスクが内部で実行されないことがわかります(if(task.error!= nil){return nilがバイパスされます)

私には何かがありません。

  1. を考えることができ、別途?
  2. を有効にする必要がありますネットワーク/非同期呼び出しのために必要なアクセス許可は、私がしなければならないCognitoアイデンティティプールに必要な構成がありますあります。
  3. エミュレータでブロックされた非同期タスクはありますか?

助けてください。私は迅速な開発に新しいです。

答えて

1

再生中のコールの非同期性のように聞こえるかもしれません。あなたは

credentialsProvider.identityId 

を通じてアイデンティティIDを取得し、何が起こるか見てみた後、数秒待って、正確にはdocumentationで説明する例を試すことができますか?それは非同期であるため、このようにセットアップすることは、あなたが望んでいるように動作しません。あらかじめ非同期コールを開始する必要があります。

+0

Androidで似たようなことをしていましたが、すぐに戻ってきました。アイデンティティIDを取得するための待機時間に関する推奨事項 –

+0

Androidは非同期ではなく、キャッシュされている可能性があります。時間はデバイスごとに十分に異なりますが、それは少し推測ですが、十分に時間を取ることができます。 –

+0

いいえ私はそれをaysncタスクに入れるために明示的な努力をしています。 –

関連する問題