IM 即时通讯
Android
开发指南

集成荣耀推送

更新时间: 2024/02/02 15:32:51

NIM SDK 9.8.0 之后版本新增支持荣耀推送。

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

集成流程

步骤 1:在荣耀开发者服务平台创建应用

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

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

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

    荣耀创建应用.png

  3. 单击新建应用,填写相关信息后单击创建

    荣耀应用.png

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

    荣耀推送服务.png

    荣耀申请推送服务.png

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

    荣耀推送服务信息.png

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

  7. 完成推送服务申请后,在推送服务页面,选择创建的应用,即可查看应用的 APP ID、APP SECRET等信息。

    APPID.png

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

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

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

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

步骤 3:下载荣耀服务配置文件

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

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

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

  4. 下载完成后,将 mcs-services.json 文件添加到您的应用级根目录下。

步骤 4:导入荣耀推送 SDK

将荣耀推送客户端 SDK 添加到您的 Android 项目。

NIM SDK 开发版和稳定版当前兼容的荣耀推送版本为 com.hihonor.mcs:push:7.0.41.301。

  1. 下载 HONOR Push SDK 至本地。

  2. 将下载的 SDK 添加至应用的 libs 文件夹下(没有需手动创建),然后在应用级的 build.gradle 文件,添加如下代码。

    repositories {
        flatDir {
            dirs 'libs'
        }
    }
    
    dependencies {
        implementation (name: 'push-7.0.41.301', ext: 'aar')
    }
    

步骤 5:AndroidManifest.xml 配置

  1. 在 app/src/main 目录中,打开 AndroidManifest.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.xml 的 com.hihonor.push.app_id 下添加您的 App ID,用于配置您的设备。

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

步骤 6:防止代码混淆

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

    -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。您可以自行处理自身体系的推送消息,云信不做处理。

    /**
    * 以下这些方法运行在非 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 中配置如下,开发者只需将服务名称 xxx.DemoHonorPushMessageService 替换成自身的服务名。

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

荣耀平台限制

消息分类

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

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

消息分类方式

荣耀推送服务针对消息分类有2种处理方式:

  • 消息智能分类:智能算法将根据APP类型和消息内容等维度,自动将您的消息按照分类标准进行归类。
  • 消息自分类:允许开发者根据消息分类规范,自行对消息进行分类。 应用的推送消息将根据 message.android.notification.importance 字段进行归类。
    • importance 字段值为 “LOW” 时,表示消息为资讯营销类,默认展示方式为静默通知,仅在下拉通知栏展示。
    • importance 字段值为 “NORMAL” 时,表示消息为服务通讯类,默认展示方式为锁屏展示 + 下拉通知栏展示。

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

消息推送类型配置

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

  • 透传消息示例

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

    // 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,本次请求发送失败 。

后续步骤

此文档是否对你有帮助?
有帮助
去反馈
  • 集成流程
  • 步骤 1:在荣耀开发者服务平台创建应用
  • 步骤 2:在云信控制台添加荣耀推送证书
  • 步骤 3:下载荣耀服务配置文件
  • 步骤 4:导入荣耀推送 SDK
  • 步骤 5:AndroidManifest.xml 配置
  • 步骤 6:防止代码混淆
  • 集成须知:推送兼容性
  • 荣耀平台限制
  • 消息分类
  • 消息分类方式
  • 消息推送类型配置
  • 限额说明
  • 后续步骤