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

Can firebase cloud messages be detected by app in background?

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

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

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

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

设置“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\"}}"

并且该消息将出现在从 FirebaseMessagingService

扩展的服务 class 中的 callack "onMessageReceived" 上

如果您想在您的应用程序中获取推送并且不显示通知,您应该从推送负载中删除 notification 标签并将其替换为 data 标签

在此处详细了解有效载荷的工作原理https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages

Is it possible to receive notification in custom BroadcastReceiver or Service class instead of delivering to device's system tray?

是的,不要从 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() 方法中收到上述推送。