Android

集成荣耀推送

更新时间: 2025/06/10 15:12:30

网易云信 IM 即时通讯 NIM SDK 自 9.8.0 之后的版本新增支持荣耀推送。本文介绍如何集成荣耀厂商的离线推送通道,使消息通过荣耀推送服务离线推送至未在线的用户。

第一步:创建荣耀应用

若已在荣耀推送服务平台创建应用,则忽略该步骤。更多荣耀推送服务的信息请参考 荣耀开发者指南

  1. 荣耀开发者服务平台 注册开发者账号并完成认证,详情请参考 荣耀开发者账号注册实名认证

  2. 登录荣耀开发者服务平台,选择 生态服务 > 应用管理,即可进入应用开通页面。

    荣耀应用管理.png
  3. 单击 新建应用,填写相关信息后单击 创建

    荣耀创建应用.png
  4. 选择 生态服务 > 应用服务 > 推送服务,然后单击 申请推送服务 进入应用申请页面。

    荣耀推送服务.png 荣耀申请推送服务.png
  5. 选择 应用类型 为移动应用,填写或选择已创建的应用,然后填写应用包名和证书指纹。证书指纹的生成请参考 证书指纹生成指南

    荣耀推送服务信息.png
  6. 同意 荣耀推送服务使用协议荣耀开发者服务数据处理附录 后单击 提交

  7. 完成推送服务申请后,在 推送服务 页面,选择创建的应用,即可查看应用的 App ID、App SECRET、Client ID 和 Client Secret 等信息。这些信息将在下一步中使用。

    荣耀 Appkey.png

第二步:添加荣耀推送证书

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

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

    荣耀推送网易云信.png
    网易云信推送证书字段对应荣耀应用的字段信息
    证书名称用户自定义推送证书名称,最大 32 字符。
    对应初始化 NIM SDK 时需传入的推送证书信息中的 honorCertificateName。
    应用包名对应荣耀应用的 应用包名,最大 1000 字符。
    AppID对应荣耀应用的 App ID,最大 1000 字符。
    ClientID对应荣耀应用的 Client ID,最大 1000 字符。
    ClientSecret对应荣耀应用的 Client Secret,最大 5000 字符。
    Activity应用入口 Activity 类全路径,最大 1000 字符。此处需填写应用启动的主 Activity 完整类名。
  3. 根据界面提示,在该对话框内配置证书类型和证书名称等信息。

第三步:下载荣耀服务配置文件

  1. 登录 荣耀开发者服务平台,单击 应用管理

  2. 在应用列表中找到目标应用,单击 应用详情

  3. 在应用基础信息查看页面的 SDK 配置区域,下载 mcs-services.json 配置文件。

    荣耀服务配置文件下载.png
  4. 下载完成后,将 mcs-services.json 文件添加到您的应用级根目录下。

第四步:导入荣耀推送 SDK

将荣耀推送客户端 SDK 添加到您的 Android 项目。荣耀推送客户端 SDK 需要从荣耀 Maven 仓库获取。

NIM SDK 当前兼容的荣耀推送版本请参考 更新日志 中的 第三方推送兼容版本

  1. 在项目级的 build.gradle 文件中添加如下内容,添加荣耀 asplugin 插件以及 Maven 代码库。这里以 Gradle 插件 7.0 以下版本为例,其他版本请参考 集成 HONOR SDK 指南

    • buildscript > repositories 中配置 SDK 的 Maven 仓地址。

    • allprojects > repositories 中配置 SDK 的 Maven 仓地址。

    • 如果 App 中添加了 mcs-services.json 文件则需要在 buildscript > dependencies 中增加 asplugin 插件配置。

      Groovybuildscript {
          repositories {
              google()
              jcenter()
              // 配置 SDK 的 Maven 仓地址。
              maven {url 'https://developer.hihonor.com/repo'}
          }
          dependencies {
              ...
              // 增加 asplugin 插件配置,推荐您使用最新版本。
              classpath 'com.hihonor.mcs:asplugin:2.0.1.300'
              // 增加 gradle 插件配置,根据 gradle 版本选择对应的插件版本号
              classpath 'com.android.tools.build:gradle:4.1.2'
          }
      }
      
      allprojects {
          repositories {
              google()
              jcenter()
              // 配置 SDK 的 Maven 仓地址。
              maven {url 'https://developer.hihonor.com/repo'}
          }
      }
      
  2. 在应用级的 build.gradle 文件的 dependencies 中添加荣耀推送 SDK 编译依赖。

    Groovydependencies {
        // 添加如下配置,{version} 仅为举例,请替换为实际的依赖版本。
        implementation 'com.hihonor.mcs:push:{version}'
    }
    

    请将 {version} 替换为具体的版本号,例如 '7.0.61.303'。您可以在荣耀开发者文档中找到最新的版本号,或参考 NIM SDK 更新日志 中提到的兼容版本。

  3. 添加 asplugin 插件配置。请根据您使用的 Gradle 版本选择正确的添加方式:

    • Gradle 7.0 以下添加方式:在文件头部声明下一行添加如下配置。

      Groovyapply plugin: 'com.hihonor.mcs.asplugin'
      
    • Gradle 7.0 以上添加方式:在 plugins 中添加如下配置。

      Groovyplugins {
          // 添加如下配置
          id 'com.hihonor.mcs.asplugin'
      }
      
  4. 完成以上配置后,同步 build.gradle 文件,将相关依赖下载到本地。

