标签: google-api-java-client

如何使用 GoogleCedentials 而不是已弃用的 GoogleCedential 来初始化 Google 驱动器

我有 java 代码使用服务帐户连接到谷歌驱动器,这有效:

JsonFactory JSON_FACTORY = new GsonFactory();

GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("sa.json"))
                .createScoped(List.of(DriveScopes.DRIVE))
                .createDelegated("foo@bar.com");

return new Drive.Builder(GoogleNetHttpTransport.newTrustedTransport(), JSON_FACTORY, credential)
                .setApplicationName("my-drive-app")
                .build();
Run Code Online (Sandbox Code Playgroud)

但是,我收到了一条GoogleCredential已弃用的弃用警告,我应该使用GoogleCredentials(注意末尾的额外 s)来代替google-auth-library

GoogleCredentials我可以这样初始化:

GoogleCredentials credential = GoogleCredentials.fromStream(new FileInputStream("sa.json"))
                .createScoped(List.of(DriveScopes.DRIVE))
                .createDelegated("foo@bar.com");
Run Code Online (Sandbox Code Playgroud)

但是我似乎无法弄清楚如何使用这个新GoogleCredentials对象初始化驱动服务。传递它来代替凭证对象会产生编译器错误,并且所有官方 googledrive java 文档都引用了现在已弃用的方法。

有人可以告诉我如何使用新的凭据对象初始化谷歌驱动器吗?

我正在使用的版本:

    <dependency>
      <groupId>com.google.api-client</groupId>
      <artifactId>google-api-client</artifactId>
      <version>1.32.1</version>
    </dependency>
    <dependency>
      <groupId>com.google.oauth-client</groupId>
      <artifactId>google-oauth-client-jetty</artifactId>
      <version>1.32.1</version>
    </dependency>
    <dependency>
      <groupId>com.google.apis</groupId>
      <artifactId>google-api-services-drive</artifactId>
      <version>v3-rev20210919-1.32.1</version>
    </dependency>
    <dependency>
      <groupId>com.google.auth</groupId>
      <artifactId>google-auth-library-oauth2-http</artifactId>
      <version>1.2.0</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

java google-api-java-client google-drive-api

5
推荐指数
1
解决办法
1507
查看次数

使用 2.0.0 google-api-client 进行 Gmail 调用时的兼容性问题

google-api-client我一直在开发一个小项目,该项目连接到用户的 Gmail 收件箱并使用2.0.0 和google-api-services-gmail版本 v1-rev20220404-2.0.0读取邮件

当我尝试构建 Gmail 服务时

service = new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY,
          authorize).setApplicationName(Main.APPLICATION_NAME).build();
Run Code Online (Sandbox Code Playgroud)

它抛出一个 IllegalStateException 说

“您当前运行的是 2.0.0 版的 google-api-client。您至少需要 1.15 版的 google-api-client 才能运行 1.25.0 版的 Gmail API 库。”

起初我以为可能是我安装的模块不是最新的或者什么的,但这并没有真正意义,所以我尝试调试并进入了 Gmail.java 类。

该代码以非常简单的方式检查版本,如果条件为 false,则抛出异常

static {
        Preconditions.checkState(GoogleUtils.MAJOR_VERSION == 1 && GoogleUtils.MINOR_VERSION >= 15,
        "You are currently running with version %s of google-api-client. You need at least version 1.15 of google-api-client to run version 1.25.0 of the Gmail API library.",
        new Object[]{GoogleUtils.VERSION});
    }
Run Code Online (Sandbox Code Playgroud)

我认为这就是问题所在,我的 MAJOR_VERSION 为 2 …

java gmail google-api google-api-java-client gmail-api

5
推荐指数
1
解决办法
2159
查看次数

使用 maxResults 参数时 GoogleDrive V2 API 中的内部服务器错误

我正在使用 GoogleDrive 的 V2 java 客户端库列出我的 GDrive 中的文件。
我经常从 Google 端收到以下错误。

{
  "code" : 500,
  "errors" : [ {
    "domain" : "global",
    "message" : "Internal Error",
    "reason" : "internalError"
  } ],
  "message" : "Internal Error"
}
Run Code Online (Sandbox Code Playgroud)

我们发现,当我们将 maxResults 设置为超过 150 时,特定用户经常会遇到此错误。

有人可以帮忙吗?

google-api-java-client google-drive-api

5
推荐指数
0
解决办法
78
查看次数

gdata-java-client和google-api-java-client有什么区别?

