标签: google-api-java-client

GmailApiQuickstart -

我很尴尬,我只是失败了一个示例代码,但我会责怪它已经晚了...

我已经复制并粘贴了以下内容:https://developers.google.com/gmail/api/quickstart/quickstart-java 并下载了客户端库:https://code.google.com/p/google-api- java-client /https://developers.google.com/api-client-library/java/apis/gmail/v1

当我运行示例时,我得到以下异常:

Exception in thread "main" java.lang.IllegalArgumentException
    at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:76)
    at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:37)
    at com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets.getDetails(GoogleClientSecrets.java:82)
    at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow$Builder.<init>(GoogleAuthorizationCodeFlow.java:195)
    at com.emailreply.musterion.GmailApiQuickstart.main(GmailApiQuickstart.java:40)
Run Code Online (Sandbox Code Playgroud)

谷歌搜索,我找不到一个简单的答案,所以假设愚蠢或库缺失/不正确.

我拥有的图书馆是:

/libs/commons-logging-1.1.1.jar
/libs/google-api-client-1.19.0.jar
/libs/google-api-client-android-1.19.0.jar
/libs/google-api-client-appengine-1.19.0.jar
/libs/google-api-client-gson-1.19.0.jar
/libs/google-api-client-jackson2-1.19.0.jar
/libs/google-api-client-java6-1.19.0.jar
/libs/google-api-client-servlet-1.19.0.jar
/libs/google-http-client-1.19.0.jar
/libs/google-http-client-android-1.19.0.jar
/libs/google-http-client-appengine-1.19.0.jar
/libs/google-http-client-gson-1.19.0.jar
/libs/google-http-client-jackson2-1.19.0.jar
/libs/google-http-client-jdo-1.19.0.jar
/libs/google-oauth-client-1.19.0.jar
/libs/google-oauth-client-appengine-1.19.0.jar
/libs/google-oauth-client-java6-1.19.0.jar
/libs/google-oauth-client-jetty-1.19.0.jar
/libs/google-oauth-client-servlet-1.19.0.jar
/libs/gson-2.1.jar
/libs/httpclient-4.0.1.jar
/libs/httpcore-4.0.1.jar
/libs/jackson-core-2.1.3.jar
/libs/jdo2-api-2.3-eb.jar
/libs/jetty-6.1.26.jar
/libs/jetty-util-6.1.26.jar
/libs/jsr305-1.3.9.jar
/libs/transaction-api-1.1.jar
google-api-services-gmail-v1-rev10-1.19.0.jar
Run Code Online (Sandbox Code Playgroud)

上面提到的例子:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;

import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.auth.oauth2.GoogleOAuthConstants;
import …
Run Code Online (Sandbox Code Playgroud)

java gmail google-api-java-client

19
推荐指数
2
解决办法
6428
查看次数

Chrome上的Google Auth API Javascript idpiframe初始化错误

我使用GSuite,我正在编写一个非常简单的Web应用程序来使用Google Auth API,我得到一个例外"idpiframe_initialization_failed".

现在我有谷歌示例中显示的确切HTML:https: //developers.google.com/api-client-library/javascript/samples/samples

1)我在Google Developer Console上创建了一个项目

2)我设置了OAUTH授权屏幕

3)我已经创建了客户端ID,创建了限制和重定向URL

4)我还创建了API KEY

5)最后我启用了People API,因为在设置discoveryDocs参数时发现服务失败了

通过所有这些步骤,当我调用gapi.client.init时,它仅在chrome中引发异常,我无法理解为什么.

初始化API的代码是:

    gapi.client.init({
        apiKey: 'MY_API_KEY',
        discoveryDocs: ["https://people.googleapis.com/$discovery/rest?version=v1"],
        clientId: 'MY_CLIENT_ID.apps.googleusercontent.com',
        scope: 'profile'
    }).then(function (response) {
      // Listen for sign-in state changes.
      gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);

      // Handle the initial sign-in state.
      updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get());
    },function(reason){
        console.log('onerror');
        console.log(reason);
      // Listen for sign-in state changes.
      gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);

      // Handle the initial sign-in state.
      updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get());
Run Code Online (Sandbox Code Playgroud)

代码正在运行错误块,消息是:

details: "Failed to read the 'localStorage' property from 'Window': Access is denied for this …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome google-api-java-client google-api-client

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

"需要登录"401通过OAuth 2.0使用服务帐户呼叫v3 Google Calendar API时未经授权的消息

首先,让我解释一下我要做的事情,因为这是一个两部分问题.

我建立在内部通过的OAuth2一个谷歌帐户验证一个JAX-RS的服务,所以它可以访问和操作谷歌日历.这项服务将通过一个网站(的Joomla),这将允许登录到网站的用户注册与日历事件他们的电子邮件地址,以便他们可以得到电子邮件通知当事件附近被调用.这些用户不了解底层Google帐户.

所以我的第一个问题是使用服务帐户身份验证是正确的吗?查看Google文档,它是唯一适合非人类身份验证的用例(因此服务器到服务器身份验证).