第五步:AndroidManifest.xml 配置

  1. app/src/main 目录中,打开 AndroidManifest.xml 文件,添加对应服务配置。

    XML<manifest>
    ...
    <application>
        <service
            android:exported="false"
            android:name="com.netease.nimlib.mixpush.honor.HonorPushService">
                <intent-filter>
                    <action android:name="com.hihonor.push.action.MESSAGING_EVENT"/>
                </intent-filter>
        </service>
        ...
    </application>
    ...
    </manifest>
    
  2. AndroidManifest.xmlcom.hihonor.push.app_id 下添加您的 App ID,用于识别您的应用。

    XML <meta-data
        android:name="com.hihonor.push.app_id"
        android:value="YourAppId" />
    

    请将 "YourAppId" 替换为您在荣耀开发者服务平台获取的实际 App ID。

第六步:防止代码混淆

如果您的应用使用了代码混淆,在 proguard-rules.pro 配置文件中添加以下配置以防止 HiHonor PUSH SDK 的代码被混淆:

Groovy    -ignorewarnings
    -keepattributes *Annotation*
    -keepattributes Exceptions
    -keepattributes InnerClasses
    -keepattributes Signature
    -keepattributes SourceFile,LineNumberTable
    -dontwarn com.hihonor.push.**
    -keep class com.hihonor.push.** {*;}

推送兼容性

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

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

  1. 新建一个自定义的服务。

    对于荣耀推送,为了接收推送消息,荣耀 SDK 要求开发者自定义一个继承自 HonorMessageService 类的服务,并注册到 AndroidManifest.xml 配置文件。您需要将自身的荣耀推送服务,从继承 HonorMessageService 改为继承 HonorPushMessageServiceHonorPushMessageService 为网易云信提供,推送消息首先被 NIM SDK 接收,如果是自身体系的推送消息,NIM SDK 会将消息传递给 HonorPushMessageService。您可以自行处理自身体系的推送消息,网易云信不做处理。

    Java/**
    * 以下这些方法运行在非 UI 线程中, 与荣耀的 HonorMessageService 方法一一对应。
    * 当开发者自身也接入荣耀推送,则应将继承 HonorMessageService 改为继承 HonorPushMessageService,其他不变
    */
    public class DemoHonorPushMessageService extends HonorPushMessageService {
    
        private static final String TAG = "DemoHonorPushMessageService";
    
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return super.onBind(intent);
        }
    
        @Override
        public void onNewToken(String token) {
            Log.i(TAG, " onNewToken, token=" + token);
        }
    
        /**
        * 透传消息,需要用户自己弹出通知
        *
        * @param msg
        */
        @Override
        public void onMessageReceived(HonorPushDataMsg msg) {
            super.onMessageReceived(msg);
        }
    }
    
  2. 在将服务改为继承 HonorPushMessageService 之后,将该服务在 AndroidManifest.xml 中配置如下,开发者只需将服务名称 HonorPushMessageService 替换成自身的服务名。

    XML<service
            android:exported="false"
            android:name="xxx.DemoHonorPushMessageService">
        <intent-filter>
            <action android:name="com.netease.nimlib.mixpush.honor.action.MESSAGING_EVENT"/>
        </intent-filter>
        </service>
    

荣耀平台限制

消息分类

荣耀推送服务将根据应用类型、消息内容和消息发送场景,将推送消息分成服务通讯和资讯营销两大类别,具体内容可见 荣耀平台消息分类详情

消息类型 说明 默认展示方式 消息样式
服务通讯类 包括社交通讯消息和服务提醒消息。
  • 社交通讯,指用户间的聊天消息、音视频通话。
  • 服务提醒,指应用及时向用户传递重要通知提醒,通常用户对接收此类消息有预期。
