2012-09-19 97 views
4

我正在尝试编写一个将Google文档写入Google云端硬盘的AppEngine应用,并将其放入一组特定的文件夹并设置访问权限。我已经与旧的DocsList API一起工作,但由于刚刚被弃用,我决定更新我的代码(并且我还有一些额外的功能可以添加)。Google云端硬盘服务帐户返回403使用限制

我正面临的问题是:当我使用服务帐户并尝试模拟特定用户时,即使我没有用完我的任何配额,但仍会使用usageLimits。

这里是我使用的代码:

GoogleCredential credentials = new GoogleCredential.Builder() 
       .setTransport(HTTP_TRANSPORT) 
       .setJsonFactory(JSON_FACTORY) 
       .setServiceAccountId("xxxxxxxxxxgserviceaccount.com") 
       .setServiceAccountScopes(DriveScopes.DRIVE) 
       .setServiceAccountPrivateKeyFromP12File(
            new java.io.File("xxxx-privatekey.p12")) 
       .setServiceAccountUser("[email protected]").build(); 

我不是使用这些凭据来启动我的Drive对象:

Drive d = Drive.builder(httpTransport, jsonFactory) 
       .setHttpRequestInitializer(credentials) 
       .setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() { 
       @Override 
       public void initialize(JsonHttpRequest request) { 
        DriveRequest driveRequest = (DriveRequest) request; 
        driveRequest.setPrettyPrint(true); 
       } 
      }).setApplicationName("MYAPPNAME").build(); 

BTW:我一直在使用新的驱动器试图(.. ..),但不管我尝试什么都不行。保持抛出内部方法没有找到的错误!

回到这个问题:。 当我不是使用 'D' 调用类似.files()获得( “SOMEFILEID”)执行()我得到一个403

{ "code" : 403, 
"errors" : [ { 
    "domain" : "usageLimits", 
    "message" : "Daily Limit Exceeded. Please sign up", 
    "reason" : "dailyLimitExceededUnreg", 
    "extendedHelp" : "https://code.google.com/apis/console" 
    } ], 
    "message" : "Daily Limit Exceeded. Please sign up" 
} 

我可以”弄清楚为什么这不起作用。我整天都在网上看,但找不到合适的答案。非常感谢一些帮助。

+0

可能的重复:http://stackoverflow.com/questions/10323579/google-drive-sdk-java-sample-not-working –

+0

我检查了...这是一个客户端应用程序。我遇到了服务帐户,服务器端的问题。但是再次经历这些问题......谁知道,这可能会奏效。 –

回答

1

当API调用缺少授权http头时,我通常会得到403。跟踪http并查看标题。 “配额”消息的基本原理是没有Auth标头,您是匿名的,匿名使用的配额为零。

您可能还会检查您的应用是否已注册了两个云端硬盘API,因为我听说可能会导致同样的问题。

在内部方法问题上,这听起来像你使用不兼容的库版本。最适合我的是删除我用示例代码下载的所有库,然后使用Google Eclipse插件“Google/Add Google API ...”下载所有最新版本。

+0

我删除了所有其他库,并通过eclipse插件添加它。我最初有同样的想法:必须是旧的库。但不幸的是没有。我查看了标题位,但因为要将标题设置为包含持票人而陷入困境,所以我需要标记,但自从使用服务帐户后,我没有可用标记(或者是我错误的部分?) 。 –

+0

好的...我今天一直在疯狂调试,发现没有令牌集。所以这些请求没有一个可信的标记。现在我需要弄清楚的是如何从我的服务帐户获取令牌。 –

+0

好吧...所以我解决了它! –

2

所以pinoyyid的答案确实有帮助,虽然这不是确定的答案。

我最终解决这样的:

我把我的AppID(xxxxx.apps.googleusercontent.com),并将其添加到我的cPanel https://www.google.com/a/cpanel/ [ [YOURDOMAIN]]/ManageOauthClients 与这些范围:

之后,我可以对Drive环境进行身份验证请求。现在遇到了一堆不同的问题,但403解决了。

+0

我有同样的问题,但我没有谷歌应用程序。我只有一个foo.appspot.com域名。任何帮助? –

+0

你正在开发这个GMail吗?因为我不认为GMail的服务帐户有这样的事情。如果您可以提供更多信息,我可能会提供帮助。 –

+0

不是Gmail。我只需要使用Drive API。我使用的是https:// www.googleapis.com/drive/v2/files' API。我在这里发布了一个问题,如果您愿意帮助我,我将不胜感激:http://stackoverflow.com/questions/12691677/google-drive-api-through-google-app-engine –

相关问题