标签: google-api-java-client

使用HttpRequest.execute()的异常:无效使用SingleClientConnManager:仍然分配了连接

我正在使用google-api-client-java 1.2.1-alpha来执行POST请求,并在执行()HttpRequest时获得以下stacktrace.

它在我捕获并忽略从先前的POST到同一URL的403错误后立即发生,并重新使用传输进行后续请求.(它在一个循环中插入多个条目到同一个ATOM提要).

在403之后,我应该做些什么来"清理"?

Exception in thread "main" java.lang.IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated.
Make sure to release the connection before allocating another one.
    at org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:199)
    at org.apache.http.impl.conn.SingleClientConnManager$1.getConnection(SingleClientConnManager.java:173)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:390)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
    at com.google.api.client.apache.ApacheHttpRequest.execute(ApacheHttpRequest.java:47)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:207)
    at au.com.machaira.pss.gape.RedirectHandler.execute(RedirectHandler.java:38)
    at au.com.machaira.pss.gape.ss.model.records.TableEntry.executeModification(TableEntry.java:81)
Run Code Online (Sandbox Code Playgroud)

为什么我下面的代码会尝试获取连接?

java httpclient google-api-java-client

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

OAuth2和Google API:访问令牌到期时间?

我们有一个独立的Java应用程序(请参阅"安装应用程序":https://developers.google.com/accounts/docs/OAuth2)的定期运行,并使用谷歌API(从客户数据库/ LDAP更新一些信息/ ...) .

要访问Google API,我们会在配置文件中存储用户名和密码,这是一种安全风险,客户不喜欢这样做.因此,我们希望使用OAuth2长期访问令牌.

Google OAuth2访问令牌的默认到期时间是什么时候?

由于我们在应用程序中只有访问令牌,因此当访问令牌到期时,应用程序本身无法刷新它...

我个人认为在这种情况下OAuth2的实现不会带来任何重大好处,但让我们关注主要问题 - 默认的到期时间.

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

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

Google Developer Console中的“我们检测到您的应用程序正在使用旧版本的Google Play开发者API”警告是什么?

我们没有明确使用任何Google Play开发者API,但是我们收到以下警告:

在此处输入图片说明

这与https://developer.android.com/google/play/billing/billing_library_releases_notes相关吗?

我们当前正在使用Google Play计费库1.2.2版本(2019-03-07)

我们不打算迁移Google Play Billing Library 2.0.1版本(2019-06-06),因为它将花费很多时间,而且工作量很大。

购买必须在三天内确认

但这只是我的猜测-Google Play结算库与Google Play开发者API相关。它们可能彼此相关,也可能彼此不相关。

“我们检测到您的应用正在使用旧版本的Google Play开发者API”是什么意思?

以下是我们完整的依赖项。知道导致此警告的原因是什么?

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])


    implementation 'com.android.billingclient:billing:1.2.2'


    implementation 'androidx.multidex:multidex:2.0.1'


    def lifecycle_version = '2.0.0-beta01'
    // ViewModel and LiveData
    implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"


    // alternately - if using Java8, use the following instead of compiler
    implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"


    def room_version = '2.1.0'
    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"

    def work_version = "2.1.0"
    implementation "androidx.work:work-runtime:$work_version"

    // https://github.com/yccheok/SmoothProgressBar
    implementation 'com.github.castorflex.smoothprogressbar:library:1.1.0'

    // For Google …
Run Code Online (Sandbox Code Playgroud)

android google-api-java-client google-developers-console

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

错误:"用于调用Google Play Developer API的项目ID尚未在Google Play开发者控制台中关联."

使用服务帐户访问Google Play Developer API时出现以下错误:

用于调用Google Play Developer API的项目ID尚未在Google Play开发者控制台中进行链接.

服务帐户电子邮件和.p12文件是使用服务帐户选项生成的APIs&Auth -> Credentials.Google Play Developer API中的应用程序使用google文档中提到的项目ID链接到项目.

但是,当我尝试使用Publishing API时,我仍然收到此错误.我正在寻找这个错误的解决方案以及使用Google Publishing API为Java客户端使用Google Play Developer API发布APK的一步一步的流程.我在用androidpublisher_v2_public.

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

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

访问Google API - GoogleAccountCredential.usingOAuth2与GoogleAuthUtil.getToken()

最近,我一直在使用Android上的Google API,特别是Google Analytics,AdSense和Tasks API.

我见过Google提供的一些示例,他们使用此语句获取GoogleAccountCredential对象

https://code.google.com/p/google-api-java-client/source/browse/tasks-android-sample/src/main/java/com/google/api/services/samples/tasks/android/ TasksSample.java?repo=samples

