我正在使用Firebase Cloud Messaging将数据消息传递到我正在开发的应用程序中。根据FCM文档,在应用程序处于前台时:
客户端应用程序在onMessageReceived()中接收数据消息,并可以相应地处理键值对。
它可以正常工作。当应用程序处于后台时,行为不同:
数据有效负载可以在用于启动活动的Intent中检索。
但这似乎并不起作用。我在通知JSON中使用了“click_action”参数,其中指定了Android清单中“activity”标记内使用的意图过滤器的名称,我想要打开该标记。例如,我的通知可能是:
{
"to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
"notification" : {
"body" : "This is a test",
"title" : "Test",
"click_action" : "com.test.click"
},
"data" : {
"key" : "data"
}
}
我的清单文件中在“MainActivity”中添加了这个意图过滤器:
And my manifest has this intent-filter, in the "MainActivity":
<intent-filter>
<action android:name="com.test.click" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
当我的应用程序在后台时,如果我启动通知,则一切似乎都正常工作:我单击通知,正确的活动将显示,并且数据键位于接收到的意图的“extras”中。
问题出现在我的应用程序关闭时:当我点击通知时,应用程序正确地启动并打开具有“com.test.click”意图过滤器的活动,但是如果我尝试发送另一个通知,则点击它时什么也不会发生,并且后台通知不再起作用,直到我重新启动应用程序。更明确地说:通知在我的应用程序前台或后台正常工作。如果我的应用程序关闭,则第一个通知将被正确处理,但是每个其他后台通知都不再起作用,直到我重新启动应用程序:如果我点击通知,则我的应用程序显示上次观看的最后一个活动,就好像我从“最近使用的应用程序”菜单中选择了该应用程序。如果我关闭并重新启动应用程序,则通知会恢复正常工作。
这是Android中数据消息的错误还是FCM的问题?有没有方法解决此问题?
我正在使用 Nexus 5 API 23 进行测试。