Files
push_server/README.md
2022-09-23 16:30:01 +08:00

3.8 KiB
Raw Blame History

野火IM 推送服务

作为野火IM的推送服务的演示支持小米、华为、魅族、OPPO、Vivo、苹果apns和谷歌FCM。并且可以添加更多的推送厂商和自定义推送模式。

工作原理

推送功能对于所有IM来说都是非常重要的功能然而android系统又没有统一的推送服务对接起来难度很大。另外一方面客户有不同对接需求有的要求使用第三方有的要求使用厂商推送有的需要在海外添加谷歌推送有的对推送的格式有不同的要求。

为了满足各种各样的需求提供足够好的灵活性野火IM把推送子系统独立出来客户只要理解了推送子系统运行的原理就能做好各种自定义处理。 架构图

如果架构图无法查看,可以点击这里查看

图中紫色部分为推送子系统,推送子系统的所有源码都是开源的,且可以随意修改。推送子系统的工作流程如下:

  1. 应用启动后推送SDK初始化判断采用那种推送服务比如华为手机就用华为推送小米手机就用小米推送或者全部或部分使用第三方推送。如果客户要加其它推送也是在这里加。选定好推送厂商后就初始化对应推送厂商的SDK注册成功后会得到推送token调用IM SDK的setDeviceToken传入推送token和类型。注意类型是可以扩展的而且对IM系统没有任何影响的。
  2. SDK被调用setDeviceToken后会把推送token和类型传入到IM服务IM服务为对应手机保存下来以备后用。事实上IM服务不需要理解token和type的含义只需要透传给推送服务即可。
  3. IM服务处理消息时发现用户不在线或者下发消息失败则会启动是否要推送的决策比如消息是否需要推送预制消息已经支持自定义消息需要传入push content用户是否全局静音会话是否被静音客户有多少天没有登录超过7天没登录就不推送。达到推送条件后跟把所有推送需要的内容打包发给推送服务。
  4. 推送服务接收到IM服务的请求把推送数据放到消费队列中并立即返回IM服务不能被阻塞然后逐步处理推送事件。每个推送事件中都包含了所有需要处理的数据其中包括1步骤中的推送Token和类型然后根据类型来调用对用推送厂商的服务比如华为/小米/苹果/第三方厂商/谷歌/OPPO/Vivo等调用他们的SDK进行推送。

接入推送

接入推送并不是简单得将推送服务跑起来即可,请详细阅读接入推送流程

添加其它推送服务

由前面的介绍可以看出推送子服务是独立于IM服务而且客户端和服务器部分都是开源的而且考虑到了扩展性可以很容易地添加其它推送类型。具体步骤如下

  1. 必须理解推送的工作原理,知道流程是:客户端注册推送-》客户端注册推送成功得到deviceToken-》客户端调用设置deviceToken和类型这两个数据被存储到IM服务。当IM服务需要推送时IM服务打包推送信息包括deviceToken和类型请求到推送服务-》推送服务根据类型选择服务商推送数据。
  2. 客户端扩展一个新的推送类型。
  3. 客户端在应用启动时,添加处理这种推送类型的注册
  4. 在注册成功后会得到deviceToken调用IM SDK的setDeviceToken接口传人deviceToken和类型。
  5. 推送服务添加对这种类型的处理。

使用到的开源代码

  1. TypeBuilder 一个用于生成泛型的简易Builder

LICENSE

UNDER MIT LICENSE. 详情见LICENSE文件