Firebase云消息能被后台应用检测到吗?

3
从Firebase网站的文档中: https://firebase.google.com/docs/cloud-messaging/downstream 当您的应用程序在后台运行时传递通知。在这种情况下,通知会传递到设备的系统托盘中。用户单击通知默认会打开应用程序启动器。
如果我的应用程序在后台接收到云消息时需要执行某些操作。
是否可以将通知接收到自定义广播接收器或服务类中,而不是传递到设备的系统托盘唯一的方法 是如https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support中所述设置“click_action”,以便当用户点击通知时,我的应用程序能够知道有云消息到达吗?
更新:
正如tyczj所提到的,以下curl命令示例完成了此工作:
curl --header "Authorization: key=$server_key" --header Content-Type:"application/json" https://fcm.googleapis.com/fcm/send -d "{\"to\": \"/topics/friendly_engage\",\"data\": {\"score\":\"123\"}}"

消息将出现在继承自FirebaseMessagingService的Service类中的“onMessageReceived”回调函数中。


请查看此答案!https://dev59.com/JVoU5IYBdhLWcg3wM08H#37845174 - Antonio
2个回答

7

如果您希望在应用程序中收到推送而不显示通知,则应从推送有效负载中删除notification标记,并将其替换为data标记。

了解有关有效负载如何工作的更多信息,请访问此处


嗨,这个能够应用于Firebase通知而无需服务器端代码吗?如果是的话,你能提供一些在Android Studio上实现它的代码吗?非常感谢你。 - Minion
推送消息只能从服务器发送。 - tyczj
那么,如果应用程序在后台(仅来自Firebase通知)中,就没有接收通知的选项,对吗?是否有任何方法可以至少更改图标?目前它会自动使用应用程序图标。 - Minion
我不明白你的意思,你是说无论在应用程序的生命周期(前台/后台)的任何时刻都可以接收到推送消息? - tyczj
你真是太棒了,亲爱的!@tyczj - Ahmad Vatani
显示剩余2条评论

4

是否可以在自定义的BroadcastReceiver或Service类中接收通知,而不是将其发送到设备的系统托盘?

可以的,不要从Firebase控制台发送推送消息,使用API curl请求发送。

HTTP POST请求

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{ "data": {
    "score": "5x1",
    "time": "15:10"
  },
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
}

即使您的应用程序在后台、被杀死或正在运行,上述推送消息都将在onMessageReceived()方法中接收到。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接