Skip to content

推送平台说明

xuexiangjys edited this page Dec 17, 2019 · 5 revisions

目前已支持的推送平台

推送平台 平台名 平台码 模块名 客户端类
极光推送 JPush 1000 xpush-jpush com.xuexiang.xpush.jpush.JPushClient
友盟推送 UMengPush 1001 xpush-umeng com.xuexiang.xpush.umeng.UMengPushClient
华为推送 HuaweiPush 1002 xpush-huawei com.xuexiang.xpush.huawei.HuaweiPushClient
小米推送 MIPush 1003 xpush-xiaomi com.xuexiang.xpush.xiaomi.XiaoMiPushClient
信鸽推送 XGPush 1004 xpush-xg com.xuexiang.xpush.xg.XGPushClient

除此之外,如果你使用MQTT协议来做消息推送的话,我也同样提供了案例给你:XPush-MQTT

推送平台的注意事项

极光推送平台所有特性都支持。

友盟推送

  • 友盟推送在进行XPush初始化的时候,除了在主进程中注册,还需要在channel中注册。

  • 友盟推送不支持Tag和alias的获取

  • 友盟推送不支持监听推送的连接状态。

信鸽推送

  • 信鸽推送不支持Tag和alias的获取

  • 信鸽推送不支持监听推送的连接状态。

华为推送

  • 华为推送在注册之前需要安装最新的推送服务,否则将无法注册成功(库会自动弹出升级或者安装提示)

  • 华为推送不支持所有Tag和alias的操作。

  • 华为推送不支持接收通知到达事件。

小米推送

  • 小米推送一次只能操作一个Tag。

  • 小米推送注销无结果反馈。

  • 小米推送不支持监听推送的连接状态。

如何拓展第三方推送平台

由于Android推送平台的众多,目前本项目不可能也没必要提供所有推送平台的集成库。如果你想使用的推送平台在我这没有找到对应的集成库的话,那么就需要你自己写一个了。

其实拓展一个第三方推送库也不是很难,只要遵循以下4步骤就可以完成了:

  • 1.新建一个Android Library Module,然后将你准备集成的推送平台的依赖内容导入进来。这里包括引入推送依赖库或SDK、配置AndroidManifest.xml

  • 2.创建该推送平台的客户端XXXClient,实现IPushClient接口,并且重写对应的方法。其中initregisterunRegistergetPlatformCodegetPlatformName这5个方法是必须重写的。

IPushClient接口方法详细如下:

public interface IPushClient {
    /**
     * 初始化【必须】
     *
     * @param context
     */
    void init(Context context);
    /**
     * 注册推送【必须】
     */
    void register();
    /**
     * 注销推送【必须】
     */
    void unRegister();
    /**
     * 绑定别名【别名是唯一的】
     *
     * @param alias 别名
     */
    void bindAlias(String alias);
    /**
     * 解绑别名
     *
     * @param alias 别名
     */
    void unBindAlias(String alias);
    /**
     * 获取别名
     */
    void getAlias();
    /**
     * 增加标签
     *
     * @param tag 标签
     */
    void addTags(String... tag);
    /**
     * 删除标签
     *
     * @param tag 标签
     */
    void deleteTags(String... tag);
    /**
     * 获取标签
     */
    void getTags();
    /**
     * @return 获取推送令牌
     */
    String getPushToken();
    /**
     * 注意千万不要重复【必须】
     * @return 获取平台码
     */
    int getPlatformCode();
    /**
     * 注意千万不要重复【必须】
     * @return 获取平台名
     */
    String getPlatformName();
}

  • 3.创建和重写三方消息推送的消息接收器(一般是重写Receiver)。重写三方推送的的接收透传消息和通知的方法,调用XPush的transmitXXX方法,将通知、透传消息、通知点击事件、以及其他事件,转发到XPush。

主要调用以下五个方法:

(1)XPush.transmitMessage(): 转发自定义(透传)消息.

(2)XPush.transmitNotification(): 转发通知到达消息.

(3)XPush.transmitNotificationClick(): 转发通知点击事件.

(4)XPush.transmitCommandResult(): 转发IPushClient命令执行结果.

(5)XPush.transmitConnectStatusChanged(): 转发推送连接状态发生改变的事件.

  • 4.增加该推送平台对应的代码混淆配置信息。

以上即完成了推送平台的集成。剩下的就是在初始化XPush的时候对推送平台进行选择了.如果你看完了还是不会的话,你可以参考项目中的xpush-xiaomixpush-huawei.

实体介绍

XPushMsg

推送消息转译实体,携带消息的原始数据

字段名 类型 备注
mId int 消息ID / 状态
mTitle String 通知标题
mContent String 通知内容
mMsg String 自定义(透传)消息
mExtraMsg String 消息拓展字段
mKeyValue String 消息键值对

Notification

推送通知,由XPushMsg转化而来

字段名 类型 备注
mId int 消息ID / 状态
mTitle String 通知标题
mContent String 通知内容
mExtraMsg String 消息拓展字段
mKeyValue String 消息键值对

CustomMessage

自定义(透传)消息,由XPushMsg转化而来

字段名 类型 备注
mMsg String 自定义(透传)消息
mExtraMsg String 消息拓展字段
mKeyValue String 消息键值对

XPushCommand

IPushClient执行相关命令的结果信息实体

字段名 类型 备注
mType int 命令类型
mResultCode int 结果码
mContent String 命令内容
mExtraMsg String 拓展字段
mError String 错误信息

常量介绍

CommandType

命令的类型

命令名 命令码 备注
TYPE_REGISTER 2000 注册推送
TYPE_UNREGISTER 2001 注销推送
TYPE_ADD_TAG 2002 添加标签
TYPE_DEL_TAG 2003 删除标签
TYPE_GET_TAG 2004 获取标签
TYPE_BIND_ALIAS 2005 绑定别名
TYPE_UNBIND_ALIAS 2006 解绑别名
TYPE_GET_ALIAS 2007 获取别名
TYPE_AND_OR_DEL_TAG 2008 添加或删除标签

ResultCode

命令的结果码

结果名 结果码 备注
RESULT_OK 0 成功
RESULT_ERROR 1 失败

ConnectStatus

推送连接状态

状态名 状态码 备注
DISCONNECT 10 已断开
CONNECTING 11 连接中
CONNECTED 12 已连接