在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/

10-11 15:35