credential = GoogleAccountCredential.usingOAuth2(this, Collections.singleton(TasksScopes.TASKS));

但是,如果我查看以下文档:
http://developer.android.com/google/auth/http-auth.html
http://developer.android.com/google/play-services/auth.html

他们都提到了下面用于获取令牌的方法:
token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope);

我很困惑在哪种场景中使用哪一个以及为什么.我一直在使用Method no.1成功而无需在首选项中保留令牌(我猜这是由GoogleAccountCredential自动完成的)

  1. 任何人都可以告诉我为什么有人会使用第一种方法而不是第二种方法?

  2. 如何在第一种方法中访问身份验证令牌?

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

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

将Google API Javascript客户端库加载到Chrome扩展程序中

我一直在尝试与Chrome扩展程序结合谷歌api javascript客户端库一段时间了,但似乎Chrome扩展程序有一个可怕的冷脚情况.脚本的链接是

https://apis.google.com/js/client.js

下载文件很麻烦,因为脚本实际上加载了其他脚本.我已经尝试将它包含在清单中

manifest.json(摘录)

"background": {
  "scripts": [
    "background.js",
    "https://apis.google.com/js/client.js?onload=callbackFunction"
  ]
},
Run Code Online (Sandbox Code Playgroud)

但然后扩展不加载.我也尝试将脚本注入后台html

background.js(摘录)

 var body = document.getElementsByTagName('body')[0];
 var script = document.createElement('script');
 script.type = 'text/javascript';
 script.src = "https://apis.google.com/js/client.js?onload=callbackFunction";

 body.appendChild(script);
Run Code Online (Sandbox Code Playgroud)

但是chrome调试器给了我

Refused to load the script 'https://apis.google.com/js/client.js' because it violates the following Content Security Policy directive: "script-src 'self' chrome-extension-resource:".

任何想法,还是他们命中注定要分开?

编辑:请注意,如果要使用回调函数,必须将"?onload = myCallbackFunction"添加到脚本URL.谢谢伊利亚.更多信息在这里

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

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

Google Drive API无法与ProGuard(NPE)配合使用

目前,我有经验,使用Google Drive API的一段代码在没有引入ProGuard的情况下运行正常.

但是,在引入ProGuard之后,我遇到了以下运行时错误.

    at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.NullPointerException
    at com.google.api.client.util.Types.getActualParameterAtPosition(Types.java:329)
    at com.google.api.client.util.Types.getIterableParameter(Types.java:309)
    at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:546)
    at com.google.api.client.json.JsonParser.parse(JsonParser.java:350)
    at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:586)
    at com.google.api.client.json.JsonParser.parse(JsonParser.java:289)
    at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:76)
    at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:71)
    at com.google.api.client.http.HttpResponse.parseAs(HttpResponse.java:491)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:456)
    at com.jstock.c.b.a(CloudFile.java:136)
Run Code Online (Sandbox Code Playgroud)

请注意,崩溃发生在我的代码中(如果我使用mapping.txt进行回溯,则为com.jstock.cba)

// request is Files.List
FileList files = request.execute();
Run Code Online (Sandbox Code Playgroud)

在我的项目中,我认为有以下两个关键指令,能够防止崩溃发生:我告诉ProGuard永远不要触及jackson和Google库.

-keep class org.codehaus.** { *; }
-keep class com.google.** { *; }
-keep interface org.codehaus.** { *; }
-keep interface com.google.** { *; }
Run Code Online (Sandbox Code Playgroud)

但这不起作用.NPE仍然发生在Types.java上

请注意,我还有另一种尝试是,我认为混淆过程会导致NPE发生.因此,我尝试使用它来禁用它-dontobfuscate.但这一次,我将无法生成APK文件,并得到一个流行的错误消息:转换为Dalvik格式失败,错误1

以下是在Google Drive API中导致NPE的proguard配置.

-optimizationpasses 1 …
Run Code Online (Sandbox Code Playgroud)

android google-api proguard google-api-java-client google-drive-api

26
推荐指数
2
解决办法
5679
查看次数

javax.net.ssl.SSLHandshakeException:在握手时远程主机关闭连接,同时在bigquery中插入行

