2017-01-25 2 views
0

Ich verwende die Google Tabellen-API und die Google Drive-API und habe meine App so umgestellt, dass sie Google SignIn anstelle der eingebetteten WebView-Authentifizierung verwendet. Ich kann den Benutzer erfolgreich anmelden und die Authentifizierung an die API-Dienste weitergeben. Wenn die App jedoch in den Hintergrund tritt, werden die Anmeldeinformationen nicht gespeichert. Zuvor würde dieser Code nur Anmeldeinformationen aus dem Schlüsselbund neu geladen und die Token aktualisieren, wenn Bedarf sofort sein:Google Signierungen beim erneuten Starten der App nicht beibehalten?

self.service.authorizer = 
      [GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:kKeychainItemName 
           clientID:kClientID 
           clientSecret:nil]; 

Aber jetzt muss ich überprüfen, ob Anmeldeinformationen in den Schlüsselbund existieren den folgenden Code in meinem AppDelegate mit:

if ([GIDSignIn sharedInstance].hasAuthInKeychain) { 
    NSLog(@"Auth exists in keychain!"); 
    [[GIDSignIn sharedInstance] signInSilently]; 
} else { 
    NSLog(@"No credentials in keychain!"); 
    [[GIDSignIn sharedInstance] signIn]; 
} 

SignInSilent scheint eine Weile zu dauern und ich muss meinen Code für 3 Sekunden pausieren, bevor ich die Zugangsdaten an meine API-Dienste weitergebe. Aus der Dokumentation scheint es nicht möglich, die Anmeldeinformationen nur noch aus dem Schlüsselbund zu speichern und neu zu laden.

Antwort

0

Ich erkannte, dass ich die Google SignIn-Rückrufmethode nicht korrekt verwendete.

(void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error 

Diese Methode wird aufgerufen, sobald signin abgeschlossen ist und von hier aus können Sie die Anmeldeinformationen erhalten. Also habe ich mich einfach aus meinem AppDelegate und in meinen Viewcontroller verschoben und meinen Viewcontroller zum Delegaten für GIDSignInDelegate und GIDSignInUIDelegate gemacht, um den Callback zu erhalten. Jetzt ist dieser Viewcontroller mein Startbildschirm, um die Anmeldung zu starten und dann fortzufahren, sobald er abgeschlossen ist, wodurch alle statischen Verzögerungen beseitigt werden, die ich eingestellt habe.
Hoffe das hilft jemand in der Zukunft.

Verwandte Themen