我需要能够在每次从Firebase接收到静默推送通知时向服务器发送我的GPS位置。当前发送通知的计时器设置为每10分钟。当手机正在充电时,这不是问题,但当手机处于空闲状态且应用程序在后台运行时,FirebaseMessagingService中的onMessageReceived仅会被调用几个小时一次。这使我认为它与Android 9.0的新电源管理规则有关。但是为了使我的应用程序正常工作,我需要能够每10分钟发送我的位置,而不只是有时。
我尝试使用
我还尝试将Firebase通知的优先级设置为高。这确实有效,但每天仅限于10条消息,这意味着这对我的应用程序不是一个解决方案。 (来源:电源管理限制) 现在,我正在尝试通过打开一个前台服务来始终使应用程序处于“活动”存储桶中。这应该确保应用程序永远不会处于其他桶中,在那里通知可能会延迟几个小时。
如果用户正在使用应用程序,则该应用程序处于活动状态,例如:
- 应用程序已启动活动 - 应用程序正在运行前台服务 - 应用程序具有与前台应用程序使用的内容提供程序相关联的同步适配器 - 用户单击来自应用程序的通知
如果应用程序处于活动状态,则系统不会对应用程序的作业、闹钟或 FCM 消息施加任何限制。 (来源:Power Buckets Android9)。
我尝试使用
Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
将电池优化设置为“未优化”,但没有任何效果。我还尝试将Firebase通知的优先级设置为高。这确实有效,但每天仅限于10条消息,这意味着这对我的应用程序不是一个解决方案。 (来源:电源管理限制) 现在,我正在尝试通过打开一个前台服务来始终使应用程序处于“活动”存储桶中。这应该确保应用程序永远不会处于其他桶中,在那里通知可能会延迟几个小时。
如果用户正在使用应用程序,则该应用程序处于活动状态,例如:
- 应用程序已启动活动 - 应用程序正在运行前台服务 - 应用程序具有与前台应用程序使用的内容提供程序相关联的同步适配器 - 用户单击来自应用程序的通知
如果应用程序处于活动状态,则系统不会对应用程序的作业、闹钟或 FCM 消息施加任何限制。 (来源:Power Buckets Android9)。
@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函数。