Вход в Google Plus

Сценарий: Вход в приложение с помощью входа в Google+

Реализация:

- (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);
    }
}

Примечание: - (BOOL)application: (UIApplication *)application openURL: (NSURL *)url sourceApplication:(NSString *)sourceApplication annotation: (id)annotation обрабатывается в AppDelegate.

Вопрос:

  • Вход в Google+ отлично работает, когда пользователь нажимает кнопку входа в систему Google и переходит к Safari. Действительный AccessToken получен в моем приложении.
  • Однако, если приложение Google+ доступно на iPhone, пользователь переходит к приложению Google+, но при входе в систему не получен AccessToken. Я получаю сообщение об ошибке.

Ошибка:

Полученная ошибка Ошибка Домен = com.google.GooglePlusPlatform Code = -1 "операция не может быть завершена. (ошибка com.google.HTTPStatus 400.)" UserInfo = 0x15d95f90 {NSLocalizedDescription = Операция не может быть завершено. (ошибка com.google.HTTPStatus 400.)} и объект auth (null)

Будет очень полезно, если кто-то поможет мне в решении этой проблемы. Спасибо.

Ответы

Ответ 1

Укажите схему URL в проекте.

:

  • Войдите в свою учетную запись разработчика
  • выберите ваш проект
  • выберите API и auth из боковой панели
  • выберите "Учетные данные"
  • скопируйте 'REDIRECT URIS' и 'BUNDLE ID'
  • Проект Oen Xcode
  • выберите цель проекта
  • выберите "Информация"
  • развернуть типы URL
  • вставьте идентификатор "BUNDLE ID" в области идентификатора
  • вставьте "REDIRECT URIS" в область URL-адресов.

Если он не работает, попробуйте заменить "REDIRECT URIS" на "ИДЕНТИФИКАТОР BUNDLE", т.е. Идентификатор и схемы URL одинаковы.

Надеюсь, это поможет вам.

Ответ 2

можете ли вы попытаться поместить свой код в эту функцию в делегат приложения

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

и прокомментируйте эту функцию и скажите мне результат

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

sourceApplication: (NSString *) sourceApplication аннотация: (id) аннотация