通知消息通过Push Kit通道直接下发,可在终端设备的通知中心、锁屏、横幅等展示,用户点击后拉起应用。

一、通知消息

通知消息分为两大类别:

类别 提醒方式 消息展示位置 推送数量
服务与通讯 锁屏、铃声、振动 通知中心 系统管控
资讯营销 静默通知 仅在通知中心(更多通知) 每日2条或5

重要

  • 若未申请通知消息自分类权益,推送的通知消息默认为资讯营销类消息

  • 若仅需发送资讯营销类消息,则无需申请通知消息自分类权益

二、频控规则

阶段 规则
调测阶段 每个项目每日全网最多可推送1000条测试消息(需设置testMessage: true
正式发布 单设备单应用受设备消息频控限制,系统根据场景管控
资讯营销类 根据应用类型分为2条或5条/日

三、支持设备

设备类型 支持版本
Phone、Tablet、PC/2in1 支持
Wearable 5.1.0(18)+
TV 5.1.1(19)+

四、开发步骤

4.1 客户端:获取Push Token

4.2 客户端:请求通知授权

import { notificationManager } from '@kit.NotificationKit';

notificationManager.requestEnableNotification(this.context).then(() => {
  hilog.info(0x0000, 'testTag', 'RequestEnableNotification success');
}).catch((err: BusinessError) => {
  hilog.error(0x0000, 'testTag', `RequestEnableNotification failed, code: ${err.code}`);
});

4.3 客户端:配置skills标签

确保点击消息可以正常跳转应用页面(详见下文“点击消息动作”)。

4.4 服务端:调用REST API推送通知消息

请求URL(V3版本,支持HarmonyOS Next/5.x+):

POST https://push-api.cloud.huawei.com/v3/[projectId]/messages:send

请求示例

{
  "payload": {
    "notification": {
      "category": "MARKETING",
      "title": "普通通知标题",
      "body": "普通通知内容",
      "clickAction": {
        "actionType": 0
      },
      "foregroundShow": true,
      "notifyId": 12345
    }
  },
  "target": {
    "token": ["MAMzLg********lPW"]
  },
  "pushOptions": {
    "testMessage": true,
    "ttl": 86400
  }
}

参数

参数 说明
projectId 项目ID,在AGC“项目设置”获取
Authorization JWT格式字符串
push-type 0表示通知消息
category 消息类型(MARKETING为资讯营销)
actionType 0=进入首页,1=进入内页
testMessage true表示测试消息(每日1000条)
ttl 消息缓存时间(秒)
notifyId 自定义消息标识,相同ID可实现新消息覆盖旧消息

五、点击消息动作

5.1 点击进入应用首页

skills标签配置

{
  "skills": [
    {
      "entities": ["entity.system.home"],
      "actions": ["ohos.want.action.home"]  // 不要配置uris
    }
  ]
}

请求体中设置"actionType": 0

5.2 点击进入应用内页

方式一:通过actions匹配

{
  "skills": [
    {
      "actions": ["com.test.action"]
    }
  ]
}

方式二:通过uris匹配

{
  "skills": [
    {
      "actions": [""],
      "uris": [
        {
          "scheme": "https",
          "host": "www.xxx.com",
          "port": "8080",
          "path": "push/test"
        }
      ]
    }
  ]
}

请求体中设置

"clickAction": {
  "actionType": 1,
  "action": "com.test.action",
  "uri": "https://www.xxx.com:8080/push/test",
  "data": {"testKey": "testValue"}
}

注意:actionType=1时,uri和action至少填写一个,若都填写优先匹配action。若都未匹配,则进入首页。

六、数据传递

服务端推送时携带data字段,客户端在onCreateonNewWant中获取:

onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
  const value = want.parameters?.['testKey'];  // value: "testValue"
}

七、通知消息样式

7.1 普通通知

必须携带titlebody字段,文本最多显示3行。

7.2 通知角标(不支持Wearable/TV)

"badge": {
  "addNum": 1,   // 累加数字
  "setNum": 99   // 实际显示数字(优先级更高)
}

注意:打开应用或点击通知不会清理角标,需调用setBadgeNumber(0)清理。

7.3 通知大图标(不支持Wearable)

"image": "https://***.png"

支持PNG、JPG、JPEG、BMP、WEBP,图片总字节数不超过192KB。

7.4 多行文本样式(不支持Wearable)

"style": 3,
"inboxContent": [
  "1. 通知栏消息样式",
  "2. 通知栏消息提醒方式和展示方式",
  "3. 通知栏消息语言本地化"
]

八、账号校验功能

8.1 账号类型

类型 说明
华为账号 通过华为账号映射的唯一匿名标识
应用账号 应用自己的账号映射的匿名标识

8.2 绑定/解绑接口

// 绑定
pushService.bindAppProfileId(pushCommon.AppProfileType.PROFILE_TYPE_APPLICATION_ACCOUNT, profileId);

// 解绑
pushService.unbindAppProfileId(pushCommon.AppProfileType.PROFILE_TYPE_APPLICATION_ACCOUNT);

8.3 服务端推送

"profileId": "111***222"

九、应用在前台时处理通知消息

9.1 服务端设置

"foregroundShow": false  // 应用在前台时不展示通知消息

9.2 客户端接收消息

配置skills标签

{
  "actions": ["action.ohos.push.listener"]
}

接收消息

pushService.receiveMessage('DEFAULT', this, (payload) => {
  const data: string = payload?.data;
  // 业务处理
});

十、自定义铃声

10.1 客户端

将铃声文件(如alert.mp3)放在/resources/rawfile路径下。

10.2 服务端

"sound": "alert.mp3",
"soundDuration": 10  // 单位秒,范围1-60

注意category取值为MARKETING时不支持自定义铃声。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