2016-03-01 4 views
5

Sto cercando di integrare il framework GoogleSignIn in un'app iOS e anche di autenticare un utente su un server. Sono riuscito ad accedere all'utente, ma nel metodo - (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error delegato, user.serverAuthCode è nil e ho bisogno di passare questo codice di autenticazione del server per, uhm, autenticare l'utente sul server.Server utente GoogleAuthCode nil in Objective-C

ho letto this documentation page e si afferma che devo impostare la proprietà serverClientID del [GIDSignIn sharedInstance], ma da nessuna parte è indicato dove posso trovare questo "ID client server". Ho eseguito test con tutte le chiavi del mondo senza successo.

Ho quindi scoperto this documentation page che sembra che stia cercando di dirci dove trovare questo ID magico, ma sta usando una formulazione scadente e non ha aiutato. Io ho le credenziali OAuth2 di tipo Web application, ma:

  1. Sono utilizzati per la (client) web app, che corrisponde alla mia app iOS, che comunica anche con il server
  2. Ho provato a usarlo, e non ha funzionato

nessuno è riuscito a fuggire con successo dalle grinfie di Google (scarso) di documentazione?

risposta

5

Prova NON eseguirlo nel simulatore :)

+0

Ha funzionato, grazie! –

+4

Succede sul dispositivo anche per me .. il serverAuthCode è nullo –

+0

Perché il downvote?!?! –

1

Potete trovare client_id nel plist, e server_client_id si possono trovare attraverso il manager console API.

È necessario eliminare prima l'app, quindi provare a farlo di nuovo, il simulatore o il dispositivo, funzionerà.

+0

No, non è così .. –

1

Utilizzare questa configurazione per ottenere un serverAuthCode non nil è:

NSError *configureError; 

[[GGLContext sharedInstance] configureWithError:&configureError]; 

NSAssert(!configureError, @"Error configuring Google services: %@", configureError); 

[GIDSignIn sharedInstance].clientID = @"88.....apps.googleusercontent.com"; 
[GIDSignIn sharedInstance].serverClientID = @"88.....apps.googleusercontent.com" ; 
[GIDSignIn sharedInstance].shouldFetchBasicProfile = YES; 
[GIDSignIn sharedInstance].scopes = @[@"email", @"profile"]; 

Dove:

  • clientID utilizza il valore di REVERSED_CLIENT_ID da GoogleService-Info.plist.
  • serverClientID utilizza il valore corrispondente da Google Console.
+0

È richiesto '[GGLContext configureWithError]? Gli ambiti '@" email "' e '@" profilo "' sono richiesti? (non 'shouldFetchBasicProfile' li aggiunge automaticamente?) – aleclarson

2

È necessario assicurarsi che la proprietà [GIDSignIn sharedInstance].serverClientID sia impostata; il valore può essere trovato in Google API Console.

Inoltre, se hai user.serverAuthCode con il valore nil, assicurati di aver chiamato [[GIDSignIn sharedInstance] signOut]; prima di ogni tentativo successivo. Altrimenti [GIDSignIn sharedInstance] sembra ricordare la precedente configurazione.

Non ho problemi a trovare serverAuthCode nel simulatore.

+0

La parte' signOut' ha funzionato. Assicurati di uscire prima di provare un nuovo codice. –

0

Get token di accesso da user invece:

NNString* accessToken = user.authentication.accessToken; 
+0

Sei sicuro che il codice di autenticazione del server sia lo stesso del token di accesso? –

+0

@IulianOnofrei Stai utilizzando il codice di autenticazione per ottenere il token di accesso sul lato server, giusto? Perché non utilizzare direttamente il token di accesso. –

1

avuto lo stesso problema. GIDSignIn.sharedInstance().serverClientID corrisponde a GIDSignIn.sharedInstance().clientID. risolto impostando anche serverClientId.

Problemi correlati