推送服务权益为项目级,若您已有开通过推送服务的项目,当您在项目中添加新的元服务时,无需再次开通推送服务。
服务动态消息是提供给开发者的B2C(Business-to-Customer)消息能力,通过服务动态消息,开发者可以基于华为支付订单号或用户前端场景化button获取到的code,向用户推送关键节点的动态消息,及时提醒用户订单进度,帮助用户聚焦正在进行的任务,方便快速查看和即时处理的通知形态。
服务动态消息具有一定特点,具体如下:
实时活动有明显的起终点
该事件或服务需要持续一段时间,有明确的开始和结束,而非单点的提醒或信息。
例:打车、外卖等从事件开始到结束需要经历一段时间;单点提醒,则不适用。
实时活动的时效性
该内容为正在进行或即时发生的事件或服务的提醒,在特定时间段内,及时提供给用户有价值的信息。
例:打车行程中、外卖配送中等正在进行的用户活动;2天后的机票,在刚买时不提醒,而在出发前提示,具体提醒时间根据业务实际情况确定。
实时活动的连续性
服务动态所展示的内容需要根据事件状态变动更新,以确保用户看到最新的状态。
例:打车场景中,会基于司乘状态变化而呈现呼叫车辆中、司机接驾中、司机到达上车点、前往目的地中、待支付、已支付等状态。而优惠券过期提醒,话费充值提醒不具备变化性,不属于服务动态消息。
在展示形态上,服务动态支持在通知中心、锁屏、状态栏、负一屏等位置展示,主要有两种展示形式:胶囊态(在状态栏显示胶囊状态,点击状态栏胶囊后可展开为悬浮卡片)和卡片态。
效果图如下,真实样式请以实际效果为准:
通知中心 | 锁屏 | 状态栏 | 负一屏状态机 | 负一屏消息盒子 |
|---|---|---|---|---|
|
| 胶囊状态:
悬浮卡片:
|
|
|
场景模板有对应的类目要求,符合类目要求的元服务才可以申请使用相应的场景模板(场景模板 配置参数请见服务动态参数说明示例说明)。
以下为部分常用场景模板示例,供开发者参考。如需更多场景支持,可通过邮箱atomicservice@huawei.com 与我们联系。
点击表格中的任一场景,即可下载对应的接口文档:
场景标识sceneId | 场景名称 | 子场景标识subSceneId | 子场景名称 | 适用类目 | Code获取方式 |
|---|---|---|---|---|---|
10001 | 外卖 | 100010001 | 获取外卖与自取订单状态的实时提醒 | 华为支付订单号 | |
100010002 | 华为支付订单号 | ||||
100010003 | 华为支付订单号 | ||||
100010004 | 华为支付订单号 | ||||
10002 | 停车 | 100020002 | 获取停车时间与停车费在线查缴的提醒 | / | |
10003 | 酒店民宿入住 | 100030001 | 根据酒店预订信息,提供入住提醒 | 华为支付订单号 | |
10005 | 取号排队 | 100050001 | 实时呈现排队状态及取号提醒 |
| |
100050002 |
| ||||
100050003 |
| ||||
10011 | 景区预约 | 100110001 | 实时呈现景区动态和游玩提醒 | 华为支付订单号 | |
10018 | 演出提醒 | 100180001 | 实时推送演出动态和观演提醒 | 华为支付订单号 | |
10019 | 景区小交通 | 100190001 | 实时推送景区小交通相关提醒 | 华为支付订单号 | |
10021 | 打车出行 | 100210001 | 实时呈现打车、代驾状态提醒 |
| |
代驾出行 | 10021000 |
| |||
10022 | 打卡 | 100220001 | 旅游-旅游/行程助手/旅游攻略/行程记录 | 华为支付订单号 | |
10023 | 预约参观 | 100230001 | 获取线上预约和使用状态提醒 |
| |
10038 | 同城即时闪送 | 100380001 | 展示同城即时闪送订单的实时配送进度 | l 华为支付订单号 通过前端场景化button获取 | |
10039 | 赛事实况 | 100390001 | 可查看赛事比赛得分/进展等... | l 华为支付订单号 通过前端场景化button获取 |
1. 查看登录AppGallery Connect网站,选择“我的项目”。

