3

Ich entwickle eine iOS-App in Swift mit XCode 7.3. Die App kommuniziert mit einer DynamoDB-Datenbank, sodass der Benutzer Daten lesen und schreiben kann. Kürzlich habe ich meine Pods aktualisiert, darunter AWSDynamoDB, AWSCognito, AWSCognitoIdentityProvider und andere AWS-Pods. auch einen neuen Benutzer-Pool nach den Anweisungen auf dieser Seite einrichten I:AWS Cognito-Fehler: Authentifizierungsdelegat nicht festgelegt

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

Im Rahmen diese Anweisungen zu folgen, ich den folgenden Code setzte in der didFinishLaunchingWithOptions Methode der AppDelegate Klasse:

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 

Ich habe den Wert für IDENTITY_POOL_ID erhalten, indem ich von der AWS-Konsole aus zu Cognito, Federated Identities, den von mir erstellten Identitätspool navigiert habe, während ich die Anweisungen "Identity Pool bearbeiten" befolgte und dann die neben "identity pool ID" angezeigte Zeichenfolge kopierte. Ich habe den Wert für APP_CLIENT_ID erhalten, indem ich "Authentifizierungsanbieter" auf derselben Seite erweitert und die Registerkarte "Cognito" ausgewählt habe. Für USER_POOL_NAME habe ich den "identity pool name" auf dieser Seite verwendet, und für USER_POOL_ID habe ich den Wert "user pool ID" verwendet, der unter "Authentication Providers" aufgeführt ist. Mir ist unklar, ob ich diese Werte richtig setze, da ich nicht ganz sicher war, welche Werte der Entwicklerführer verwenden sollte.

Nachdem die Schoten zu aktualisieren und diese Änderungen vornehmen, wenn ich die app laufen, sehe ich den Fehler:

[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}]

Es ist auch jetzt unmöglich, die DynamoDB Daten zugreifen zu können, wenn die App funktioniert nach wie vor Markteinführung . Ich vermute, dass ein Teil des Problems darin liegt, dass meine DynamoDB-Datenbank nicht in USEast ist, aber ich bin mir nicht sicher, ob dies tatsächlich zu diesem Fehler führen würde. Ich habe versucht, mögliche Ursachen für diesen Fehler zusätzlich zum Ändern des Codes in AppDelegate zu suchen, aber der Fehler bleibt gleich. Was sind mögliche Ursachen, die ich untersuchen kann? Wenn es einen Unterschied macht, versuche ich, der App zu erlauben, den Benutzer zusätzlich zur Wiederherstellung der DynamoDB-Funktionalität zu autorisieren, und möchte beides bei der Behebung dieses Problems erreichen.

Antwort

3

Es sieht so aus, als ob das Problem auftritt, wenn ein Benutzer sich anmelden oder anmelden möchte. In Ihrem Beispielcode legen Sie den Wert von pool.delegate nicht fest. Diese Zeile sollte

pool.delegate = self 

Dies sollte auch implementieren AWSCognitoIdentityInteractiveAuthenticationDelegate

Dieser Blog-Eintrag sollten Sie in Ihrem AppDelegate sein helfen, die ersten Schritte: https://mobile.awsblog.com/post/TxGNH1AUKDRZDH/Announcing-Your-User-Pools-in-Amazon-Cognito

Die Beispielanwendung könnte auch hilfreich sein https://github.com/awslabs/aws-sdk-ios-samples/blob/75ada5b6283b7c04c1214b2e1e0a6394377e3f2b/CognitoYourUserPools-Sample/Objective-C/CognitoYourUserPoolsSample/AppDelegate.h

+0

Danke, diese Links waren sehr hilfreich. Jetzt, da ich einen Anmelde-/Registrierungsbildschirm eingerichtet habe, erhalte ich einen neuen Fehler, wenn ich meine Informationen einfüge und versuche, mich bei meiner App zu registrieren: {"__ type": "ResourceNotFoundException", "message": "Benutzerpool Client #### existiert nicht. "} Dies ist derselbe Wert, den ich für APP_CLIENT_ID verwende, und ich habe ihn unter" Authentifizierungsanbieter "aus dem Feld" App-Client-ID "kopiert, aber nirgendwo anders. Sollte dies mit anderen Werten übereinstimmen, die ich in meinen Benutzerpools oder meinen Verbundidentitätspools sehe? Woher soll ich diesen Wert beim Erstellen meiner Pools bekommen haben? – user3726962

+0

Egal, ich habe mir die Konsole des Benutzerpools genauer angesehen und die Werte gefunden, nach denen ich gesucht habe. – user3726962