鸿蒙 推送:消息发送与接受(五)
·
通知消息通过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字段,客户端在onCreate或onNewWant中获取:
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
const value = want.parameters?.['testKey']; // value: "testValue"
}
七、通知消息样式
7.1 普通通知
必须携带title与body字段,文本最多显示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时不支持自定义铃声。
更多推荐





所有评论(0)