Мне нужно иметь возможность отправлять свое GPS-местоположение на сервер каждый раз, когда я получаю извещение без уведомления от Firebase.Таймер отправки уведомления в настоящее время установлен на каждые 10 минут.Когда телефон заряжается, это не проблема, но когда он простаивает и приложение находится в фоновом режиме, onMessageReceived от FirebaseMessagingService вызывается только каждые несколько часов.Это наводит меня на мысль, что это как-то связано с новыми правилами управления питанием для Android 9.0.Но чтобы мое приложение работало, мне нужно каждые 10 минут отправлять свое местоположение.Не просто иногда.
Я пытался установить оптимизацию батареи на «неоптимизирован» с помощью Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
Это, похоже, не имеет никакого эффекта.
Я также попытался установить высокий приоритет уведомления Firebase.Это работает, но только для 10 сообщений в день, что означает, что это не решение для моего приложения. (Источник: ограничения управления питанием)
Я сейчас пытаюсь всегда держать приложение в «активной» корзине, открывая службу foregroundService.Это должно гарантировать, что приложение никогда не будет в каком-либо другом ведре, где уведомления могут быть отложены на несколько часов.
Приложение находится в активном сегменте, если пользователь в данный момент использует приложение, например:
- Приложение запустило действие
- приложение запускает службу переднего плана
- Приложение имеет адаптер синхронизации, связанный с поставщиком содержимого, используемым приложением переднего плана
- Пользователь нажимает на уведомление из приложения
Если приложение находится в активном сегменте, система не накладывает никаких ограничений на задания, сигналы тревоги или сообщения FCM.
(Источник: Power Buckets Android9) .
Это не похоже на решение, которое я должен хотеть, так как это может быть не самой лучшей практикой.И, похоже, все равно не работает.
Это моя функция onMessageReceived:
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(TAG, "From: " + remoteMessage.getFrom());
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
Map<String, String> params = remoteMessage.getData();
JSONObject object = new JSONObject(params);
PushNotificationManager.getInstance().handlePushNotification(object, getApplicationContext());
}
}
Сейчас я не понимаю, почему сообщения Firebase не входят в функцию onMessageReceived.