Ошибка Google OAuth -1001

В моем приложении я пытаюсь реализовать доступ к учетной записи Google, и когда я инициализирую его работу до сеанса входа в систему. после чего выдает следующую ошибку в скриншоте

введите описание изображения здесьвведите описание изображения здесь

Вот мой кодИнициализация и реализация метода

 static NSString *const kKeychainItemName =nil;
 NSString *kMyClientID = @"465568347336.apps.googleusercontent.com";     
 NSString *kMyClientSecret = @"rKVsWXTlo3M8zqNfofkX0Xrl"; 
 NSString *scope = @"https://www.googleapis.com/auth/userinfo.profile"; 

 GTMOAuth2ViewControllerTouch *viewController;
 viewController = [[GTMOAuth2ViewControllerTouch alloc] initWithScope:scope
                                                            clientID:kMyClientID
                                                        clientSecret:kMyClientSecret
                                                    keychainItemName:kKeychainItemName
                                                            delegate:self finishedSelector:@selector(viewController:finishedWithAuth:error:)];
 [self.navigationController presentModalViewController:viewController animated:YES];

Обработчик ошибок

 - (void)viewController:(GTMOAuth2ViewControllerTouch *)viewController
  finishedWithAuth:(GTMOAuth2Authentication *)auth
             error:(NSError *)error {
 if (error != nil) {
    NSString *output=nil;
    output = [error description];
    NSLog(@"output:%@",output);
    UIAlertView *fail = [[UIAlertView alloc] initWithTitle:@"Alert"
                                                   message:[NSString stringWithFormat:@"Error, Authentication failed!\n %@",error]
                                                  delegate:self
                                         cancelButtonTitle:@"OK"
                                         otherButtonTitles:@"Try again", nil];
    fail.tag = 1;

    [fail show];
    NSLog(@"Authentication failed!");
  } else {
    UIAlertView *success = [[UIAlertView alloc] initWithTitle:@"Alert"
                                                      message:[NSString stringWithFormat:@"Authentication succeeded!"]
                                                     delegate:self
                                            cancelButtonTitle:@"OK"
                                            otherButtonTitles:nil];
    success.tag = 2;

    [success show];
    NSLog(@"Autzentication succeeded!");
   }

Как решить эту проблему? Пожалуйста, помогите мне решить

2 ответа

Решение

Я реализовал свой GTMOAuth2, используя следующие коды, и он работал для меня, я надеюсь, что он может так или иначе помочь вам.

- (GTMOAuth2Authentication * )authForGoogle
{    
    NSURL * tokenURL = [NSURL URLWithString:GoogleTokenURL];

    NSString * redirectURI = @"urn:ietf:wg:oauth:2.0:oob";

    _auth = [GTMOAuth2Authentication authenticationWithServiceProvider:@"Google"
                                                         tokenURL:tokenURL
                                                      redirectURI:redirectURI
                                                         clientID:GoogleClientID
                                                     clientSecret:GoogleClientSecret];
    _auth.scope = @"https://www.googleapis.com/auth/userinfo.profile";
    return _auth;
}


- (void)signInToGoogle
{   
    _auth = [self authForGoogle];

    // Display the authentication view
    GTMOAuth2ViewControllerTouch * viewController = [[GTMOAuth2ViewControllerTouch alloc] initWithAuthentication:_auth
                                                                                                 authorizationURL:[NSURL URLWithString:GoogleAuthURL]
                                                                                            keychainItemName:@"GoogleKeychainName"
                                                                                                    delegate:self
                                                                                            finishedSelector:@selector(viewController:finishedWithAuth:error:)];
    [_window setRootViewController: viewController];
    [_window makeKeyAndVisible];
}

 - (void)viewController:(GTMOAuth2ViewControllerTouch *)viewController finishedWithAuth:(GTMOAuth2Authentication *)auth
         error:(NSError *)error 
{
    if (error != nil) {
       NSString *output=nil;
       output = [error description];
       NSLog(@"output:%@",output);
       UIAlertView *fail = [[UIAlertView alloc] initWithTitle:@"Alert"
                                               message:[NSString stringWithFormat:@"Error, Authentication failed!\n %@",error]
                                              delegate:self
                                     cancelButtonTitle:@"OK"
                                     otherButtonTitles:@"Try again", nil];
       fail.tag = 1;

       [fail show];
       NSLog(@"Authentication failed!");
    } else {
       UIAlertView *success = [[UIAlertView alloc] initWithTitle:@"Alert"
                                                  message:[NSString stringWithFormat:@"Authentication succeeded!"]
                                                 delegate:self
                                        cancelButtonTitle:@"OK"
                                        otherButtonTitles:nil];
       success.tag = 2;

       [success show];
       NSLog(@"Autzentication succeeded!");
    }
}

Я скопировал ваш метод FinishWithAuth, так как он похож на мою реализацию. Я не думаю, что между нашими кодами есть большая разница в отношении реализации GTMOAuth2 в xcode, но одна вещь, которую я понял, когда использовал GTMOAuth2, заключалась в том, что чрезвычайно трудно отлаживать любые ошибки, с которыми вы сталкиваетесь. У меня была такая же ошибка с вами, и я понял, что это потому, что я выбрал неправильный тип приложения на портале Google при настройке приложения и получении clientID и clientSecret. Сначала я настроил его как приложение для iOS (конечно!), Но потом, прочитав в Интернете различные ответы и проблемы, понял, что должен был создать его как приложение типа Other. Это решило мою проблему. Может быть, вы можете проверить это.

У них есть форум, где поддержка является достаточно полной, это ссылка здесь

Чтобы еще больше добавить, я могу отослать вас к учебнику, на который я ссылался, когда интегрировал GTMOAuth2 в свое приложение. Это ссылка здесь.

Кроме того, поскольку я разрабатывал корпоративное приложение, которое требовало от меня проверки адреса электронной почты пользователя, мне было очень трудно получить электронное письмо даже после аутентификации пользователя. Мне пришлось взломать и прочитать коды, прежде чем я получил то, что мне было нужно, и если вам это понадобится в будущем, вы можете проверить мой ответ здесь на SO.

Надеюсь это поможет!:)

Error Domain=com.google.GTMOAuth2 Code=-1001 Обычно это происходит, когда пользователь входит в систему, но в окне соглашения OAuth (где, например, указано "хочет получить доступ к вашей электронной почте"), пользователи нажимают "Отмена" или "Нет, спасибо".

Так что в принципе нет способа "решить" это. Вы можете справиться с этим или просто прогрессировать в своем приложении без этих сервисов.

Другие вопросы по тегам