我正在开发一个与Youtube API接口的项目.我遇到过两个项目(1)gdata-java-client和(2)google-api-java-client.

项目的范围(和名称)有点令人困惑.似乎google-api-java-client是用于处理Web数据的通用API.相比之下,gdata-java-client处理谷歌特定数据(例如,YouTube API).这是正确的表征吗?

如果是这样,gdata-java-client是否建立在google-api-java-client之上?

java gdata-api gdata-java-client google-api-java-client

4
推荐指数
1
解决办法
1014
查看次数

如何从T实例化Class <T>?

我有以下方法:

public <T> execute(HttpRequest request) {
   ...
   // in parseAs i have to pass Class<T> how can I instantiate it from T?
   request.execute().parseAs(classT);
}
Run Code Online (Sandbox Code Playgroud)

PS:parseAs是来自谷歌http客户端库的方法.

java google-api-java-client

4
推荐指数
1
解决办法
512
查看次数

导入Google API时无法解析文件

我正在为Google Glass开发一个Glassware.我正在尝试导入这些文件:

import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.oauth2.Oauth2;
import com.google.api.services.oauth2.model.Userinfo;
Run Code Online (Sandbox Code Playgroud)

但是我收到了错误.他们在下面:

The import com.google.api.client.json.jackson cannot be resolved
The import com.google.api.services.oauth2 cannot be resolved
The import com.google.api.services.oauth2 cannot be resolved
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我会收到这些错误.我正在建立快速入门java项目.我的Maven依赖关系如下:

C:\Users\Family3\.m2\repository\com\google\apis\google-api-services-mirror\v1-rev20-1.16.0-rc\google-api-services-mirror-v1-rev20-1.16.0-rc.jar
C:\Users\Family3\.m2\repository\com\google\api-client\google-api-client\1.16.0-rc\google-api-client-1.16.0-rc.jar
C:\Users\Family3\.m2\repository\com\google\oauth-client\google-oauth-client\1.16.0-rc\google-oauth-client-1.16.0-rc.jar
C:\Users\Family3\.m2\repository\com\google\http-client\google-http-client-jackson2\1.16.0-rc\google-http-client-jackson2-1.16.0-rc.jar
C:\Users\Family3\.m2\repository\com\google\http-client\google-http-client\1.16.0-rc\google-http-client-1.16.0-rc.jar
C:\Users\Family3\.m2\repository\com\google\code\findbugs\jsr305\1.3.9\jsr305-1.3.9.jar
C:\Users\Family3\.m2\repository\org\apache\httpcomponents\httpclient\4.0.1\httpclient-4.0.1.jar
C:\Users\Family3\.m2\repository\org\apache\httpcomponents\httpcore\4.0.1\httpcore-4.0.1.jar
C:\Users\Family3\.m2\repository\xpp3\xpp3\1.1.4c\xpp3-1.1.4c.jar
C:\Users\Family3\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.1.3\jackson-core-2.1.3.jar
C:\Users\Family3\.m2\repository\org\mortbay\jetty\jetty\6.1.14\jetty-6.1.14.jar
C:\Users\Family3\.m2\repository\org\mortbay\jetty\servlet-api-2.5\6.1.14\servlet-api-2.5-6.1.14.jar
C:\Users\Family3\.m2\repository\org\mortbay\jetty\jetty-util\6.1.14\jetty-util-6.1.14.jar
C:\Users\Family3\.m2\repository\org\mortbay\jetty\jetty-plus\6.1.14\jetty-plus-6.1.14.jar
C:\Users\Family3\.m2\repository\geronimo-spec\geronimo-spec-jta\1.0.1B-rc4\geronimo-spec-jta-1.0.1B-rc4.jar
C:\Users\Family3\.m2\repository\org\mortbay\jetty\jsp-2.1\6.1.14\jsp-2.1-6.1.14.jar
C:\Users\Family3\.m2\repository\org\eclipse\jdt\core\3.1.1\core-3.1.1.jar
C:\Users\Family3\.m2\repository\ant\ant\1.6.5\ant-1.6.5.jar
C:\Users\Family3\.m2\repository\org\mortbay\jetty\jsp-api-2.1\6.1.14\jsp-api-2.1-6.1.14.jar
C:\Users\Family3\.m2\repository\org\apache\commons\commons-lang3\3.1\commons-lang3-3.1.jar
C:\Users\Family3\.m2\repository\org\codehaus\jackson\jackson-core-asl\1.9.11\jackson-core-asl-1.9.11.jar
C:\Users\Family3\.m2\repository\org\codehaus\jackson\jackson-mapper-asl\1.9.11\jackson-mapper-asl-1.9.11.jar
C:\Users\Family3\.m2\repository\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar
C:\Users\Family3\.m2\repository\commons-logging\commons-logging\1.1.2\commons-logging-1.1.2.jar
C:\Users\Family3\.m2\repository\commons-codec\commons-codec\1.7\commons-codec-1.7.jar
C:\Users\Family3\.m2\repository\com\google\guava\guava\14.0.1\guava-14.0.1.jar
Run Code Online (Sandbox Code Playgroud)

