集成魅族推送
更新时间: 2024/05/24 17:47:21
NIM SDK 4.6.0 之后版本新增支持魅族推送。
本文主要介绍如何集成魅族厂商的离线推送通道,使消息通过魅族推送服务离线推送至未在线的用户。
集成流程
步骤 1:在魅族开放平台创建应用
若已在魅族开放平台创建应用,则忽略该步骤。更多魅族推送服务的信息请参考Flyme 推送接入指南。
-
在魅族开放平台注册开发者账号并完成认证,具体请参见flyme 开发者账号。
-
登录魅族推送平台,单击首页右上角的新建应用。
-
进入应用创建页面,输入应用名称、应用包名、应用图标,单击创建即可。
-
完成创建后,单击打开应用,进入配置管理->应用配置查看应用信息,包括该应用的 AppID、AppKey、AppSecret 等信息。
其中 App Secret 可进行重置操作,重置之后,旧 App Secret 的服务端身份识别会失效,以重置后的为准。
步骤 2:在云信控制台添加魅族推送证书
-
在云信控制台首页应用管理选择应用进入应用配置页面,单击证书管理页签。
-
在Android推送证书下单击添加证书,选择证书类型为 魅族,配置魅族推送相关信息。
<table>
<thead>
<tr> <th>云信推送证书字段</th><th>对应魅族应用的字段信息</th></tr></thead>
<tr> <td> 证书名称</td><td>用户自定义推送证书名称,最大 32 字符</br>对应初始化 NIM SDK 时需传入的推送证书信息中的 mzCertificateName</td></tr>
<tr> <td> 应用包名</td><td>对应魅族应用的<strong>应用包名</strong>,最大 1000 字符</td></tr>
<tr> <td> AppID</td><td>对应魅族应用的 <strong>App ID</strong>,最大 1000 字符</td></tr>
<tr> <td> AppSecret</td><td>对应魅族应用的 <strong>App Secret</strong>,最大 5000 字符</td></tr>
</table>
- 根据界面提示,在该对话框内配置证书类型和证书名称等信息。
步骤 3:导入魅族推送 SDK
魅族 PushSDK 使用了 aar 包方式,因此已经处理好了一些通用的权限配置和代码混淆,App 接入时不需要再进行额外的配置,只需要按以下步骤简单接入即可。更多集成信息请参考Flyme 推送 Android 客户端 SDK 文档。
从 PushSDK4.1.0 开始,已经将 SDK 发布至 mavenCentral,只需要在项目根目录的 build.gradle 文件的 allprojects.repositories 块中添加 mavenCentral() 即可。
-
在项目的根目录下的
bulid.gradle
中,添加 maven 仓库。allprojects { repositories { …… mavenCentral() } }
-
在 app/build.gradle 文件的 dependencies 块中添加 PushSDK 的依赖。
dependencies { …… implementation 'com.meizu.flyme.internet:push-internal:4.2.3' }
如果由于网络或其它原因不能使用 mavenCentral 依赖,可以直接下载 AAR 包进行手动导入。
步骤 4: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="com.netease.nim.demo"/>
</intent-filter>
</receiver>
步骤 5:防止代码混淆
如果您的应用使用了代码混淆,在 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,其他不变 */ public class MeiZuPushReceiver extends BroadcastReceiver { @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.MeiZuPushReceiver"> <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" /> </intent-filter> </receiver>
魅族平台限制
- 单个业务的推送有速率限制,默认 App 为500条/秒。
- 单个业务每天的推送有次数限制,默认为1000次/天。
- 单个业务订阅标签的个数不超过100个(可配置)。
- 单个设备单个业务推送消息 ≥ 4条会被折叠展示,消息多次不点击后有可能会被收纳于右上角消息收纳盒。
- 单个设备1个月内不活跃,将取消订阅。
- 一个 IP 地址每小时请求 API 接口有次数限制(可配置)。
- 单个业务每天累计请求 API 接口有次数限制(可配置)。
- 单个业务每天推送的消息总量有限制(可配置)。