嗨,我正在研究我已集成bigquery的android应用程序.我看到有时我们在将数据插入大查询表时会遇到很多SSL异常.我不知道如何处理这个问题.请帮助究竟是什么原因导致这个问题.这是相同的线程,但在进行流式插入api调用时没有回答Bigquery SSL错误

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:946) ~[na:1.7.0_51]
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) ~[na:1.7.0_51]
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) ~[na:1.7.0_51]
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323) ~[na:1.7.0_51]
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563) ~[na:1.7.0_51]
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) ~[na:1.7.0_51]
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1091) ~[na:1.7.0_51]
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250) ~[na:1.7.0_51]
    at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:77) ~[google-http-client-1.19.0.jar:1.19.0]
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:965) ~[google-http-client-1.19.0.jar:1.19.0]
    at com.google.api.client.googleapis.batch.BatchRequest.execute(BatchRequest.java:241) ~[google-api-client-1.19.1.jar:1.19.1]
    at com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$2$$anonfun$4.apply(InsertApiActor.scala:131) ~[analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
    at com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$2$$anonfun$4.apply(InsertApiActor.scala:118) ~[analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
    at com.livestream.analytics.common.store.bigquery.api.BigQueryApi$.withSyncClient(BigQueryApi.scala:71) ~[analytics-common_2.11-1.0.0.jar:1.0.0]
    at com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$2.apply$mcV$sp(InsertApiActor.scala:118) ~[analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
    at com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$2.apply(InsertApiActor.scala:115) ~[analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
    at com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$2.apply(InsertApiActor.scala:115) ~[analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
    at com.livestream.analytics.common.monitoring.Timer.time(Timer.scala:15) ~[analytics-common_2.11-1.0.0.jar:1.0.0]
    at com.livestream.analytics.datastorage.worker.InsertApiActor.com$livestream$analytics$datastorage$worker$InsertApiActor$$insertDataRowsToBigQueryTable(InsertApiActor.scala:115) [analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
    at com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$receive$1.applyOrElse(InsertApiActor.scala:80) [analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
    at akka.actor.Actor$class.aroundReceive(Actor.scala:465) [akka-actor_2.11-2.3.9.jar:na]
    at com.livestream.analytics.datastorage.worker.InsertApiActor.aroundReceive(InsertApiActor.scala:54) [analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516) …
Run Code Online (Sandbox Code Playgroud)

ssl android google-api-java-client google-api-client google-bigquery

25
推荐指数
1
解决办法
3060
查看次数

Android:GoogleIdTokenVerifier.Builder中的transport和jsonFactory是什么?

在吹码中,什么是transportjsonFactory?(我不明白)

https://developers.google.com/identity/sign-in/android/backend-auth#using-a-google-api-client-library

import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;

...

GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport /**Here**/, jsonFactory /**Here**/)
.setAudience(Arrays.asList(CLIENT_ID))
// If you retrieved the token on Android using the Play Services 8.3 API or newer, set
// the issuer to "https://accounts.google.com". Otherwise, set the issuer to 
// "accounts.google.com". If you need to verify tokens from multiple sources, build
// a GoogleIdTokenVerifier for each issuer and try them both.
.setIssuer("https://accounts.google.com")
.build();

// (Receive idTokenString by HTTPS POST)

GoogleIdToken …
Run Code Online (Sandbox Code Playgroud)

android authorization google-api-java-client android-studio google-signin

23
推荐指数
3
解决办法
5687
查看次数

将图像从Android上传到GCS

我正在尝试将Android上的图片直接上传到Google云存储.但API似乎不起作用.他们有一些与App引擎绑定的Java示例.我没有看到任何被证明适用于Android的示例.

在Android上,我尝试使用json api上传图片.我能够上传图像对象,但它似乎已损坏.此外,生成身份验证令牌似乎也很棘手.

我现在很震惊.这个世界上有没有人尝试使用Java客户端或Json API从Android上传图像/视频并成功了?请有人指出我正确的方向.来自Google的这款Storage api的体验非常令人失望.如果有人这样做,请分享您的经验.下面是我尝试使用GCS的JSON API时从Android尝试的代码.

private static String uploadFile(RichMedia media) {
    DefaultHttpClient client = new DefaultHttpClient();
    Bitmap bitmap = BitmapUtils.getBitmap(media.getLocalUrl());
    HttpPost post = new HttpPost(GCS_ROOT + media.getLocalUrl() + "_" + System.currentTimeMillis());
    if(media.getType() == RichMedia.RichMediaType.PICTURE) {
        post.setHeader("Content-Type", "image/jpeg");
    } else {
        post.setHeader("Content-Type", "video/mp4");
    }
    post.setHeader("Authorization", "AIzaSyCzdmCMwiMzl6LD7R2obF0xSgnnx5rEfeI");
    //post.setHeader("Content-Length", String.valueOf(bitmap.getByteCount()));
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
    byte[] byteArray = stream.toByteArray();

    try {
        post.setEntity(new StringEntity(new Gson().toJson(byteArray).toString()));
        HttpResponse response = client.execute(post);
        BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        String eachLine = null; …
Run Code Online (Sandbox Code Playgroud)

android google-api-java-client google-cloud-storage

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