在oauth2的google文档中,使用auth令牌构建GoogleCredential
如下所述:
Credential and Credential Store
特别是提供了此代码段:
GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken);
Plus plus = Plus.builder(new NetHttpTransport(), new JacksonFactory())
.setApplicationName("Google-PlusSample/1.0")
.setHttpRequestInitializer(credential)
.build()
当我试图以这种方式构建一个
GoogleCredential
时,我得到了简洁的信息:Please use the Builder and call setJsonFactory, setTransport and setClientSecrets
在异常的消息字段中。上周我下载了这些图书馆,所以我不知道发生了什么。文档是不是已经过时了,如果是的话,有什么方法可以取代这个方法作为从现有的auth令牌和refresh令牌构建的最佳实践?
顺便说一下,使用builder不是一个选项的原因是google应用程序控制台没有提供客户端机密;它说,它们不再提供给android应用程序等。因此,无法调用。
最佳答案
我最近遇到了这个问题,并为我的案子找到了解决办法。
以下是运行条件:该程序在android 4.0上运行,不使用google drive sdk,因为它不允许我们的程序读取google drive上不是由我们的程序创建的文件。我使用COM.谷歌.API.Services,Deal.*和com。谷歌。API。客户端。GoGoLePAPI。Auth.OAuth2.* Java库。
出现此问题的代码如下:
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
httpTransport, jsonFactory, CLIENT_ID, CLIENT_SECRET, Arrays.asList(DriveScopes.DRIVE))
.setAccessType("offline")
.setApprovalPrompt("auto").build();
GoogleTokenResponse response = null;
try {
response = flow.newTokenRequest(authorizationCode).setRedirectUri(REDIRECT_URI).execute();
} catch (IOException e) {
e.printStackTrace();
}
GoogleCredential credential = new GoogleCredential().setFromTokenResponse(response);
但如果setaccesstype(“online”)的参数有效;
这个问题的解决取决于您想要什么样的访问类型。
如果您想要“online”作为访问类型,那么使用setFromTokenResponse()应该没问题。
如果要将“offline”作为访问类型,则需要使用blow代码:
GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setClientSecrets(CLIENT_ID, CLIENT_SECRET)
.build()
.setFromTokenResponse(response);
需要提到的一件事是,对于googletokenresponse和googleauthorizationcodeflow的创建,您需要保持accesstype设置的一致性。
关于android - 没有GoogleCredential.Builder,GoogleCredential将无法构建,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15064636/