【关注 融云全球互联网通信云】消息推送(Push)作为业务主动触达用户的一种重要手段,已经成为移动开发中的标配服务。特别是随着移动互联网的深入发展,流量红利消减,消息推送服务承载着解决增长难题的重任。

数据显示,APP 集成的开发服务中,消息推送占比最高,且渗透率逐年递增。而如何集成多厂家的推送通道,则是国内开发者要面对的首要问题。

目前,iOS 设备使用苹果的 APNs 推送服务,Android 设备使用谷歌 FCM 推送服务。由于谷歌服务在国内无法使用,几大手机硬件厂商像小米、华为、OPPO、VIVO、魅族都提供了各自系统级别的推送服务。

融云支持了上述所有的推送通道,同时还自研了 RongPush 服务,开发者无需一一对接,即可简单、高效地实现推送业务。

本文将重点介绍融云集成多厂家推送通道服务的实现方案。

融云推送服务流程

推送流程主要分“推送配置”、“协商推送通道,上报推送 token”、“发送推送消息”、“推送回执”四个部分,下面分别介绍。

推送配置:开发者需要在融云后台维护推送配置,主要是维护调用推送通道接口需要的密钥信息及接口参数。

协商推送通道,上报推送 token:客户端需要集成融云 SDK,当 APP 启动初始化时候会请求融云服务端进行协商,协商出最佳的推送通道。然后上报该推送通道的 token (第三方推送通道识别客户端的唯一标识)。

发送推送消息:融云服务端拿到用户配置的密钥信息和参数、上报的推送 token,通过调用推送通道 API 发送推送消息。

推送回执:当推送到达客户端或客户端点击推送信息时,客户端会上报回执信息给第三方通道或融云服务端,第三方推送通道通过回调方式将回执信息回调给融云服务端。APNs 和 FCM 是客户端直接上报回执信息给融云服务端。具体流程如下:

融云推送系统架构

时至今日,融云已经服务 25 万+开发者,为全球 30 万款 APP 提供通信技术支持。同时,随着移动互联网的深入发展,移动应用覆盖的场景越来越复杂多样,开发者的需求也在不断翻新升级。作为移动应用标配,推送系统自然也面对更多复杂场景和多样需求的挑战。

通过不断迭代,融云构建了一个支持灵活扩展、高并发、低延迟、按需隔离的推送系统。系统整体架构如下图所示:


该架构分为四层:应用层、推送业务逻辑层、通道层、存储资源层。

应用层负责对外提供使用推送服务能力的方式,满足不同业务场景的推送需求。除了 IM 场景外,融云对外提供了 API 接口、开发者后台等多种形式的推送使用方式,支持像标签推送、全量广播等推送场景。

推送逻辑层负责承接应用层转发过来的推送请求。为了应对高并发场景,必须对流量进行合理切分,我们对每个请求按设备 ID 维度进行一致性 hash 计算落点,让请求均衡分布到每个服务节点上。服务内部使用队列进行缓冲请求,减轻服务压力。同时应用内部利用本地缓存和 redis 对数据库的查询请求进行缓存,进一步减轻数据库层的压力。

推送逻辑层还负责处理推送过程中的一些通用业务逻辑,如推送标题、内容等参数的业务逻辑处理、国际化支持、配置加载,以及构建通道层需要的推送请求参数。

通道层主要负责调用第三方推送通道接口,目前融云已经集成了小米、华为、OPPO、VIVO、MEIZU、FCM、APNs 推送通道。

存储资源层使用了 mysql、hbase、solr、redis,按不同的业务数据特点采用适合的存储中间件,提高性能。

多厂家推送对接

接口调用:小米、华为、OPPO、VIVO、MEIZU 推送提供的推送接口众多,有单推、批量推、按标签推等不同推送接口。

我们基于不同场景需求选择了单推和批量推送,对于有更高实时性要求的 IM 场景,选择单推方式;对于要求更高性能的全量广播推送场景,选择了批量推送接口。几个厂家的推送接口的调用基本大同小异,大致流程如下:


类图结构如下:


推送参数支持:当我们对接第三方推送接口时会发现,需要配置的推送参数非常多。除了一些基本必选参数,如推送标题、推送内容,还有像铃声、点击动作、显示效果、优先级、布局样式等各种参数。

为方便用户快速配置满足自己需求的参数,我们设计了参数三级化配置模式,支持这些参数的动态扩充。


三级配置分别是消息级别配置、应用级别配置、默认配置。消息级别优先级最高,应用级别优先级次之,默认配置优先级最低。

这样,默认配置和应用级别配置可以满足基本的推送需求,如果开发者需要更精细的推送效果控制,则可以进一步选择消息级别配置。

随着移动互联网的纵深发展,未来我们还将面对更多更复杂的开发者需求,融云也将不断迭代技术架构和服务模式,确保服务急速触达、安全可靠。


融云RongCloud
82 声望1.2k 粉丝

因为专注,所以专业