IM 即时通讯
Android
开发指南

集成魅族推送

更新时间: 2023/06/29 11:03:07

NIM SDK 4.6.0 之后版本新增支持魅族推送。

本文主要介绍如何集成魅族厂商的离线推送通道,使消息通过魅族推送服务离线推送至未在线的用户。

集成流程

步骤 1:在魅族开放平台创建应用

若已在魅族开放平台创建应用,则忽略该步骤。更多魅族推送服务的信息请参考Flyme 推送接入指南

  1. 魅族开放平台注册开发者账号并完成认证,具体请参见flyme 开发者账号

  2. 登录魅族推送平台,单击首页右上角的新建应用

    新建应用.png

  3. 进入应用创建页面,输入应用名称、应用包名、应用图标,单击创建即可。

    创建.png

  4. 完成创建后,单击打开应用,进入配置管理->应用配置查看应用信息,包括该应用的 AppID、AppKey、AppSecret 等信息。

    打开应用.png

    查看应用信息.png

    其中 App Secret 可进行重置操作,重置之后,旧 App Secret 的服务端身份识别会失效,以重置后的为准。

步骤 2:在云信控制台添加魅族推送证书

  1. 云信控制台首页应用管理选择应用进入应用配置页面,单击证书管理页签。

  2. Android推送证书下单击添加证书,选择证书类型为 魅族,配置魅族推送相关信息。

魅族推送.png

<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>
  1. 根据界面提示,在该对话框内配置证书类型和证书名称等信息。

步骤 3:导入魅族推送 SDK

魅族 PushSDK 使用了 aar 包方式,因此已经处理好了一些通用的权限配置和代码混淆,App 接入时不需要再进行额外的配置,只需要按以下步骤简单接入即可。更多集成信息请参考Flyme 推送 Android 客户端 SDK 文档

NIM SDK 开发版和稳定版当前兼容的魅族推送版本为 com.meizu.flyme.internet:push-internal:4.2.3

从 PushSDK4.1.0 开始,已经将 SDK 发布至 mavenCentral,只需要在项目根目录的 build.gradle 文件的 allprojects.repositories 块中添加 mavenCentral() 即可。

  1. 在项目的根目录下的 bulid.gradle 中,添加 maven 仓库。

    allprojects {
    repositories {
    ……
    mavenCentral()
    }
    }
    
  2. 在 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 文件,添加对应权限。

<!-- 兼容 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,并替换您自己的包名。

<!--魅族推送配置项-->
<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 的代码被混淆:

-dontwarn com.meizu.cloud.**
-keep class com.meizu.cloud.** {*;}

集成须知:推送兼容性

若您的自身业务体系中,也需要接入魅族推送,则需要考虑自身业务体系的魅族推送与云信消息的魅族推送兼容。

兼容需要完成以下两个步骤:

  • 新建广播接收器

    从继承 MzPushMessageReceiver 改为继承 MeiZuPushReceiverMeiZuPushReceiver 为云信提供。推送消息首先被 NIM SDK 接收,如果是自身体系的推送消息,NIM SDK 会将消息传递给 MeiZuPushReceiver

    /**
    * 以下这些方法运行在非 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

    <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 接口有次数限制(可配置)。
  • 单个业务每天推送的消息总量有限制(可配置)。
此文档是否对你有帮助?
有帮助
去反馈
  • 集成流程
  • 步骤 1:在魅族开放平台创建应用
  • 步骤 2:在云信控制台添加魅族推送证书
  • 步骤 3:导入魅族推送 SDK
  • 步骤 4:AndroidManifest.xml 配置
  • 步骤 5:防止代码混淆
  • 集成须知:推送兼容性
  • 魅族平台限制