Я использую Retrofit2 с OkHttp. Все работает нормально, кроме одной вещи - сетевой вызов, когда приложение закрыто или в фоновом режиме.
Рабочая
Всякий раз, когда приходит уведомление Firebase, я звоню по сети, чтобы получить данные, связанные с этим уведомлением, а затем показываю уведомление.
Сценарий
Рассмотрим приложение для Android, которое находится в фоновом режиме или закрыто, и пришло уведомление.
Что происходит
Уведомление приходит успешно, я его вижу. Но когда я пытаюсь сделать звонок, он всегда выдает ошибку Failed to connect to: *******
, и я не вижу никаких звонков на сервере.
Я видел подобные проблемы, но ни одна из них не могла мне помочь.
Вот список:
Некоторые предложили использовать connectionPool
, а некоторые - pingInterval
. Ничто не сработало в моем случае. Я не уверен, что это ошибка Retrofit или OkHttp.
Ниже приведен фрагмент кода, который я использую для вызова. Помните, что приложение отлично работает, когда приложение находится на переднем плане.
OkHttpClient.Builder builder = getHttpBuilder()
.connectionSpecs(getSpecList());
retrofit = new Retrofit.Builder()
.baseUrl(Session.getBaseUrl())
.client(builder.build())
.build();
Call<ResponseBody> call = retrofit
.create(Webservice.class)
.pullNotify(authToken, ivB64, digest, Session.getTimestamp());
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
listener.onNetworkCallSuccess(response);
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
listener.onNetworkCallFailure(t);
}
});
Всегда возвращается SocketTimeoutException
. Любая помощь / руководство приветствуется.