2016-07-22 10 views
1

Ich habe den folgenden Code die Cognito ID über authentifizierte Benutzer in swift für ein iOS-App für das Erhalten: -Cognito getIdentityId() funktioniert nicht in swift für authentifizierte Benutzer

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

wenn getCognitoIdentityId() in einem Stummel ViewController heißt, es gibt immer "DEFAULT_COGNITO_ID" zurück (ich betreibe es in einem Emulator). Wenn Sie über einen Debugger in den Code einsteigen, wird angezeigt, dass die asynchrone Task nicht ausgeführt wird (der gesamte Codeblock von if (task.error! = Nil)) wird umgangen.

Ich vermisse etwas denken Sie an

  1. es können, sind für Netzwerk/Asynchron-Anrufe Berechtigungen benötigt, die separat aktiviert in Cognito Identität Pool benötigt?
  2. sein muss
  3. gibt es Konfigurationen, die ich tun muss.
  4. Sind in Emulatoren async Aufgaben blockiert?

Bitte helfen. Ich bin neu in der schnellen Entwicklung.

Antwort

1

Es klingt wie es könnte nur die asynchrone Natur des Anrufs im Spiel sein. Können Sie das Beispiel versuchen genau warten, wie in der documentation beschrieben, ein paar Sekunden, dann versuchen, die Identität id über

credentialsProvider.identityId 

und zu sehen zu bekommen, was passiert? Da es asynchron ist, funktioniert es nicht so, wie du es dir erhoffst, denke ich. Sie müssen den asynchronen Anruf zuvor initiieren.

+0

Danke, ich machte etwas ähnliches in Android und es kam sofort zurück. Irgendwelche Empfehlungen zur Wartezeit für die Identitäts-ID? –

+0

Android ist nicht asynchron, es wurde wahrscheinlich nur zwischengespeichert. Die Zeit wird von Gerät zu Gerät variieren, so dass es ein wenig raten kann, aber Sie können es gut genug Zeit. –

+0

Nein, ich nehme eine explizite Anstrengung, um es in eine aysnc Aufgabe zu bringen. –

Verwandte Themen