为什么我会收到这些错误?我没有导入.jar吗?我找不到任何应该包含的.jar,但可能有一个.jar.谢谢您的帮助.

java maven google-api-java-client google-glass google-mirror-api

4
推荐指数
1
解决办法
1万
查看次数

有效的Google OAuth2令牌无法解析?

我有一个Google接受的有效OAuth2令牌,但GoogleIdTokenVerifier甚至无法解析它.

令牌是ya29.1.AADtN_XcjzHgauKetBvrbgHImGFg1pjiHRQAKHyTglBDjEZsTPUMQJ5p-xAKtk955_4r6MdnTe3HZ08(不用担心,它已经过期).

它是在Android上使用获得的

accountManager.blockingGetAuthToken(account, "oauth2:https://www.googleapis.com/auth/userinfo.email", true);
Run Code Online (Sandbox Code Playgroud)

当我打电话给https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=... 我时,我得到了理智的结果

{
  "issued_to": "34951113407.apps.googleusercontent.com",
  "audience": "34951113407.apps.googleusercontent.com",
  "scope": "https://www.googleapis.com/auth/userinfo.email",
  "expires_in": 3175,
  "email": "me@gmail.com",
  "verified_email": true,
  "access_type": "offline"
}
Run Code Online (Sandbox Code Playgroud)

所以它必须是有效的令牌.但是当我打电话时

new GoogleIdTokenVerifier(new UrlFetchTransport(), JacksonFactory.getDefaultInstance())
    .verify(authToken)
Run Code Online (Sandbox Code Playgroud)

它给了我

com.fasterxml.jackson.core.JsonParseException: Unexpected character ('É' (code 201)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: java.io.ByteArrayInputStream@69886979; line: 1, column: 2]
    at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1378)
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:599)
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:520)
    at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2275)
    at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:788)
    at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:674)
    at com.google.api.client.json.jackson2.JacksonParser.nextToken(JacksonParser.java:55)
    at com.google.api.client.json.JsonParser.startParsing(JsonParser.java:213)
    at com.google.api.client.json.JsonParser.parse(JsonParser.java:372)
    at com.google.api.client.json.JsonParser.parse(JsonParser.java:328)
    at …
Run Code Online (Sandbox Code Playgroud)

google-api oauth-2.0 google-api-java-client android-authenticator

4
推荐指数
1
解决办法
889
查看次数

使用客户经理令牌在webview中登录Google帐户

我从帐户管理器获取访问令牌以访问所有谷歌Java客户端API,但我需要打开具有谷歌的WebView,必须通过从帐户管理器获取的访问令牌登录.任何人都知道这一点.

我尝试使用cookies(通过这个),但我无法实现它.如果您知道这种方式,请分享代码段.

android webview google-api-java-client

4
推荐指数
1
解决办法
1784
查看次数

Google表格使用API​​密钥而不是client_secret.json

Java QuickstartQuickStart.java上的示例中,它们用于标识应用程序,这会弹出一个窗口,要求提供Google凭据以使用该应用程序。您必须下载才能修改Google表格。OAuth client IDclient_secret.json

我的问题是:您可以使用API Key或其他方法来躲避弹出窗口询问Google凭据吗?并且,如果可能的话,如何更改Java代码以实现此目的?

java google-api google-spreadsheet-api google-api-java-client google-oauth

4
推荐指数
2
解决办法
1509
查看次数

如何更新不推荐使用的com.google.api.client.extensions.android.http.AndroidHttp

我有以下对象

HttpTransport t = AndroidHttp.newCompatibleTransport();
Run Code Online (Sandbox Code Playgroud)

但是整个AndroidHttp类(com.google.api.client.extensions.android.http.AndroidHttp)都被标记为已弃用。

我不知道使用较新的库替换它的类是什么。

如何替换这个过时的电话?

android google-api-java-client google-api-client android-httptransport

4
推荐指数
1
解决办法
451
查看次数