火力地堡服务生命周期
当火力地堡服务收到RemoteMessage
,和应用程序之前已经通过滑开杀了,我必须做什么,以使应用程序仍然会处理消息?火力地堡服务生命周期
这是一个数据报文,所以行为是过程,而不是付诸GUI的通知。
编辑以下解决方案适用于旧的谷歌播放服务(即11.0.2),像(11.6.0)这样的新版本将handleIntent
声明为final
,这使得此解决方案不再有效。
您必须覆盖handleIntent(Intent)
不调用它super.handleIntent(Intent)
。这种方法的问题是没有创建RemoteMessage
对象。我亲手创造我自己是这样的:
RemoteMessage message = new RemoteMessage.Builder(FirebaseInstanceId.getInstance().getToken())
并将数据传递到地图,然后onMessageReceived(RemoteMessage)
自己(这显然是可选的,你不需要该对象的话)。
这显然不是最好的方法,但它是我发现的唯一途径,让我打造的通知对我自己或者完全忽略它。
你可以注册一个后台守护进程服务,但我认为它会被终止过,当用户滑开,所以基本上是没有办法做到这一点,你应该处理这似乎是一个例外。
你可以把任务的onDestroy
方法在背景异步服务来处理消息。
你的应用程序的异步服务将始终在后台通过听BroadcastReceiver
运行,然后,一旦任务完成,你可以finish
活动,以终止该应用
将其擦除并立即发送FireBase通知后,它甚至不会进入'onMessageReceived(RemoteMessage remoteMessage)'方法。即使在刷完它后,我如何使它调用该方法? – user3635998
如果您将FireBase通知服务注册为在后台运行的异步任务(使用'BroadcastReceiver'),并从 火灾基站发出推送通知,它应该被触发并开始处理消息。 参考文献见GCM,推子弹等... – vikytech
组为'
当firebase消息到达时,android操作系统(也许是google服务)广播MESSAGING_EVENT意图。
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
您可以实现广播接收器有意向过滤器上面的意图,并在它的的onReceive()方法过滤,你适当的服务应启动(如果没有运行)。只有广播接收器才能够响应,而不管其应用程序的运行状态如何。
设置为'
你的应用程序将在onMessageReceived方法接收数据的消息,即使应用有 –
@UsmanRana事实并非如此,如果应用程序是在后台火力地堡自己处理通知,并跳过onMessageReceived – mhenryk
@mhenryk请仔细阅读问题,他是使用在这两种情况下都会调用“数据消息”并为此onMessageReceived调用 –