火力地堡服务生命周期

问题描述:

当火力地堡服务收到RemoteMessage,和应用程序之前已经通过滑开杀了,我必须做什么,以使应用程序仍然会处理消息?火力地堡服务生命周期

这是一个数据报文,所以行为是过程,而不是付诸GUI的通知。

+0

你的应用程序将在onMessageReceived方法接收数据的消息,即使应用有 –

+0

@UsmanRana事实并非如此,如果应用程序是在后台火力地堡自己处理通知,并跳过onMessageReceived – mhenryk

+0

@mhenryk请仔细阅读问题,他是使用在这两种情况下都会调用“数据消息”并为此onMessageReceived调用 –

编辑以下解决方案适用于旧的谷歌播放服务(即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活动,以终止该应用

+0

将其擦除并立即发送FireBase通知后,它甚至不会进入'onMessageReceived(RemoteMessage remoteMessage)'方法。即使在刷完它后,我如何使它调用该方法? – user3635998

+0

如果您将FireBase通知服务注册为在后台运行的异步任务(使用'BroadcastReceiver'),并从 火灾基站发出推送通知,它应该被触发并开始处理消息。 参考文献见GCM,推子弹等... – vikytech

+0

组为' intent-filter>'但我没有得到通知如果刷掉 – user3635998

当firebase消息到达时,android操作系统(也许是google服务)广播MESSAGING_EVENT意图。

<action android:name="com.google.firebase.MESSAGING_EVENT"/> 

您可以实现广播接收器有意向过滤器上面的意图,并在它的的onReceive()方法过滤,你适当的服务应启动(如果没有运行)。只有广播接收器才能够响应,而不管其应用程序的运行状态如何。

+0

设置为' intent-filter>'但我没有收到通知,如果刷掉。 – user3635998