第二个问题是,我已经写了一些代码来做到这一点,但我拿回401 /未经授权的响应返回以下错误回来时,我调用execute方法日历饲料.此代码已从Google示例中取消.

我正在使用Google Calendar API的v3-rev3-1.5.0-beta.我已在帐户中启用了Calendar API,并创建并下载了私钥,该私钥在下面的代码中使用.

我在本地调用Eclipse中的代码,而不是从Web服务器调用.

所以我做的第一个调用是取回一个凭证对象(Id用X混淆):

private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
private static final JsonFactory JSON_FACTORY = new JacksonFactory();
.
.
.
GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId("284XXXXXXXX@developer.gserviceaccount.com")
            .setServiceAccountScopes(CalendarScopes.CALENDAR)
            .setServiceAccountPrivateKeyFromP12File(new File("D:/3cd8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXd635e-privatekey.p12"))
            .build();
Run Code Online (Sandbox Code Playgroud)

下一步是调用Calendar API,就像这样(之间没有其他代码调用):

 Calendar calendar = Calendar.builder(HTTP_TRANSPORT, JSON_FACTORY)
        .setApplicationName("TestApp-Calendar/1.0").setHttpRequestInitializer(credential)
        .build();

 CalendarList feed = calendar.calendarList().list().execute();
Run Code Online (Sandbox Code Playgroud)

对list().execute()的调用导致以下错误:

com.google.api.client.googleapis.json.GoogleJsonResponseException:401 Unauthorized {"code":401,"errors":[{"domain":"global","location":"Authorization","locationType":"标题","消息":"需要登录","原因":"必需"}},"消息":"需要登录"} com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException. java:159)com.google.api.client.googleapis.json.GoogleJsonResponseException.execute(GoogleJsonResponseException.java:187)com.google.api.client.googleapis.services.GoogleClient.executeUnparsed(GoogleClient.java:115) at com.google.api.client.http.json.JsonHttpRequest.executeUnparsed(JsonHttpRequest.java:112)at the com.google.api.services.calendar.Calendar $ CalendarList $ List.execute(Calendar.java:510)at uk .org.reigatepriorybowmen.Service.registerEmailForAllCalendarEvents(Service.java:55)at uk.org.reigatepriorybowmen.Service.main(Service.java:74)

服务帐户设置如下:

在此输入图像描述

那么,我做错了什么?!我花了几个小时在谷歌上寻找解决方案,所以这是我最后的希望.

非常感谢您的帮助.

贾斯汀

google-calendar-api oauth-2.0 google-api-java-client google-oauth

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

无法刷新访问令牌:响应是"unauthorized_client"

我尝试刷新访问令牌时收到错误:

400错误请求

{error:"unauthorized_client"}

来自Google令牌URI:

{
  "error" : "invalid_request"
}
Run Code Online (Sandbox Code Playgroud)

在这里阅读了这个答案以及官方的Google文档(描述了POST请求应该如何看待),我没有看到任何区别.

我抓住了我的POST请求(删除了秘密):

POST /SHOWMERAWPOST HTTP/1.1
User-Agent: Google-HTTP-Java-Client/1.10.3-beta (gzip)
Pragma: no-cache
Host: requestb.in
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 175
Connection: keep-alive
Cache-Control: no-cache
Accept-Encoding: gzip
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2

grant_type=refresh_token&refresh_token=******&client_id=*******.apps.googleusercontent.com&client_secret=******
Run Code Online (Sandbox Code Playgroud)

发送请求的Java代码:

RefreshTokenRequest req = new RefreshTokenRequest(new NetHttpTransport(), new JacksonFactory(), new GenericUrl(
                    getSecrets().getDetails().getTokenUri()), REFRESH_TOKEN);

           req.set("client_id", getSecrets().getDetails().getClientId());
           req.set("client_secret", getSecrets().getDetails().getClientSecret());

           TokenResponse response = req.execute();
Run Code Online (Sandbox Code Playgroud)

有什么不对的吗?

google-api oauth-2.0 google-api-java-client

18
推荐指数
2
解决办法
3万
查看次数

AppEngine Java Google+登录缺少gplus_id

我在登录尝试,以G +与Java在谷歌AppEngine上的解释这里

在步骤8中,代码获得gPlusId如下

 String gPlusId = request.queryParams("gplus_id");
Run Code Online (Sandbox Code Playgroud)

并且此请求应来自步骤6中的ajax调用,该调用仅发送authResult['code']请求,即使authResult没有参数gplus_id

如何以及从何gplus_id而来?!

java ajax google-app-engine oauth-2.0 google-api-java-client

18
推荐指数
1
解决办法
217
查看次数

如何从Credential对象获取用户ID令牌?

我一直在关注教程,将Google登录支持包含在我的桌面应用中.我正在使用的图书馆是这个.

一切正常,这是authorize()方法的实现:

