我很尴尬,我只是失败了一个示例代码,但我会责怪它已经晚了...
我已经复制并粘贴了以下内容: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) 我使用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
首先,让我解释一下我要做的事情,因为这是一个两部分问题.
我建立在内部通过的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
我尝试刷新访问令牌时收到错误:
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)
有什么不对的吗?
我在登录尝试,以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
我一直在关注本教程,将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?
凡示例代码展示了如何使用Google Data Java Client Library其支持OAuth 2.0与Google Spreadsheet API(现称Google Sheets API)?
java oauth google-spreadsheet-api google-api-java-client google-sheets-api
我正在使用Java SDK Android Publisher v2和Oauth2 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
我尝试运行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)
然而,当我尝试编译时,代码com.google.api.client.json.jackson.JacksonFactory;丢失了.
要验证这一点,您只需要执行第2步和第3步!我在哪里可以找到这个类或如何在样本中替换它?
我刚刚在此链接上设置了适用于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
java ×5
oauth-2.0 ×3
android ×2
ajax ×1
gmail ×1
google-api ×1
google-oauth ×1
ioexception ×1
javascript ×1
oauth ×1
ocr ×1
subscription ×1