SocketTimeoutException при загрузке файла AAB с помощью API публикации Google - PullRequest
1 голос
/ 17 июня 2019

Я пытаюсь загрузить файл AAB с помощью API публикации Google.Ниже приводится функция публикации.

public void publish() throws Exception {
    String packageName = "myapp.package.name";
    String applicationName = "myApp";
    Path jsonKey = Paths.get("directory path", "secret.json");
    GoogleCredential cred = GoogleCredential.fromStream(new FileInputStream(jsonKey.toFile()));
    cred = cred.createScoped(Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER));
    com.google.api.services.androidpublisher.AndroidPublisher.Builder ab = new com.google.api.services.androidpublisher.AndroidPublisher.Builder(cred.getTransport(), cred.getJsonFactory(), cred);
    com.google.api.services.androidpublisher.AndroidPublisher publisher = ab.setApplicationName(applicationName).build();
    AppEdit edit = publisher.edits().insert(packageName, null).execute();
    final String editId = edit.getId();
    Path file = Paths.get("directory", "myApp.aab");
    AbstractInputStreamContent aabContent = new FileContent("application/octet-stream", file.toFile());
    Bundle bundle = publisher.edits().bundles().upload(packageName, editId, aabContent).execute();
}

Я получаю следующее исключение Тайм-аут чтения в последней строке:

java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.net.SocketInputStream.read(SocketInputStream.java:171)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
    at sun.security.ssl.InputRecord.read(InputRecord.java:503)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983)
    at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:940)
    at sun.security.ssl.AppInputStream.read(AppInputStream.java:105)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:735)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:678)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1587)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:347)
    at com.google.api.client.http.javanet.NetHttpResponse.<init>(NetHttpResponse.java:36)
    at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:144)
    at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:79)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:995)
    at com.google.api.client.googleapis.media.MediaHttpUploader.executeCurrentRequestWithoutGZip(MediaHttpUploader.java:548)
    at com.google.api.client.googleapis.media.MediaHttpUploader.resumableUpload(MediaHttpUploader.java:420)
    at com.google.api.client.googleapis.media.MediaHttpUploader.upload(MediaHttpUploader.java:336)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:524)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:448)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:565)

Образцы в https://github.com/googlesamples/android-play-publisher-api не предоставляют никаких образцов для загрузки файла AAB.Есть идеи о том, что мне не хватает?

1 Ответ

0 голосов
/ 03 июля 2019

java.net.SocketTimeoutException: Read timed out происходит при превышении времени ожидания HTTP-запроса. Текущее время ожидания по умолчанию установлено в клиенте Google Http. API равняется 20 секундам.

Google рекомендует увеличить время ожидания HTTP-запроса https://developers.google.com/android-publisher/api-ref/edits/bundles до 2 минут для загрузки aab-файла.

Вот как это можно сделать:

Переопределить initialize метод HttpRequestInitializer, создав следующий метод:

HttpRequestInitializer setHttpTimeout(final HttpRequestInitializer requestInitializer) {
    return httpRequest -> {
        requestInitializer.initialize(httpRequest);
        httpRequest.setConnectTimeout(2 * 60000);  // 2 minutes connect timeout
        httpRequest.setReadTimeout(2 * 60000);  // 2 minutes read timeout
    };
}

Вызовите метод setTimeout при создании экземпляра AndroidPublisher.Builder следующим образом:

com.google.api.services.androidpublisher.AndroidPublisher.Builder ab = new com.google.api.services.androidpublisher.AndroidPublisher.Builder(cred.getTransport(), cred.getJsonFactory(), setHttpTimeout(cred));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...