iOS: Google Authentication Code
Arbeite ich mit authentifizierten Benutzer verwenden Sie das google-Konto er zugeordnet ist. Das problem ist, dass jedesmal, wenn der Benutzer sich anmeldet, durch meine app, die "Zugriff Erlauben" erscheint immer auf die Google-Authentifizierung Sicht, auch hatte ich klickte den Zugriff Erlauben, bereits aus früheren Tests. Ist das normal oder mache ich meine codes falsch? Bitte helft mir Jungs.
Ich habe folgende codes für loggin in:
- (IBAction)signIn:(id)sender {
if(!isSignedIn){
[self signOutFromAll];
NSString *keychainItemName = nil;
//save keychain
keychainItemName = kKeychainItemName;
NSString *scope = @"https://www.googleapis.com/auth/plus.me";
NSString *clientID = kClientID;
NSString *clientSecret = kClientSecret;
SEL finishedSel = @selector(viewController:finishedWithAuth:error:);
GTMOAuth2ViewControllerTouch *viewController;
viewController = [GTMOAuth2ViewControllerTouch controllerWithScope:scope
clientID:clientID
clientSecret:clientSecret
keychainItemName:keychainItemName
delegate:self
finishedSelector:finishedSel];
[[self navigationController]pushViewController:viewController animated:YES];
} else {
[self displayAlertWithMessage:@"Currently Signed in."];
} }
- (IBAction)signOut:(id)sender {
[self signOutFromAll];
[self displayAlertWithMessage:@"Signed out."]; }
Dies ist für die Delegierten:
- (void)viewController:(GTMOAuth2ViewControllerTouch *)viewController
finishedWithAuth:(GTMOAuth2Authentication *)auth
error:(NSError *)error{
if(error != nil){
//Authentication failed...
NSLog(@"Authentication error: %@", error);
NSData *responseData = [[error userInfo] objectForKey:@"data"];
if([responseData length] > 0)
NSLog(@"%@", [[[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding]autorelease]);
self.auth = nil;
} else {
//Authentication succeeded...
isSignedIn = YES;
self.auth = auth;
}
}
Und awakeFromNib:
- (void)awakeFromNib{
//Fill in the Client ID and Client Secret text fields
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//First, we'll try to get the saved Google authentication, if any, from the keychain
//Normal applications will hardcode in their client ID and client secret,
//But the sample app allows the user to enter them in a text field, and saves them in the preferences
NSString *clientID = [defaults stringForKey:kGoogleClientIDKey];
NSString *clientSecret = [defaults stringForKey:kGoogleClientSecretKey];
GTMOAuth2Authentication *auth;
auth = [GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:kKeychainItemName
clientID:clientID
clientSecret:clientSecret];
if (auth.canAuthorize) {
//There is saved google authentication
//self.serviceSegments.selectedSegmentIndex = 0;
}
//Save the authentication object, which holds the auth tokens
self.auth = auth;
[self setAuth:auth];
isSignedIn = self.auth.canAuthorize;
}
Übrigens meine Referenz für diese codes ist auf diesem link: http://code.google.com/p/gtm-oauth2/wiki/Introduction#Using_the_OAuth_2_Controllers
- Ich habe null-Wert in "GTMOAuth2ViewControllerTouch *viewController" obwohl clientID,clientSecret,keychainItemName korrekt sind.Können Sie explian was ist hier falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
aus der docs:
http://code.google.com/p/gtm-oauth2/wiki/Introduction
Also, aus dem code, es hängt davon ab, was kKeychainItemName festgelegt ist.
Dachte nur, ich würde kommentieren dies als ich war das Lesen der Dokumentation.
Verwenden Sie diese Methode, wenn Sie die oauth-Objekt zu speichern, in Schlüsselanhänger
und
bevor Sie einen Anruf tätigen zu api nur überprüfen und abrufen des oauth-Objekt unter Verwendung dieser
und stellen Sie sicher, es ist oauth-Objekt authentisch ist, mit dieser
Ich weiß, das ist eine alte Frage, aber ich hatte das gleiche Problem, also ich Schreibe meine Lösung, es könnte helfen, jemand anderes in der Zukunft.
Stellt sich heraus, es reicht nicht, nur set selbst.auth, Sie müssen auch die selbst.analyticsService.Vollmachtgeber variable
Diese hat den trick für mich, der Benutzer wird nicht mehr aufgefordert, die Anmeldeinformationen einzugeben.
Aus meiner Erfahrung, dieses Verhalten ist normal.
Haben Sie Zweifel, weil facebook nur fragt den Benutzer, wenn der Benutzer wünscht, zu gewähren, die app-Berechtigungen für den Zugriff auf das Profil des Benutzers?