集成小米推送
更新时间: 2025/06/10 15:22:34
网易云信 IM 即时通讯 NIM SDK 自 3.2.0 之后的版本新增支持小米推送。本文主要介绍如何集成小米厂商的离线推送通道,使消息通过小米推送服务离线推送至未在线的用户。
第一步:启用推送服务
若已在小米开放平台创建应用,则忽略该步骤。更多小米推送服务的信息请参考 推送服务启用指南。
-
在 小米开放平台 注册开发者账号并完成认证,详情请参考 企业开发者账号注册指南。
-
登录 小米开发者后台,在 应用服务 中选择 消息推送。
-
(可选)单击左上角 创建应用,填写应用名称和包名,选择应用分类后,单击 创建。
若已创建应用,则跳过此步骤。
-
在推送服务应用列表中,单击目标应用操作栏中 启用推送,进入消息推送启用页面。
-
阅读《小米推送技术服务协议》和《小米推送技术服务数据保护附录》。勾选同意接受,单击 启用。
-
启用推送服务后,在 应用管理 -> 应用信息 页面可查看该应用的 AppID、AppKey、AppSecret 等信息。
第二步:添加小米推送证书
-
在 网易云信控制台 首页的 应用管理 中选择应用进入 应用配置 页面,单击 证书管理 页签。
-
在 Android 推送证书 下单击 添加证书,选择证书类型为 小米,配置小米推送相关信息。
网易云信推送证书字段 对应小米应用的字段信息 证书名称 用户自定义推送证书名称,最大 32 字符。
对应初始化 NIM SDK 时需传入的推送证书信息中的 xmCertificateNam。应用包名 对应小米应用的 主包名,最大 1000 字符。 AppSecret 对应小米应用的 AppSecret,最大 5000 字符。 -
根据界面提示,在该对话框内配置证书类型和证书名称等信息。
第三步:导入小米推送 SDK
- 小米推送 MiPush Android SDK 从 5.0.1 版本起,提供 AAR 包接入方式,其支持的最低 Android SDK 版本为 19。这里以 AAR 版接入 为例,如需要接入 JAR 包,请参考 Android 客户端 SDK 集成指南(JAR 版)。
- NIM SDK 当前兼容的 MiPush 版本请参考 更新日志 中的 第三方推送兼容版本。
-
下载 MiPush Android SDK。
-
将下载到的 MiPush_SDK_Client_xxx.aar 文件,拷贝到您的项目路径的 app/libs 目录下;然后在项目 App module 的 build.gradle 中添加依赖:
Groovy
android{ repositories { flatDir { dirs 'libs' } } } dependencies { implementation (name: 'MiPush_SDK_Client_xxx', ext: 'aar') }
第四步:配置 AndroidManifest.xml
在 app/src/main 目录中,打开 AndroidManifest.xml 文件,添加以下配置:
XML<!--配置 receiver-->
<receiver
android:name="com.netease.nimlib.mixpush.mi.MiPushReceiver"
android:exported="true">
<intent-filter android:priority="0x7fffffff">
<action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE"/>
<action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED"/>
<action android:name="com.xiaomi.mipush.ERROR"/>
</intent-filter>
</receiver>
第五步:防止代码混淆
如果您的应用使用了代码混淆,在 proguard-rules.pro 配置文件中添加以下配置以防止小米 SDK 的代码被混淆:
Groovy-keep class com.xiaomi.** {*;}
推送兼容性
若您的自身业务体系,也需要接入小米推送,则需要考虑自身业务体系的小米推送与网易云信消息的小米推送兼容。
兼容需要完成以下两个步骤:
-
新建广播接收器。
对于小米推送,为了接收推送消息,小米 SDK 要求您自定义一个继承自
PushMessageReceiver
的BroadcastReceiver
,并注册到AndroidManifest.xml
文件。由于小米的特殊处理,同时注册多个继承自PushMessageReceiver
的BroadcastReceiver
会存在收不到消息的情况,要保证自身业务体系的小米推送与网易云信消息的小米推送兼容,您需要新建广播接收器,从继承PushMessageReceiver
改为继承MiPushMessageReceiver
。MiPushMessageReceiver
为网易云信提供,推送消息首先被 NIM SDK 接收,如果是自身体系的推送消息,NIM SDK 会将消息传递给MiPushMessageReceiver
。Java
/** * 以下这些方法运行在非 UI 线程中, 与小米 SDK PushMessageReceiver 方法一一对应。 * 如果自身也需要接入小米推送,则应将继承 PushMessageReceiver 改为继承 MiPushMessageReceiver * 例如:自定义一个 DemoMiPushMessageReceiver 继承 MiPushMessageReceiver */ public class DemoMiPushMessageReceiver extends MiPushMessageReceiver{ @Override public final void onReceive(Context context, Intent intent) { } public void onReceivePassThroughMessage(Context context, MiPushMessage message) { } public void onNotificationMessageClicked(Context context, MiPushMessage message) { } public void onNotificationMessageArrived(Context context, MiPushMessage message) { } public void onReceiveRegisterResult(Context context, MiPushCommandMessage message) { } public void onCommandResult(Context context, MiPushCommandMessage message) { } public void onRequirePermissions(Context context, String[] strings) { } }
-
配置新广播的名称。
在将广播接收器改为继承
MiPushMessageReceiver
之后,将该广播在 AndroidManifest.xml 中配置如下,您只需将广播名称MiPushMessageReceiver
替换成自身的广播名。此外,请不要为此 Receiver 配置priority
。XML
<receiver android:name="xxx.DemoMiPushMessageReceiver"> <intent-filter> <action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE"/> <action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED"/> <action android:name="com.xiaomi.mipush.ERROR"/> </intent-filter> </receiver>
小米平台限制
小米通知渠道介绍
小米推送(Mipush)的通知渠道分为 私信消息 和 公信消息 两类,不同类别对应不同的权限,详情请参考 小米推送消息分类新规。
- 公信消息适用于推送热点新闻、新品推广、平台公告、社区话题、有奖活动等,多为用户普适性的内容。
- 私信消息适用于推送聊天消息、个人订单变化、快递通知、交易提醒、IOT 系统通知等与私人通知相关的内容,通知消息的推送数量不受限制。
小米推送对推送消息数量、推送速率 QPS 进行了统一管理,详情请参考 小米推送消息限制说明。
公信消息与私信消息限制说明:
消息类型 | 消息内容 | 用户接收数量限制 | 申请方式 |
---|---|---|---|
默认 | 可按照小米的 公信场景说明 | 单个应用单个设备单日一条 | 无需申请 |
公信消息 | 热点新闻、新品推广、平台公告、社区话题、有奖活动等,多用户普适性的内容。 | 单个应用单个设备单日 5-8 条 | 需在小米推送平台申请,详情请参考 channel 申请及接入方式 |
私信消息 | 聊天消息、个人订单变化、快递通知、交易提醒、IoT 系统通知等与私人通知相关的内容 | 不限量 |
2023 年 2 月 1 日起将按照本新规中的消息分类正式运行。
消息推送类型配置
为了确保推送能正常提醒用户,需设置推送消息的类型 extra.channel_id
。
-
您可以直接在 网易云信控制台 上配置默认的推送消息类型。
-
在 网易云信控制台 首页 应用管理 中选择应用,然后单击 IM 即时通讯 下的 功能配置 按钮进入功能配置页。
-
在顶部选择 基础功能 页签,选择 第三方厂商消息分类,并单击 子功能配置。
-
选择对应的第三方厂商,单击 编辑,输入
channel_id
后 保存。
-
-
也可以通过配置网易云信 NIM SDK 中消息体的
pushPayload
来实现。示例代码:
Java
Map<String, Object> pushPayload = new HashMap<>(); pushPayload.put("channel_id", "您提供的 channel_id"); testMessage.setPushPayload(pushPayload);
对于传给小米推送平台的消息类型优先级:
- 您上传的消息体的
pushPayload
中有分类(channel_id)字段,则使用pushPayload
中的字段值。 - 如果消息体的
pushPayload
中未传入分类(channel_id)字段,则使用默认的推送消息类型(在网易云信控制台设置的消息类型)。 - 如果消息体的
pushPayload
中未传入分类(channel_id)字段,也没有在网易云信控制台上配置推送消息类型,则该推送消息不会添加分类字段。
限额说明
私信消息的单日推送数量不受限,公信消息的单日推送数量将进行上限管理,具体如下:
公信消息单日可推送总量的计算公式:应用在 MIUI 上安装且通知开启数 x 倍数。默认倍数为 2 倍,具备《互联网新闻信息服务许可证》的应用为 3 倍,具体如下所示。
通知开启数小于 10000 的按 10000 计数。
是否具备 《互联网新闻信息服务许可证》 | 单个应用单日单设备通知推送数量限制倍数 (单位:倍) |
单个设备单日单应用接收通知数量 (单位:条) |
---|---|---|
有 | 3 | 8 |
无 | 2 | 5 |
- 应用在 MIUI 上安装且通知开启 的定义:用户已激活应用且主动开启了总消息通知的开关。
- 单日推送限额数以 送达量 计算,当日送达量超限则会计入管控。