锁屏展示+下拉通知栏展示。
支持铃声、震动。
文本+小图
资讯营销类 包括内容资讯消息和活动营销消息。
  • 内容资讯,指应用向用户推送的推荐内容、资讯等。
  • 活动营销,指应用向用户推送的产品促销、功能推荐、运营活动等。
静默通知,仅在下拉通知栏展示 仅文本

消息分类方式

荣耀推送服务的消息分类方式统一为 消息自分类,可通过申请自分类权益,对推送服务消息进行分类管理。

应用的推送消息将根据 message.android.notification.importance 字段进行归类。

  • importance 字段值为 LOW 时,表示消息为资讯营销类,默认展示方式为静默通知,仅在下拉通知栏展示。
  • importance 字段值为 NORMAL 时,表示消息为服务通讯类,默认展示方式为锁屏展示 + 下拉通知栏展示。

目前,所有消息默认通过消息自分类方式进行分类处理,荣耀推送服务将充分信任您提供的分类结果,并且按您提供的分类结果展示对应信息。随着荣耀推送服务能力的不断补充和演进,分类方式也会逐渐更新与升级,请及时留意本文最新的分类方式说明。

消息推送类型配置

为了确保推送能正常提醒用户(锁屏、铃声或震动),需将 importance 字段设置为 NORMAL,该字段的配置可通过网易云信 NIM SDK 中消息体的 pushPayload 来实现。在其中添加以 honorField 为 key 的 Map 或者 JSONObject 数据即可,数据格式请参照 荣耀推送 AndroidNotification

  • 透传消息示例

    Java// honorPassThroughField 结构示例
    //     "honorPassThroughField": {
    //         "data":"{\"1111\":\"22222\"}", // message.data
    //         "android": {
    //             "biTag":"", // AndroidCofig.biTag
    //         }
    //     }
    pushPayload.put("pushTitle", "Set push title here");
    pushPayload.put("honorPassThroughField", honorPassThroughField);
    
  • 普通消息示例

    Java// honorField 结构示例
    //     "honorField":{
    //         "notification": { // AndroidNotification
    //             "bigBody": "the big body",
    //             "bigTitle": "the big title",
    //             "body": " the big body",
    //             "title": " the big title",
    //             "buttons": [{
    //                     "actionType": 0,
    //                     "data": "",
    //                     "intent": "",
    //                     "intentType": 0,
    //                     "name": "test"
    //             }],
    //             "clickAction": {//    消息单击行为
    //                 "action": "",
    //                 "intent": "intent://com.hihonor.codelabpush",
    //                 "type": 1,//1 为打开应用自定义页面,2 为单击后打开特定 URL,3 为单击后打开应用
    //                 "url": "https://www.vmall.com"
    //             },
    //             "importance": "NORMAL",
    //         }
    //     }
    pushPayload.put("pushTitle", "Set push title here");
    pushPayload.put("honorField", honorField);
    
  • 若您需要自动配置推送消息类型,请在 网易云信控制台 配置,详细步骤请参考 第三方推送厂商限制说明。配置后,网易云信将为推送消息设置默认类型(如服务通讯类 message.android.notification.importance="NORMAL")。
  • 对于传给荣耀推送平台的消息类型优先级:
    • 您上传的消息体的 pushPayload 中有分类(importance)字段,则使用 pushPayload 中的字段值。
    • 如果消息体的 pushPayload 中未传入分类(importance)字段,则使用网易云信默认的推送消息类型(该功能需要开通)。
    • 如果消息体的 pushPayload 中未传入分类(importance)字段,也没有开通网易云信自动配置推送消息类型功能,则该推送消息不会添加分类字段,应用的推送消息将通过荣耀智能分类进行自动归类。

限额说明

  • 推送次数限制:目前暂无限制。

  • 推送速率限制:单应用 QPS 统一限制为 3000,达到 QPS 限制则会返回错误码 80200021,本次请求发送失败。

此文档是否对你有帮助?
有帮助
去反馈
  • 第一步:创建荣耀应用
  • 第二步:添加荣耀推送证书
  • 第三步:下载荣耀服务配置文件
  • 第四步:导入荣耀推送 SDK
  • 第五步:AndroidManifest.xml 配置
  • 第六步:防止代码混淆
  • 推送兼容性
  • 荣耀平台限制
  • 消息分类
  • 消息分类方式
  • 消息推送类型配置
  • 限额说明