Android Oreo 如何知道 FCM 消息已到达?

How Android Oreo Knows that an FCM Message has arrived?

我知道 FCM 消息被发送到对应于 FirebaseInstanceId.getInstance().getToken() 的设备,并且在 onMessageReceived() 上,FCM 消息根据用户的需要进行处理。但是,如果该应用程序不是 运行 并且在 Oreo 中存在所有背景限制,OS 如何知道消息已到达?

how the OS knows that a message has arrived?

phone 和 google 的 FCM 服务器之间存在套接字连接。此连接在 phone 上使用 FCM 的所有应用程序之间共享。
here

当您要求 FCM 向您的 phone ABC 和 ID 为 XYZ 的应用程序发送消息时,google 的服务器将向 phone ABC 发送一些数据。 phone 上的 FCM 组件然后找到 ID 为 XYZ 的应用程序(它必须首先查找正确的应用程序,因为此连接也可能接收其他应用程序的数据)并将消息传递给 ID。

这是由 google 管理的,因此假设您为 FCM 消息设置了正确的优先级,那么该进程自然不会受到后台限制。