iOS上的Google云端硬盘和" invalid_grant"

时间:2016-12-08 15:58:28

标签: ios google-drive-api google-oauth

我有一个使用Google Drive同步某些文件的iOS应用。该应用程序工作正常,直到几个月前(它默认使用iCloud进行同步,所以直到最近我才学会了谷歌驱动器,因为它不再工作)。

我得到的错误是:

  

发生错误:错误Domain = com.google.HTTPStatus Code = 400"(null)"的UserInfo = {JSON = {       error =" invalid_grant&#34 ;;   },data =< 7b0a2020 22657272 6f722220 3a202269 6e76616c 69645f67 72616e74 220a7d>}

OAuth部分设置正常,我认为我已获得授权访问用户的Google云端硬盘。当我尝试在顶层列出文件以查看是否需要为我的应用程序创建特殊目录时,会发生错误。

- (void)createGoogleDocumentsDirIfNeeded:(id<GoogleServiceDelegate>)delegate
{
NSString *parentID = @"root";

GTLQueryDrive *query = [GTLQueryDrive queryForFilesList];
query.q = [NSString stringWithFormat:@"'%@' in parents and title = '%@' and trashed != true", parentID, APP_NAME];

[googleService executeQuery:query completionHandler:^(GTLServiceTicket *ticket,
                                                      GTLDriveFileList *files,
                                                      NSError *error)
 {
     if (error == nil)
     {
         if ( files.items.count == 0)
         {
             NSLog(@"Creating google documents dir: %@", APP_NAME);
             [self createGoogleDocumentsDir:delegate];
         }
         else
         {
             GTLDriveFile *file = [files objectAtIndexedSubscript:0];
             self.googleDocumentsID = file.identifier;

             NSLog(@"Directory exists: %@; fileID = %@", APP_NAME, googleDocumentsID);
             [delegate googleDocumentsDirCreated:YES];

         }
     }
     else
     {
         NSLog(@"An error occurred: %@", error);
     }
 }];

}

错误显示在最后一个NSLog()中。

我非常确信谷歌方面的某些变化导致了这一点。我已经恢复了代码,以至于我之前知道它已经运行并且它仍然失败。

可能我在我们的Google Developer's Console中做了一些改变,导致了这一点,但我看不到。

此外,Google API信息中心仍会显示一些成功的访问权限,因此似乎每个人都没有失败。

有关可能发生的事情的任何想法? &#34; invalid_grant&#34;错误似乎非常通用,网络搜索显示它发生在很多情况下。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

正如你所说,可能有各种各样的解释。

要检查的是: -

  1. 让用户撤回其许可
  2. 您使用的是过期的刷新令牌吗
  3. 是手机的时钟准确

答案 1 :(得分:0)

阅读https://developers.google.com/identity/protocols/OAuth2UserAgent

  

验证用户身份时使用的网址是https://accounts.google.com/o/oauth2/v2/auth。此端点可通过SSL访问,并且HTTP连接被拒绝。

仅适用于httpS连接