在我的应用程序中,我尝试实施谷歌帐户访问,并在我初始化其工作直到登录会话。之后它会在屏幕截图中抛出以下错误
这是我的代码 初始化和方法实施
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!");
}
如何解决这个问题。请帮我解决
答案 0 :(得分:3)
我使用以下代码实现了我的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!");
}
}
我复制了你的finishedWithAuth方法,因为它类似于我的实现。我认为我们的代码与xcode中的GTMOAuth2的实现没有太大的区别,但我在使用GTMOAuth2时意识到的一件事是调试你遇到的任何错误都非常困难。我也有类似的错误,并意识到这是因为我在设置应用程序并获取clientID和clientSecret时在Google门户中选择了错误类型的应用程序。我首先将它设置为iOS应用程序(当然!),但是在线阅读了不同的答案和问题后,我意识到我应该将其创建为其他应用程序类型。这解决了我的问题。也许你可以看一下。
他们有一个论坛,支持非常全面,这是链接here
为了进一步补充,我可以向您推荐我在将GTMOAuth2集成到我的应用程序时引用的教程。这是链接here。
此外,由于我正在开发一个企业应用程序,要求我检查用户的电子邮件地址,即使在用户通过身份验证后,我也很难收到电子邮件。在得到我需要的东西之前,我不得不破解并阅读代码,如果将来需要它,你可以查看我的答案here on SO。
希望这有帮助! :)
答案 1 :(得分:0)
Error Domain=com.google.GTMOAuth2 Code=-1001
通常会在用户登录时发生,但在OAuth协议窗口(例如“想要访问您的电子邮件”)中,用户点击“取消”或“不,谢谢”。 / p>
所以基本上没有办法“解决”这个问题。您可以在没有该服务的情况下处理它或仅在您的应用程序中进行处理。