Ошибка 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 (где, например, указано "хочет получить доступ к вашей электронной почте"), пользователи нажимают "Отмена" или "Нет, спасибо".
Так что в принципе нет способа "решить" это. Вы можете справиться с этим или просто прогрессировать в своем приложении без этих сервисов.