我正在创建一个Android应用,该应用使用常规Google云端硬盘帐户作为应用程序拥有的帐户,具有令人难以置信的简洁,在这里:
Use regular Google accounts as application-owned accounts
不幸的是,关于如何在Drive上执行任何操作的所有描述都引用了客户端密钥,如下所述:
Google APIs Console - missing client secret
对于已安装的应用程序不再存在。通过构建实际的网页,我设法获得了一个令人难以置信的痛苦的OAuth2令牌。从这里我获得了访问令牌和刷新令牌,如第一个链接中所述。我想用这些做一个GoogleCredential
对象,据我所知,这应该是这样的:
HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setClientSecrets(
new GoogleClientSecrets().setInstalled(
new Details()
.setAuthUri(AUTH_URI)
.setClientId(CLIENT_ID)
//.setClientSecret("but I haven't got one!")
.setRedirectUris(REDIRECT_URIS)
)
)
.build()
.setAccessToken(ACCESS_TOKEN) //defined above
.setRefreshToken(REFRESH_TOKEN); //defined above
Drive.Builder driveBuilder = new Drive.Builder(httpTransport, jsonFactory, null);
driveBuilder.setHttpRequestInitializer(credential);
我已经注释了setClientSecret(...)
调用,因为我没有安装应用程序的客户端密码。
基本上,我不能制作这个凭证,而且我所看到的关于制作凭证的每一个建议都属于这三个类别中的一个:
顺便说一下,如果没有设置客户端密码,我会在NullPointerException
中获得Preconditions.class
。它没有告诉我很多相关信息。我还尝试通过子类化直接创建GoogleCredential,并指示我使用GoogleCredential.Builder
,这就是我发现自己的原因。
如何解决此客户端密码问题?
答案 0 :(得分:0)
答案似乎是取消注释。只要某事在客户端密码字段中,GoogleCredential.Builder
就可以成功构建凭证对象。但它真的得到了驱动器吗?坚持下去。
编辑:不,我收到“invalid_client”错误。这非常令人沮丧。
答案 1 :(得分:0)
以下是使用已接受答案的帮助,在编辑中提供自己答案的问题的链接:
How setup Google Drive Credentials within Android App?
简而言之,最重要的是您需要从开发人员api控制台获取一个简单的api访问密钥。如果找不到,则可能需要设置驱动器api访问权限。