我已经与适用于 Android 的 Google Drive API 抗争了 50 多个小时,而且还没有接近一英寸。据我了解,有 1001 种方法可以访问 Google Drive(Google Docs API、REST 和 Google Drive SDK v2)。我正在使用 Google Drive SDK v2。我想访问 Google Drive 来上传 jpeg 文件。平台,Android 2.2+。
我试过的:
使用最近发布的 SDK: http ://code.google.com/p/google-api-java-client/wiki/APIs#Drive_API
我看过 Google I/O 会议,但最重要的部分(如何使用您的客户端 ID 和客户端密码创建 Drive 对象)被遗漏了: https ://developers.google.com/events/io/sessions /gooio2012/705/
我在https://code.google.com/apis/console创建了多个密钥。我创建(并测试)的最后一个是使用“创建另一个客户端 ID ...”->“已安装的应用程序”->“Android”创建的。我已经使用了 ~/.android/debug.keystore 中的密钥。
我还尝试为“其他”(而不是 Android/iOS)安装的应用程序创建一个密钥,但这给了我一个客户端 ID 和客户端密码。Drive 对象似乎不接受客户端密码。
在代码显示“1234567890-abcdefghij123klmnop.apps.googleusercontent.com”的地方,我尝试同时使用“API 密钥”和“客户端 ID”,都给出了相同的错误。
我的代码:
Account account = AccountManager.get(context).getAccountsByType(
"com.google")[0];
String token;
try {
token = GoogleAuthUtil.getToken(context, account.name, "oauth2:"
+ DriveScopes.DRIVE_FILE);
} catch (UserRecoverableAuthException e) {
context.startActivityForResult(e.getIntent(), ASK_PERMISSION);
return;
} catch (IOException e) {
return;
} catch (GoogleAuthException e) {
return;
}
HttpTransport httpTransport = new NetHttpTransport();
JacksonFactory jsonFactory = new JacksonFactory();
Drive.Builder b = new Drive.Builder(httpTransport, jsonFactory, null);
final String tokenCopy = token;
b.setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() {
public void initialize(JsonHttpRequest request) throws IOException {
DriveRequest driveRequest = (DriveRequest) request;
driveRequest.setPrettyPrint(true);
driveRequest
.setKey("1234567890-abcdefghij123klmnop.apps.googleusercontent.com");
driveRequest.setOauthToken(tokenCopy);
}
});
final Drive drive = b.build();
FileList files;
try {
files = drive.files().list().setQ("mimeType=text/plain").execute();
} catch (IOException e) {
e.printStackTrace(); // throws HTTP 400
}
我得到的错误是:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"location" : "q",
"locationType" : "parameter",
"message" : "Invalid Value",
"reason" : "invalid"
} ],
"message" : "Invalid Value"
}