2. 在项目列表中找到您的项目,在项目下的应用列表中选择需要配置推送服务参数的应用。

3. 在左侧导航栏选择“增长 > 推送服务”,点击“立即开通”,在弹出的提示框中点击“确定”。至此,您已开通推送服务。

推送消息长度与数量限制
消息体最大不能超过4096Bytes。
消息发送量,单个元服务每天最多推送3000条消息到单个设备上。
推送服务权益为项目级,若您已有开通过推送服务的项目,当您在项目中添加新的元服务时,无需再次开通推送服务。
开发者首先需要明确自己的服务场景,根据对应的服务动态场景进行申请和接入。可参考服务动态场景模板查询平台开放的场景。
开发者按照申请权益,向平台申请服务动态权益,平台运营审核通过后才可以进行接入。
该code在本次服务进程中唯一,后续开发者更新用户的服务状态均通过此code进行。
当用户在元服务内调用华为支付收银台进行支付,开发者可获得华为支付订单号sysTransOrderNo,可直接作为code。
开发者需要在前端将触发服务的button组件的 openType 的值设置为functionalButtonComponentManager.OpenType.REQUEST_SUBSCRIBE_MESSAGE。当用户点击 button 后,获取平台提供的授权码code。
平台会对相关button组件进行规范性使用的检测,包括是否存在诱导用户点击、通过与卡片无关的按钮获取code等行为,请合理使用组件。
针对将华为支付订单号作为code,开发者需在支付完成后调用服务端接口send 传入初始化卡片状态与状态相关字段(参考推送服务动态消息的消息体),用以首次激活code,后续才可以继续通过send更新服务的动态。
针对通过前端场景化button获取code,开发者需要在获取后24小时内调用服务端接口send传入初始化卡片状态与状态相关字段,用以首次激活code,后续才可以继续通过send更新服务的动态。
超过24小时未激活,后续不允许使用该code创建服务动态。
code激活后,开发者可调用服务端接口send传入需更新的卡片状态与状态相关字段(参考推送服务动态消息的消息体)。卡片更新需在子场景的事件有效期内完成,超过子场景的事件有效期,或状态无可变更的下一状态时(如状态更新到“订单已完成”),不再允许开发者更新。
服务动态在通知中心、锁屏、状态栏位置的卡片展示规格,需同时遵循实况窗生命周期管控规格,不符合设计规范的方案将不被予以开通服务动态正式权限。为了确保用户看到内容的时效性,请您确保对实况窗内容进行及时更新。
以外卖场景外卖自取子场景为例,示例如下。更多详情请见服务动态推送API接口。
- // Request URL
- POST https://push-api.cloud.huawei.com/v1/[projectId]/service_timeline/send
-
- // Request Header
- Authorization: Bearer eyJr*****OiIx---****.eyJh*****iJodHR--***.QRod*****4Gp---****
-
- // Request Body
- {
- "appId": "5**********7",
- "toOpenId": "A**********O",
- "sceneId": "10001",
- "subSceneId": "100010001",
- "code": "3**********7",
- "content": {
- "status": 3,
- "expireTime": 60,
- "orderTime": 1716191520,
- "amount": "¥ 18.00",
- "productCount": 1,
- "productName": "霸气芒果",
- "productImg": "image_test_1",
- "merchantName": "威**********店",
- "pickupNumber": "1668",
- "pickupTime": "16:08",
- "remainOrders": "5单/共5杯",
- "waitTime": "10-20分钟",
- "button": {
- "type": 0,
- "text": "取餐码",
- "data": {
- "testKey":"testValue"
- }
- },
- "clickAction": {
- "type": 0,
- "data": {
- "testKey":"testValue"
- }
- },
- "appendButtons": [
- "type": 0,
- "text": "取餐码",
- "data": {
- "testKey":"testValue"
- }
- ]
- }
- }
-
-
业务响应码报错问题请参考业务响应码。
点击消息进入元服务首页或指定页并传递数据
消息示例如下,更多详情请见服务动态推送API接口。
- // Request URL
- POST https://push-api.cloud.huawei.com/v1/[projectId]/service_timeline/send
-
- // Request Header
- Authorization: Bearer eyJr*****OiIx---****.eyJh*****iJodHR--***.QRod*****4Gp---****
-
- // Request Body
- {
- "appId": "5**********7",
- "toOpenId": "A**********O",
- "sceneId": "10001",
- "subSceneId": "100010001",
- "code": "3**********7",
- "content": {
- "status": 3,
- "expireTime": 60,
- "orderTime": 1716191520,
- "amount": "¥ 18.00",
- "productCount": 1,
- "productName": "霸气芒果",
- "productImg": "image_test_1",
- "merchantName": "威**********店",
- "pickupNumber": "1668",
- "pickupTime": "16:08",
- "remainOrders": "5单/共5杯",
- "waitTime": "10-20分钟",
- "button": {
- "type": 0,
- "text": "取餐码",
- "data": {
- "testKey":"testValue"
- }
- },
- "clickAction": {
- "type": 0,
- "data": {
- "testKey":"testValue"
- }
- },
- "appendButtons": [
- "type": 0,
- "text": "取餐码",
- "data": {
- "testKey":"testValue"
- }
- ]
- }
- }
-
支持通过指定 data 参数跳转至该元服务内指定页面,详情请见调用方UIAbility指定启动页面。
在元服务首页中(通常为项目模块级别下的src/main/module.json5中mainElement的值)的onCreate()方法中覆写如下代码:
- import { UIAbility, Want } from '@kit.AbilityKit';
- import { hilog } from '@kit.PerformanceAnalysisKit';
-
- export default class MainAbility extends UIAbility {
- onCreate(want: Want): void {
- // 获取消息中传递的data数据
- const data = want.parameters;
- hilog.info(0x0000, 'testTag', 'Succeeded in getting message data');
- // 根据实际业务场景对data进行处理
- }
- }
onNewWant()方法中覆写如下代码:
- import { UIAbility, Want } from '@kit.AbilityKit';
- import { hilog } from '@kit.PerformanceAnalysisKit';
-
- export default class MainAbility extends UIAbility {
- onNewWant(want: Want): void {
- // 获取消息中传递的data数据
- const data = want.parameters;
- hilog.info(0x0000, 'testTag', 'Succeeded in getting message data');
- // 根据实际业务场景对data进行处理
- }
- }
onNewWant()方法仅在单例(singleton)模式下可用。
示例如下:
- {
- "clickAction": {
- "actionType": 0,
- "data": {
- "ascfPara": {
- "path" : "pages/index?key1=value1&key2=value2" // 指定携带数据{'key1':'value1', 'key2':'value2'}跳转到pages/index页面
- }
- }
- }
- }
-
元服务获取启动参数:
可以在ASCF元服务的App的onLaunch、onShow或Page的onLoad生命周期中获取传递的启动参数信息。
- App({
- onLaunch(options) {
- let path = options.path; // 例如:pages/index
- let data = options.query; // 例如:{'key1':'value1', 'key2':'value2'}
- console.info('data = ', data);
- console.info('path = ', path);
- }
-
- onShow(options) {
- let path = options.path; // 例如:pages/index
- let data = options.query; // 例如:{'key1':'value1', 'key2':'value2'}
- console.info('data = ', data);
- console.info('path = ', path);
- }
- });
-
- Page({
- onLoad(query)
- {
- console.info('query = ', query); // 例如:{'key1':'value1', 'key2':'value2'}
- }
- });
登录AppGallery Connect网站,选择“开发与服务”。
在项目列表中,选择目标项目及应用。
进入“项目设置 > 开放能力管理”页面,找到“服务动态”,点击“申请”。
如需推送带图片的服务动态消息,请同时申请“图片资源托管”子能力(用于消息卡片右侧展示的图片资源托管)。状态效果图参见 状态效果图。

参考“申请原因”模板,提供以下必需信息:
提交后,请等待运营经理审核。

返回“开放能力管理”页面,状态会变为“申请中”。
运营经理将在 1~3 个工作日内 完成审核。
审核结果将通过互动中心发送通知。若审核不通过,请根据反馈意见修改后重新提交。

审核通过仅表示您的资质通过审核,能力尚未正式开通。
审核通过后,我们的运营经理将按您提交的联系方式与您取得联系,开展后续对接工作,包括:
权益配置完成后,您才可正式调用服务动态能力。
如有疑问,请参阅服务动态接入FAQ以获取更多帮助。