应用程序可以在后台检测firebase云消息吗?

时间:2016-05-20 11:15:31

标签: android push-notification firebase firebase-cloud-messaging

从Firebase网站上的文档: https://firebase.google.com/docs/cloud-messaging/downstream

当您的应用在后台时发送的通知。在这种情况下,通知将传递到设备的系统托盘。用户点击通知会默认打开应用启动器。

如果我的应用收到云消息并且我的应用程序处于后台时需要执行某些操作。

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

唯一的方法设置“ click_action ”,如https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support中所述 当用户点击通知时,我的应用程序能够意识到有消息到达了吗?

更新:

正如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\"}}"

,该消息将显示在Service类中的callack“onMessageReceived”中,该类从FirebaseMessagingService扩展

2 个答案:

答案 0 :(得分:7)

如果您希望推送应用并且没有显示通知,则应从推送有效负载中删除notification标记,并将其替换为data标记

详细了解您的有效负载如何在此工作https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages

答案 1 :(得分: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()方式接收上方推送。