public Credential authorize() throws IOException {
    // Load client secrets.
    InputStream in = GoogleLogin.class.getResourceAsStream("/google/client_secret.json");
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

    // Build flow and trigger user authorization request.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
            .setDataStoreFactory(DATA_STORE_FACTORY)
            .setAccessType("offline")
            .build();

    Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");

    System.out.println("Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
    return credential;
}
Run Code Online (Sandbox Code Playgroud)

但是,从一个Credential对象,我只能通过调用来检索访问令牌Credential.getAccessToken(),但我需要的是id token.如何在用户通过身份验证后从用户检索id_token?

java google-api-java-client google-oauth2

17
推荐指数
1
解决办法
1626
查看次数

在Java中使用OAuth 2.0和Google Spreadsheet API的示例是什么?

凡示例代码展示了如何使用Google Data Java Client Library其支持OAuth 2.0Google Spreadsheet API(现称Google Sheets API)?

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

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

HOWTO使用服务帐户JSON创建GoogleCredential

我正在使用Java SDK Android Publisher v2Oauth2 v2.一旦我创建了服务帐户,我就获得了一个Google Play Android Developer带有客户端ID,电子邮件,私钥等的服务帐户JSON .我试图环顾四周并找出如何创建凭据以便我使用AndoirdPublisher服务来获取信息我的Android应用程序的用户订阅,权利等,并将此信息存储在我们的后端服务器上.

我正在努力弄清楚如何解决这个问题.到目前为止,我见过的所有文档都没有帮助创建GoogleCredential使用下载的JSON.

例如,有这个文档,但它只提到P12文件,而不是JSON.如果可能,我想避免使用P12,因为我有多个客户端,我想将这个JSON保存在某种数据库中,然后用它来为每个客户端创建凭据.

只是为了澄清我正在尝试创建这里描述的GoogleCredential对象,

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.sqladmin.SQLAdminScopes;

// ...

String emailAddress = "123456789000-abc123def456@developer.gserviceaccount.com";
JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
GoogleCredential credential = new GoogleCredential.Builder()
    .setTransport(httpTransport)
    .setJsonFactory(JSON_FACTORY)
    .setServiceAccountId(emailAddress)
    .setServiceAccountPrivateKeyFromP12File(new File("MyProject.p12"))
    .setServiceAccountScopes(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN))
    .build();
Run Code Online (Sandbox Code Playgroud)

但是,不是像这样使用P12文件设置服务帐户setServiceAccountPrivateKeyFromP12File(),我想使用带有相同信息的JSON,并在创建服务帐户时生成.

android subscription google-api-java-client in-app-billing google-play-services

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

com.google.api.client.json.jackson.JacksonFactory; Google云端硬盘示例中缺少

我尝试运行quickstart-sample,这个依赖项:

<dependency>
      <groupId>com.google.apis</groupId>
      <artifactId>google-api-services-drive</artifactId>
<version>v2-rev78-1.15.0-rc</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

来自Drive wiki API页面

然而,当我尝试编译时,代码com.google.api.client.json.jackson.JacksonFactory;丢失了.
要验证这一点,您只需要执行第2步和第3步!我在哪里可以找到这个类或如何在样本中替换它?

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

14
推荐指数
2
解决办法
2万
查看次数

适用于OCR的Google Drive SDK

我刚刚在链接上设置了适用于Android的quickstart google drive sdk应用程序

我正在尝试上传图像,然后对它们进行OCR.Android快速入门上的示例应用程序运行正常,但是当我尝试将OCR的布尔值设置为true时,我得到以下IOException:

07-29 03:33:01.172: D/OCR_SERVICE(22602): Error 2: 400 Bad Request
07-29 03:33:01.172: D/OCR_SERVICE(22602): {
07-29 03:33:01.172: D/OCR_SERVICE(22602):   "code": 400,
07-29 03:33:01.172: D/OCR_SERVICE(22602):   "errors": [
07-29 03:33:01.172: D/OCR_SERVICE(22602):     {
07-29 03:33:01.172: D/OCR_SERVICE(22602):       "domain": "global",
07-29 03:33:01.172: D/OCR_SERVICE(22602):       "message": "Bad Request",
07-29 03:33:01.172: D/OCR_SERVICE(22602):       "reason": "badRequest"
07-29 03:33:01.172: D/OCR_SERVICE(22602):     }
07-29 03:33:01.172: D/OCR_SERVICE(22602):   ],
07-29 03:33:01.172: D/OCR_SERVICE(22602):   "message": "Bad Request"
07-29 03:33:01.172: D/OCR_SERVICE(22602): }
Run Code Online (Sandbox Code Playgroud)

有趣的是我能够做OCR大约2次,然后我可能已经修改了源或其他东西,现在它不起作用.但是我记得我从快速入门应用程序中做出的唯一改变是更改此行:File file = service.files().insert(body, mediaContent).execute();到以下内容:

File file = service.files().insert(body, mediaContent).setOcr(true).execute();
Run Code Online (Sandbox Code Playgroud)

这是我的代码: …

ocr android ioexception google-api-java-client google-drive-api

14
推荐指数
1
解决办法
1730
查看次数