Я использую Retrofit2 с OkHttp. С ним все работает нормально, кроме одного
— сетевого вызова, когда приложение закрыто или находится в фоновом режиме.'
Работает
Каждый раз, когда приходит уведомление Firebase, я делаю сетевой вызов для получения данных, связанных с
этим уведомлением, а затем показываю уведомление.
Сценарий
Рассмотрим приложение Android, которое работает в фоновом режиме или закрыто и пришло уведомление.
Что происходит
Уведомление доставлено успешно, я его вижу. Но когда я пытаюсь позвонить, он
всегда выдает ошибку «java.net.SocketTimeoutException». Не удалось подключиться к
*******, и я не вижу никаких вызовов, поступающих на сервер.
Мой класс Retrofit
@Singleton
@Provides
static Retrofit provideRetrofitInstance(){
OkHttpClient.Builder client = new OkHttpClient.Builder();
client.connectTimeout(300, TimeUnit.SECONDS)
.callTimeout(300, TimeUnit.SECONDS)
.writeTimeout(300, TimeUnit.SECONDS)
.readTimeout(300, TimeUnit.SECONDS)
.retryOnConnectionFailure(true);
return new Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(client.build())
.build();
}
Класс «Мой диспетчер работ»
@NonNull
@Override
public Result doWork() {
String encodedString = getInputData().getString(Constants.MODEL);
// Starting foreground service
setForegroundAsync(createForegroundInfo());
//calling the api
}
Инициализировать диспетчер работ
NotificationModel model = new NotificationModel(
intent.getStringExtra(Constants.KEY_MSG_TITLE),
intent.getStringExtra(Constants.KEY_MSG_BODY),
intent.getStringExtra(Constants.KEY_TYPE),
intent.getStringExtra(Constants.KEY_NOTIFCATION_ID),
intent.getStringExtra(Constants.KEY_SHOW),
intent.getStringExtra(Constants.KEY_NOTIFICATION_TYPE));
String encodedModel = Helper.serializeToJson(model);
Data createGroup = new Data.Builder()
.putString(Constants.MODEL , encodedModel)
.build();
uploadWorkRequest = new OneTimeWorkRequest.Builder(AlertWorker.class)
.setInputData(createGroup)
.build();
WorkManager.getInstance().enqueue(uploadWorkRequest);
Разрешения в манифесте:
Подробнее здесь: https://stackoverflow.com/questions/608 ... und-closed
Модернизация – не вызывает вызов API, когда приложение находится в фоновом режиме/закрыто ⇐ Android
Форум для тех, кто программирует под Android
1769600177
Anonymous
Я использую Retrofit2 с OkHttp. С ним все работает нормально, кроме одного
— сетевого вызова, когда приложение закрыто или находится в фоновом режиме.'
[b]Работает[/b]
Каждый раз, когда приходит уведомление Firebase, я делаю сетевой вызов для получения данных, связанных с
этим уведомлением, а затем показываю уведомление.
[b]Сценарий[/b]
Рассмотрим приложение Android, которое работает в фоновом режиме или закрыто и пришло уведомление.
[b]Что происходит[/b]
Уведомление доставлено успешно, я его вижу. Но когда я пытаюсь позвонить, он
всегда выдает ошибку «java.net.SocketTimeoutException». Не удалось подключиться к
*******, и я не вижу никаких вызовов, поступающих на сервер.
Мой класс Retrofit
@Singleton
@Provides
static Retrofit provideRetrofitInstance(){
OkHttpClient.Builder client = new OkHttpClient.Builder();
client.connectTimeout(300, TimeUnit.SECONDS)
.callTimeout(300, TimeUnit.SECONDS)
.writeTimeout(300, TimeUnit.SECONDS)
.readTimeout(300, TimeUnit.SECONDS)
.retryOnConnectionFailure(true);
return new Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.client(client.build())
.build();
}
Класс «Мой диспетчер работ»
@NonNull
@Override
public Result doWork() {
String encodedString = getInputData().getString(Constants.MODEL);
// Starting foreground service
setForegroundAsync(createForegroundInfo());
//calling the api
}
Инициализировать диспетчер работ
NotificationModel model = new NotificationModel(
intent.getStringExtra(Constants.KEY_MSG_TITLE),
intent.getStringExtra(Constants.KEY_MSG_BODY),
intent.getStringExtra(Constants.KEY_TYPE),
intent.getStringExtra(Constants.KEY_NOTIFCATION_ID),
intent.getStringExtra(Constants.KEY_SHOW),
intent.getStringExtra(Constants.KEY_NOTIFICATION_TYPE));
String encodedModel = Helper.serializeToJson(model);
Data createGroup = new Data.Builder()
.putString(Constants.MODEL , encodedModel)
.build();
uploadWorkRequest = new OneTimeWorkRequest.Builder(AlertWorker.class)
.setInputData(createGroup)
.build();
WorkManager.getInstance().enqueue(uploadWorkRequest);
Разрешения в манифесте:
Подробнее здесь: [url]https://stackoverflow.com/questions/60846377/retrofit-not-calling-api-call-when-app-is-in-background-closed[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия