推送功能封装

本节介绍了推送能力的封装,包括推送的结构和流程,最后列举了目前的面临的技术难点和问题。

推送综述

推送通知是一种将服务器上发生的事件通知客户端而客户端无需显式发送检测请求的功能。 客户端无需主动获取便可以被动得到通知。

如果应用程序想要接收服务器事件而不使用推送通知功能, 那么客户端需要不停的访问服务器并检测其状态(参见图的左侧)。 做这种检测如果时间间隔较长将导致通知会有一些延迟,而如果时间间隔较短则会造成各种问题, 如会增加服务器负载、数据流量和设备的电池消耗。

推送通知功能能解决这些问题(参见图的右侧)。 推送所使用的 MQTT 协议会保持与服务器的网络连接并使用它来发送推送通知。 这允许我们快速高效地将服务器事件通知到客户端。

package_push_001.png

本节定义推送功能封装,包括初始化、接口定义等。

推送结构图

package_push_002.png

推送流程图

手机应用程序需要执行 API 以完成推送框架的流程。

package_push_003.png

  1. 客户端设备发送注册请求到推送服务器。

  2. 推送服务器登记客户端设备并回发用于识别设备的设备令牌(ClientID)。

  3. 在用户登录时,客户端设备执行 SDK 的推送初始化 API。这将发送设备令牌和用户 ID 给应用程序服务器并保存。

  4. 当推送事件发生时,应用程序服务器使用用户 ID 和设备令牌来识别目标用户所持有的设备并发送推送通知给他的这些设备。

  5. 应用程序服务器请求推送服务器发送推送通知给目标设备令牌。

  6. 推送服务器发送推送消息给这些设备。

以上这些步骤中很多是由 SDK 来处理的。

技术难点及问题

  • 网络状态切换

  • 心跳包的时间间隔

  • 移动网络下的耗电