2015-02-12 11 views
5

ho integrato Goolge + signin a iOS (utilizzando objC) seguendo le istruzioni sul sito web di Google, ma i metodi delegato (Sono interessato a questo metodo finishedWithAuth:auth:error) di GPPSignIn non sono sempre eseguiti. Devo memorizzare il token di accesso ricevuto nel metodo delegato nelle preferenze condivise.GPPSignI i metodi dei delegati non vengono eseguiti?

Ecco il mio codice:

`

-(void)finishedWithAuth:(GTMOAuth2Authentication *)auth 
error:(NSError *)error { 
    NSLog(@"Received error %@ and auth object %@",error, auth); 
    if (error) { 
     NSLog(@"error"); 
    } else { 
     NSLog(@"success"); 
    } 
} 
- (BOOL)application: (UIApplication *)application 
openURL: (NSURL *)url 
sourceApplication: (NSString *)sourceApplication 
annotation: (id)annotation { 
    NSLog(@"application"); 
    return [GPPURLHandler handleURL:url 
        sourceApplication:sourceApplication 
         annotation:annotation]; 
} 
-(void)refreshInterfaceBasedOnSignIn { 
    NSLog(@"refreshInterfaceBasedOnSignIn"); 
    if ([[GPPSignIn sharedInstance] authentication]) { 
     // The user is signed in. 
     self.signInButton.hidden = YES; 
     [self readProfileInformation]; 
     // Perform other actions here, such as showing a sign-out button 
     [self readProfileInformation]; 
     NSLog(@"readProfileInformation"); 
    } else { 
     self.signInButton.hidden = NO; 
     // Perform other actions here 
    } 
} 
- (void)disconnect { 
    [[GPPSignIn sharedInstance] disconnect]; 
} 
- (void)didDisconnectWithError:(NSError *)error { 
    if (error) { 
     NSLog(@"Received error %@", error); 
    } else { 
     // The user is signed out and disconnected. 
     // Clean up user data as specified by the Google+ terms. 
    } 
} 
- (void)signOut { 
    [[GPPSignIn sharedInstance] signOut]; 
} 
-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // google+ code 
    GPPSignIn *signIn = [GPPSignIn sharedInstance]; 
    signIn.shouldFetchGooglePlusUser = YES; 
    // uncommented to fetch user email 
    signIn.shouldFetchGoogleUserEmail = YES; 
    // You previously set kClientId in the "Initialize the Google+ client" step 
    signIn.clientID = kClientId; 
    // Uncomment one of these two statements for the scope you chose in the previous step 
    // signIn.scopes = @[ kGTLAuthScopePlusLogin ]; 
    // uncommented & set to "profile" & "email" scope: 
    signIn.scopes = @[ @"profile", @"email" ]; 
    // Optional: declare signIn.actions, see "app activities" 
    signIn.delegate = self; 
    // try silent authentication 
    [signIn trySilentAuthentication]; 
} 
@end 

`

Grazie

+0

Naturalmente Può essere che si dimentica di impostare delegato di classe GPPSignIn. – Tirth

+0

No, non ho, ho contrassegnato '' per delegare. Qualcuno può suggerirmi un buon esempio per realizzare questo. – Smarto

+1

hai aggiunto questa riga signIn.delegate = self; – karthikeyan

risposta

4

Questo è accaduto anche a me nelle mie applicazioni in esecuzione iOS 8. Che cosa ha fatto per me è stato quello di impostare il clientId in AppDelegate non appena l'app è stata avviata e non nel metodo viewDidLoad della mia classe UIViewController come indicato nell'accesso di Google+ per l'esempio iOS nel seguente URL: https://developers.google.com/+/mobile/ios/sign-in

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
/
//Google+ 
// Set app's client ID for |GPPSignIn| and |GPPShare|. 
[GPPSignIn sharedInstance].clientID = @"xxxxxx.......apps.googleusercontent.com"; 

... 

return YES; 

} 

Quindi, nella tua classe UIViewController il metodo di accesso dovrebbe essere:

- (void)viewDidLoad { 
[super viewDidLoad]; 

//Google+ for Logging in the user again if the app has been authorized 
signIn = [GPPSignIn sharedInstance]; 
signIn.shouldFetchGooglePlusUser = YES; 
signIn.shouldFetchGoogleUserID = YES; 
signIn.shouldFetchGoogleUserEmail = YES; 
signIn.scopes = @[ kGTLAuthScopePlusLogin ]; 
signIn.delegate = self; 
[signIn trySilentAuthentication]; 

... 
} 
Problemi correlati