我有一个网络应用程序需要列出我的Google云端硬盘中的所有文件,然后在点击时获取它们。 我使用OAuth进行身份验证,它似乎工作(相同的代码适用于Calendar API)。我在serviceAccountScopes中尝试了不同的范围但没有用。
基本上认证是:
credential = new GoogleCredential.Builder().
setTransport(HTTP_TRANSPORT).
setJsonFactory(JSON_FACTORY).
setServiceAccountId(apiEmail).
setServiceAccountScopes(DriveScopes.DRIVE).
setServiceAccountPrivateKeyFromP12File(p12File).build();
credential.refreshToken();
service = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).
setApplicationName("My API").build();
编辑我应该在refreshToken()调用之前添加该凭据的accessToken为null。
之后我尝试:
FileList files = service.files().list().execute();
返回的FileList是(应该包含项目):
{"etag":"\"_U9FTLXcHskmKgrWAZqJlfW8kCo/vyGp6PvFo4RvsFtPoIWeCReyIC8\"","items":[],"kind":"drive#fileList","selfLink":"https://www.googleapis.com/drive/v2/files"}
如果我检查selfLink的内容是:
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "dailyLimitExceededUnreg",
"message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
"extendedHelp": "https://code.google.com/apis/console"
}
],
"code": 403,
"message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
}
}
每日限制不是问题。 (我想这与此问题无关,因为:https://stackoverflow.com/a/10639679/2090125)。另外,我在控制台(https://stackoverflow.com/a/10329353/2090125)中启用了Drive和Drive SDK。
下载文件时执行此操作:
File file = service.files().get(fileId).execute();
它产生了这个(fileId存在):
An error occured: com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found
{
"code" : 404,
"errors" : [ {
"domain" : "global",
"message" : "File not found: 0B97KF40kTwrTaTllMnZCTV9ZSnM",
"reason" : "notFound"
} ],
"message" : "File not found: 0B97KF40kTwrTaTllMnZCTV9ZSnM"
}
再次检查https://www.googleapis.com/drive/v2/files/0B97KF40kTwrTaTllMnZCTV9ZSnM时,会看到相同的“dailyLimitExceededUnreg”。
这里发生了什么,我的身份验证有问题吗?我应该以某种方式在Drive SDK中配置Drive Integration吗?从Googles文档中我了解到它没有必要,我正在使用的方法应该无需进一步配置即可工作。