2013-09-30 81 views
1

在我的应用程序中,我试图实现Google帐户访问,并且当我初始化它的工作直到登录会话。在这之后抛出在屏幕下面的错误出手Google OAuth错误-1001

enter image description hereenter image description here

这里我的代码 初始化和方法实现

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!"); 
    } 

如何解决这个问题。请帮我解决

回答

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

希望这会有所帮助! :)

0

Error Domain=com.google.GTMOAuth2 Code=-1001通常会在用户登录时发生,但在OAuth协议窗口中(例如,它表示“想要访问您的电子邮件”)用户单击“取消”或“不,谢谢”。

所以基本上没有办法“解决”这个。您可以处理它,或只是在没有该服务的情况下在应用中取得进展