3

在 OAuth2 的 Google 文档中,GoogleCredential此处描述了使用身份验证令牌构建一个:

凭据和凭据存储

特别是提供了这个代码片段:

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(...),因此,无法调用。

4

3 回答 3

1

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

下面是运行条件:程序运行在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() 应该可以。

如果你想“离线”作为访问类型,那么你需要使用打击代码:

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

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

于 2014-08-15T20:54:04.007 回答
0

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

  1. 选择你的项目,选择 API & Auth,然后点击 Credentials
  2. 创建新的客户端 ID(尽管它有其他客户端 ID)
  3. 选择已安装的应用程序-> android
  4. 正确填写你的包名和SHA1
  5. 创建新密钥(尽管它有其他客户端密钥)
  6. 选择安卓键
  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

您的问题将自动解决。请务必使用调试密钥库和发布密钥库创建客户端 ID 和密钥。

于 2014-11-21T08:54:46.270 回答
-3

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

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

于 2013-02-25T18:42:29.223 回答