集成魅族推送
更新时间: 2025/07/21 11:12:42
网易云信 IM 即时通讯 NIM SDK 自 4.6.0 之后的版本新增支持魅族推送。本文主要介绍如何集成魅族厂商的离线推送通道,使消息通过魅族推送服务离线推送至未在线的用户。
第一步:创建应用
若已在魅族开放平台创建应用,则请忽略该步骤。更多魅族推送服务的信息,请参考 魅族推送接入指南。
-
在 魅族开放平台 注册开发者账号并完成认证。
-
登录 魅族推送平台,单击首页右上角的 新建应用。
-
进入应用创建页面,输入应用名称、应用包名、应用图标,单击 创建 即可。
-
完成创建后,单击 打开应用,进入 配置管理 > 应用配置 查看应用信息,包括该应用的 AppID、AppKey、AppSecret 等信息。
其中 App Secret 可进行重置操作,重置之后,旧 App Secret 的服务端身份识别会失效,以重置后的为准。
第二步:添加魅族推送证书
-
在 网易云信控制台 首页的 应用管理 中选择应用进入 应用配置 页面,单击 证书管理 页签。
-
在 Android 推送证书 下单击 添加证书,选择证书类型为 魅族,配置魅族推送相关信息。
网易云信推送证书字段 对应魅族应用的字段信息 证书名称 用户自定义推送证书名称,最大 32 字符。
对应初始化 NIM SDK 时需传入的推送证书信息中的 mzCertificateName。应用包名 对应魅族应用的 应用包名,最大 1000 字符。 AppID 对应魅族应用的 App ID,最大 1000 字符。 AppSecret 对应魅族应用的 App Secret,最大 5000 字符。 -
根据界面提示,在该对话框内配置证书类型和证书名称等信息。
第三步:导入魅族推送 SDK
将魅族推送 SDK 添加到您的 Android 项目。
NIM SDK 当前兼容的魅族推送版本请参考 更新日志 中的 第三方推送兼容版本。
更多集成信息请参考 魅族推送 SDK 客户端接入文档 和 Android 魅族 PushDemo。
从 PushSDK 4.1.0 开始,已经将 SDK 发布至 mavenCentral,只需要在项目根目录的 build.gradle 文件的 allprojects.repositories 块中添加 mavenCentral() 即可。
-
在项目的根目录下的
bulid.gradle
中,添加 maven 仓库。Groovy
allprojects { repositories { …… mavenCentral() } }
-
在 app/build.gradle 文件的 dependencies 块中添加 PushSDK 的依赖。
Groovy
dependencies { …… implementation 'com.meizu.flyme.internet:push-internal:x.x.x' }
如果由于网络或其它原因不能使用 mavenCentral 依赖,可以直接下载 AAR 包进行手动导入。
第四步:AndroidManifest.xml 配置
在 app/src/main 目录中,打开 AndroidManifest.xml 文件,添加对应权限。
XML<!-- 兼容 Flyme5 以下版本,魅族内部接入 PushSDK 必填,不然无法收到消息-->
<uses-permission android:name="com.meizu.flyme.push.permission.RECEIVE"/>
<permission
android:name="{您的包名}.push.permission.MESSAGE"
android:protectionLevel="signature"/>
<uses-permission android:name="{您的包名}.push.permission.MESSAGE"/>
<!-- 兼容 Flyme3 配置权限-->
<uses-permission android:name="com.meizu.c2dm.permission.RECEIVE" />
<permission
android:name="{您的包名}.permission.C2D_MESSAGE"
android:protectionLevel="signature"/>
<uses-permission android:name="{您的包名}.permission.C2D_MESSAGE"/>
如下配置可直接拷贝至 AndroidManifest.xml,并替换您自己的包名。
XML<!--魅族推送配置项-->
<receiver android:name="com.netease.nimlib.mixpush.mz.MZPushReceiver">
<intent-filter android:priority="0x7fffffff">
<!-- 接收 push 消息 -->
<action android:name="com.meizu.flyme.push.intent.MESSAGE" />
<!-- 接收 register 消息 -->
<action android:name="com.meizu.flyme.push.intent.REGISTER.FEEDBACK" />
<!-- 接收 unregister 消息-->
<action android:name="com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK"/>
<!-- 兼容低版本 Flyme3 推送服务配置 -->
<action android:name="com.meizu.c2dm.intent.REGISTRATION" />
<action android:name="com.meizu.c2dm.intent.RECEIVE" />
<category android:name=" **替换您的包名** "/>
</intent-filter>
</receiver>
第五步:防止代码混淆
如果您的应用使用了代码混淆,在 proguard-rules.pro 配置文件中添加以下配置以防止魅族 SDK 的代码被混淆:
Java-dontwarn com.meizu.cloud.**
-keep class com.meizu.cloud.** {*;}
推送兼容性
若您的自身业务体系中,也需要接入魅族推送,则需要考虑自身业务体系的魅族推送与网易云信消息的魅族推送兼容。
兼容需要完成以下两个步骤:
-
新建广播接收器
从继承
MzPushMessageReceiver
改为继承MeiZuPushReceiver
。MeiZuPushReceiver
为网易云信提供。推送消息首先被 NIM SDK 接收,如果是自身体系的推送消息,NIM SDK 会将消息传递给MeiZuPushReceiver
。Java
/** * 以下这些方法运行在非 UI 线程中, 与魅族 SDK 的 MzPushMessageReceiver 方法一一对应。 * 如果自身也接入魅族推送,则应将继承 MzPushMessageReceiver 改为继承 MeiZuPushReceiver,其他不变 * 例如:自定义一个 DemoMeiZuPushReceiver 继承 MeiZuPushReceiver */ public class DemoMeiZuPushReceiver extends MeiZuPushReceiver { @Override public final void onReceive(Context context, Intent intent) { } public void onRegister(Context context, String pushId) { } public void onUnRegister(Context context, boolean success) { } public void onPushStatus(Context context, PushSwitchStatus pushSwitchStatus) { } public void onRegisterStatus(Context context, RegisterStatus registerStatus) { } public void onUnRegisterStatus(Context context, UnRegisterStatus unRegisterStatus) { } public void onSubTagsStatus(Context context, SubTagsStatus subTagsStatus) { } public void onSubAliasStatus(Context context, SubAliasStatus subAliasStatus) { } public void onNotificationClicked(Context context, String title, String content, String selfDefineContentString) { } public void onNotificationArrived(Context context, String title, String content, String selfDefineContentString) { } public void onNotifyMessageArrived(Context context, String message) { } public void onNotificationDeleted(Context context, String title, String content, String selfDefineContentString) { } public void onUpdateNotificationBuilder(PushNotificationBuilder pushNotificationBuilder) { } public void onMessage(Context context, String s) { } public void onMessage(Context context, Intent intent) { } public void onMessage(Context context, String s, String s1) { } }
-
配置新广播的名称
在将广播接收器改为继承
MeiZuPushReceiver
之后,将该广播在AndroidManifest
中配置如下,您只需将广播名称MeiZuPushReceiver
替换成自身的广播名。此外,请不要为此Receiver
配置priority
。XML
<receiver android:name="xxx.DemoMeiZuPushReceiver"> <intent-filter> <action android:name="com.meizu.flyme.push.intent.MESSAGE" /> <action android:name="com.meizu.flyme.push.intent.REGISTER.FEEDBACK" /> <action android:name="com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK" /> <category android:name="替换您的包名" /> </intent-filter> </receiver>
魅族平台限制
消息推送分类
魅族推送服务将根据消息的内容,将通知分类为 私信消息 与 公信消息 两大类别,不同类别对应不同的权限,具体请参考 魅族消息分类细则。
消息类型 | 说明 | 推送数量限制 |
---|---|---|
私信消息 | ⽤⼾对收到此类消息有预期,或需要及时知道的消息,如果错过可能会导致不良影响。 | 无限制。 |
公信 | ⽤⼾对收到此类消息⽆预期,关注程度较低。 | 限制每⽇每设备推送数量,默认3~5 条。 |
推送消息的类型通过 noticeMsgType
控制,0 为公信(默认),1 为私信。具体接口请参见 魅族开放平台PUSH系统HTTP接口文档。
限额说明
- 单个业务的推送有速率限制,默认 App 为 500 条/秒。
- 单个业务每天的推送有次数限制,默认为 1000 次/天。
- 单个业务订阅标签的个数不超过 100 个(可配置)。
- 单个设备单个业务推送消息 ≥ 4 条会被折叠展示,消息多次不单击后有可能会被收纳于右上角消息收纳盒。
- 单个设备 1 个月内不活跃,将取消订阅。
- 一个 IP 地址每小时请求 API 接口有次数限制(可配置)。
- 单个业务每天累计请求 API 接口有次数限制(可配置)。
- 单个业务每天推送的消息总量有限制(可配置)。