FCM在Android Doze模式下提供推送通知,但不进行网络呼叫
我已经开发了一个设备管理应用程序,将策略应用于设备,如限制等 我的系统如何工作 webapp通过FCM向设备发送推送通知。我曾经使用GCM和wakelock(后者工作得很好)。当推送通知到达设备时,接收推送的firebase类调用IntentService。然后,此IntentService将处理消息(如“MOBILEDATA__ON”)以及与该消息相关的任何数据。一旦消息被处理完毕,例如MOBILEDATA_ON,服务就会执行代码,打开移动数据,然后调用一个webservice,将状态转发回webapp 我选择IntentService是因为它是异步的,并且能够进行http调用来中继状态,而无需额外的异步代码 当设备处于唤醒状态时,所有这些都可以正常工作,即使应用程序位于后台 问题 如果设备拔下插头并保持一段时间不动,它将进入打瞌睡/待机模式。(这是一款安卓6设备)。这是正常行为,但是,如果我向设备发送推送,设备确实会接收推送并执行正确的代码以应用功能,但不幸的是,没有执行中继设备新状态的webcall 因此,例如,如果我的设备上的蓝牙已关闭且处于睡眠模式,我可以发送一个推送,该推送成功地打开了蓝牙,但webapp从未收到更新状态 在发送推送时,我已将FCM中的优先级设置为高,这就是为什么我在设备处于睡眠状态时接收推送的原因 “我的应用程序是一个设备管理应用程序,”文档说 该应用程序是活动的设备管理应用程序(例如,设备策略) 控制器)。虽然它们通常在后台运行,但设备 管理员应用程序从不进入应用程序待机状态,因为它们必须保持可用状态 随时从服务器接收策略 有人能告诉我为什么在打瞌睡/待机模式下网络调用没有执行并将状态发送回服务器吗 [第1版] 我使用以下代码创建了一个wakelock。起初,我在IntentService中获得了锁,执行了功能,然后在同一个服务中释放了它。这在大多数情况下都很好,但我的一些功能包括通过另一个名为跟踪服务的IntentService查找设备位置 问题是,GPS可能需要20秒才能找到一个锁,在这个时候,最初的Intentservice已经完成,设备又回到了睡眠状态 为了解决这个问题,我在application对象中创建了两个方法来获取和释放锁。这样,如果推送是一个位置,我可以在初始服务(通常会释放它)中进行检查,查看推送是否是一个位置,而不是在那里释放它。相反,当找到GPS时,跟踪服务可以调用应用程序对象以释放 部分唤醒锁似乎无法按预期工作,因此我发现以下代码使用了完全唤醒锁。不过,这是不可取的。是使用完全唤醒锁定的替代方案吗FCM在Android Doze模式下提供推送通知,但不进行网络呼叫,android,http,firebase-cloud-messaging,Android,Http,Firebase Cloud Messaging,我已经开发了一个设备管理应用程序,将策略应用于设备,如限制等 我的系统如何工作 webapp通过FCM向设备发送推送通知。我曾经使用GCM和wakelock(后者工作得很好)。当推送通知到达设备时,接收推送的firebase类调用IntentService。然后,此IntentService将处理消息(如“MOBILEDATA__ON”)以及与该消息相关的任何数据。一旦消息被处理完毕,例如MOBILEDATA_ON,服务就会执行代码,打开移动数据,然后调用一个webservice,将状态转发回w
public void acquireWakeLock(){
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,
"MyWakelockTag");
wakeLock.acquire();
Log.e(TAG, "just acquired wakelock");
}
public void releaseWakeLock(){
wakeLock.release();
Log.e(TAG, "just released wakelock");
}
谢谢
马特您的intentservice是否有唤醒锁?否则,在发送http请求之前,设备可能会重新进入睡眠状态。@Okas No,在使用GCM时通常是这样,但对于firebase,我认为它给了您10秒的窗口。我知道这个窗口是为了获得更多的wakelocks,但我认为这已经足够了。我应该在intentService中使用wakelock吗?@Okas我可以用startWakefulService而不是startService启动intentService吗?为什么不尝试一下,让我们都知道你发现了什么。@Okas好的,我找到了以下链接。我今晚晚些时候再试试。