2014-11-05 15 views
14

Scenariusz: Zaloguj się do aplikacji za pośrednictwem Google+ logowaniaGoogle Plus Logowanie

Realizacja:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    GPPSignIn *aGPSSignIn = [GPPSignIn sharedInstance]; 
    aGPSSignIn.scopes = @[ kGTLAuthScopePlusLogin, kGTLAuthScopePlusUserinfoEmail, kGTLAuthScopePlusUserinfoProfile, kGTLAuthScopePlusMe]; 
    aGPSSignIn.shouldFetchGoogleUserEmail = YES; 
    aGPSSignIn.shouldFetchGooglePlusUser =YES; 
    aGPSSignIn.homeServerClientID = kClientID; 
    aGPSSignIn.clientID = kClientID; 
    aGPSSignIn.delegate = self; 
    if (![aGPSSignIn trySilentAuthentication]) { 
     [self showLoginButton]; 
    } 
} 

- (void)showLoginButton { 
    if (!self.signInButton) {   
     self.signInButton = [GPPSignInButton buttonWithType:UIButtonTypeCustom]; 
     [self.signInButton setFrame:CGRectMake(60, 100, 200, 40)]; 
    } 
    [self.view addSubview:self.signInButton]; 
} 

#pragma mark - GPPSignInDelegate 

- (void)finishedWithAuth: (GTMOAuth2Authentication *)auth error: (NSError *) error { 
    NSString *anAccessToken = auth.accessToken; 
    NSLog(@"googleAccessToken:%@",anAccessToken); 
} 

- (void)didDisconnectWithError:(NSError *)iError { 
    if (iError) { 
     NSLog(@"Error:%@", iError); 
    } 
} 

Uwaga: - (BOOL)application: (UIApplication *)application openURL: (NSURL *)url sourceApplication:(NSString *)sourceApplication annotation: (id)annotation jest obsługiwana w AppDelegate.

Problem:

  • Google+ logowanie działa perfekcyjnie, gdy użytkownik kliknie na przycisk Google signin i nawigować do Safari. Prawidłowy znacznik AccessToken jest odbierany w mojej aplikacji.
  • Jeśli jednak aplikacja Google+ jest dostępna na iPhonie, użytkownik jest kierowany do aplikacji Google+, ale po otrzymaniu hasła Login no AccessToken. Otrzymuję błąd.

Błąd:

Received error Error Domain=com.google.GooglePlusPlatform Code=-1 "The operation couldn’t be completed. (com.google.HTTPStatus error 400.)" UserInfo=0x15d95f90 {NSLocalizedDescription=The operation couldn’t be completed. (com.google.HTTPStatus error 400.)} and auth object (null)

Będzie to bardzo pomocne, jeśli ktoś może kierować mi w rozwiązaniu tego problemu. Dzięki.

+0

Czy umieściłeś swoją aplikację s identyfikator pakietu w Google Developer Console? To jedyny sposób, od WebView lub Safari w interfejsie API Google+ do uruchamiania aplikacji. – khunshan

+0

Tak, zrobiłem. Ale nadal błąd pozostaje ten sam. – Nishi

+0

@Nishi Masz jakieś rozwiązanie? Mam do czynienia z samym problemem http://stackoverflow.com/questions/30160104/authentication-not-working-with-google-app – Tariq

Odpowiedz

3

Proszę ustawić schemat URL w projekcie.

kroki:

  • Login your developer account
  • wybierz projekt
  • wybierz API & auth z bocznym
  • wybierz Poświadczenia
  • skopiować 'REDIRECT URI' i 'id pakiecie'
  • Projekt Oen Xcode
  • wybierz docelowy projekt
  • Wybierz 'info'
  • poszerzyć typy URL
  • wklej 'id pakiecie' w obszarze Identyfikator
  • wklej 'REDIRECT URI' w obszarze schematy URL

Jeśli to nie działa, spróbuj zastąpić "REDIRECT URIS" przez "BUNDLE ID", tj. Identyfikator i Schematy adresów URL są takie same.

Nadzieja ta może pomóc

+0

Próbowałem zastąpić REDIRECT URIS "z" BUNDLE ID ", niestety to nie zadziałało. – Nishi

+0

Didnt pracował z nami też – Tariq

0

można spróbować umieścić swój kod w tej funkcji w aplikacji delegata

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 

i skomentować tę funkcję i powiedz mi wynik

- (BOOL)application: (UIApplication *)application openURL: (NSURL *)url 

sourceApplication : (NSString *) sourceApplication adnotacja: (id) adnotacja

+0

Kiedy zastępuję poprzednią metodę aplikacją "- (BOOL): (UIApplication *) application openURL: (NSURL *) url", otrzymuję odpowiedź tokenu jako: "tokenResponse? E =% 20operation% 20 couldnt % E2% 80% 99t% 20be% 20 zakończone.% 20% 28com.google.HTTPStatus% 20error% 20400.% 29 & code = ". – Nishi

Powiązane problemy