如果没有GoogleCredential.Builder,GoogleCredential将无法构建

时间:2013-02-25 10:16:34

标签: android google-drive-api

在OAuth2的Google文档中,此处描述了使用身份验证令牌构建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

在异常的消息字段中。我上周下载了这些库,所以我不确定发生了什么。文档是否过时了,如果是这样,哪种方法已经取代了这个文档作为从现有的身份验证令牌和刷新令牌构建的最佳做法?

顺便说一句,使用Builder的原因不是选择,因为Google应用程序控制台没有提供客户端密码;它说他们不再提供Android应用程序等。因此,无法调用setClientSecrets(...)

3 个答案:

答案 0 :(得分:0)

我最近遇到了这个问题并为我的案例找到了解决方案。

以下是运行条件:该程序在Android 4.0上运行,并且不使用Google Drive SDK,因为它无法允许我们的程序读取Google Drive上不是由我们的程序创建的文件。我使用com.google.api.services.drive。*和com.google.api.client.googleapis.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”);

的参数,上面的代码运行良好

此问题的解决方案取决于您想要的accessType类型。

如果你想要“onLine”作为accessType,那么使用setFromTokenResponse()应该没问题。

如果你想要“离线”作为accessType,那么你需要使用吹码:

GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
        .setJsonFactory(jsonFactory)
        .setClientSecrets(CLIENT_ID, CLIENT_SECRET)
        .build()
        .setFromTokenResponse(response);

需要提及的一件事是,您需要将accessType设置与GoogleTokenResponse和GoogleAuthorizationCodeFlow创建保持一致。

答案 1 :(得分:0)

您需要在Google Dev Console中设置Android应用密钥。

  1. 选择您的项目,选择API&单击“验证”,然后单击“凭据”
  2. 创建新的客户端ID(尽管它有其他客户端ID)
  3. 选择已安装的应用 - >机器人
  4. 正确填写您的包裹名称和SHA1
  5. 创建新密钥(尽管它有其他客户端密钥)
  6. 选择Android密钥
  7. 填写SHA1; packageName,如下所示:45:B5:E4:6F:36:AD:0A:98:94:B4:02:66:2B:12:17:F2:56:26:A0:E0;com.example
  8. 您的问题将自动解决。确保使用调试密钥库和发布密钥库创建客户机ID和密钥。

答案 2 :(得分:-3)

查看Google云端硬盘SDK文档中的Android快速入门示例,了解正确设置GoogleCredential的分步说明:

https://developers.google.com/drive/quickstart-android