克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

野火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进行推送。

申请推送服务

客户需要自行去厂商申请推送服务并替换配置文件中的各项参数。我们提供的默认参数是服务工作的,需要替换。不排除推送厂商sdk接口有变化,需要自行调试,如果发现我们demo有问题,欢迎给我们提PR。

编译

mvn package

修改配置

本演示服务有1个工程配置文件和7个推送配置文件在工程的config目录下,请配置服务的端口和各个推送服务相关配置。如果有无法支持的推送类型,请修改客户端去掉不支持的类型(注意这里的配置文件要保留)。 请正确配置放到jar包所在的目录下的config目录下。

证书

苹果和谷歌推送需要证书,请把对应证书分别放到apns和fcm目录下,然后修改配置文件中的证书路径。 同样把apns和fcm目录放到jar包所在目录

运行

target目录找到push-XXXX.jar,把jar包和放置配置文件的config目录放到一起,然后执行下面命令:

java -jar push-XXXXX.jar

修改IM服务配置

修改IM服务的配置文件wildfirechat.conf,指向推送服务器的地址,修改完后需要重启

#*********************************************************************
# Push server configuration
#*********************************************************************
##安卓推送服务器地址
push.android.server.address http://localhost:8085/android/push
##苹果推送服务器地址
push.ios.server.address http://localhost:8085/ios/push

Android客户端的修改

Android客户端Push SDK是处理推送注册及接收的地方。这里是客户端进行推送对接的地方,有几点需要注意修改:

  1. 选取您期望的推送,默认是加上了常见推送SDK,但实际上都会有各种原因只能选取部分,需要屏蔽掉您不需要的推送类型。
  2. 如果支持FCM,需要判断是选取FCM还是国内推送厂商的问题。我们处理比较简单,如果你们能够更精准的判断,需要加上你们自己的判断。

问题排查

如果遇到问题请按照以下步骤排查:

  1. 确认客户端推送SDK是否正确的获取到token,是否调用了setDeviceToken,token和type是多少?
  2. 确认消息是否是自定义消息,如果是自定义消息,push content是否带上有内容?自定义消息只有push content不为空才会推送。
  3. 确认目标客户端是否7日之内登录过,超过7天是不推送的。
  4. 确认目标客户是否设置了全局静音或会话静音。
  5. 确认推送服务是否收到了推送信息,如果收到,token和type是否和步骤1一致,推送内容是否和2一致?
  6. 如果推送内容正确到达推送服务,则后面的排查就跟IM服务完全无关了,是推送厂商推送服务的调试,需要客户自己按照推送厂商的官方文档进行调试。

其它注意事项

Android推送服务有透传推送和通知栏推送两种推送方式,各个厂商的支持程度各异,一般情况下透传推送客户体验更好,但需要开通额外的权限比如自启动和后台等,需要用户进行设置;通知栏推送更简单,只弹出通知栏不拉起应用,但在音视频来电处理上赶不上透传,好处是不需要用户手动设置。我们提供的demo中使用的方式并不一定是最适合您的,还需要您根据实际情况来调整使用透传或通知栏。

使用到的开源代码

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

LICENSE

UNDER MIT LICENSE. 详情见LICENSE文件

MIT License Copyright (c) 2019 wildfirechat Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 1. ikidou/TypeBuilder Copyright 2016 ikidou Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

作为野火IM的推送服务的演示,支持小米、华为、魅族和苹果apns 展开 收起
Java
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化