我已成功安装并运行名为DriveCommandLine的Google Drive Quick Start应用程序.我还调整了一点,以获取我的云端硬盘帐户中的一个文件的GET文件信息.
我现在要做的是以某种方式保存凭证并重新使用它们,而无需用户每次都必须访问网页才能获得授权代码.我已查看此页面,其中包含检索和使用OAuth 2.0凭据的说明.为了使用示例类(MyClass),我修改了DriveCommandLine中实例化Credential对象的行:
Credential credential = MyClass.getCredentials(code, "");
Run Code Online (Sandbox Code Playgroud)
这会导致抛出以下异常:
java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:187)
at com.google.api.client.json.jackson.JacksonFactory.createJsonParser(JacksonFactory.java:84)
at com.google.api.client.json.JsonFactory.fromInputStream(JsonFactory.java:247)
at com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets.load(GoogleClientSecrets.java:168)
at googledrive.MyClass.getFlow(MyClass.java:145)
at googledrive.MyClass.exchangeCode(MyClass.java:166)
at googledrive.MyClass.getCredentials(MyClass.java:239)
at googledrive.DriveCommandLine.<init>(DriveCommandLine.java:56)
at googledrive.DriveCommandLine.main(DriveCommandLine.java:115)
Run Code Online (Sandbox Code Playgroud)
我一直在研究这些API(Google Drive和OAuth)2天,但进展甚微.我非常感谢上述错误以及获得持久凭据的问题.
整个结构对我来说似乎不必要地复杂化.有人想解释为什么我不能通过传入我的谷歌用户名和密码来创建一个简单的凭据对象?
谢谢,Brian O Carroll,都柏林,爱尔兰
*更新*
好吧,我刚刚解决了上述错误,现在又有了一个新错误.
解决第一个问题的方法是修改MyClass.getFlow().我没有使用json文件创建GoogleClientServices对象,而是使用了不同版本的GoogleAuthorizationCodeFlow.Builder,它允许您直接输入客户端ID和客户端密钥作为字符串:
flow = new GoogleAuthorizationCodeFlow.Builder(httpTransport, jsonFactory, "<MY CLIENT ID>", "<MY CLIENT SECRET>", SCOPES).setAccessType("offline").setApprovalPrompt("force").build();
Run Code Online (Sandbox Code Playgroud)
我现在遇到的问题是,当我尝试使用flow(GoogleAuthorizationCodeFlow对象)来交换Credentials对象的授权代码时,我收到以下错误:
An error occurred: com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error" : "invalid_scope"
}
googledrive.MyClass$CodeExchangeException
at googledrive.MyClass.exchangeCode(MyClass.java:185)
at googledrive.MyClass.getCredentials(MyClass.java:262)
at googledrive.DriveCommandLine.<init>(DriveCommandLine.java:56)
at googledrive.DriveCommandLine.main(DriveCommandLine.java:115) …Run Code Online (Sandbox Code Playgroud) 特别是,我想检查一下PC上安装的RAM量.如果它小于1GB,我想在安装之前/期间显示警告信息......