发布于2022年11月4日3年前 数据订阅是运动健康类应用中很常见的功能,用户订阅运动记录、健康记录等数据,当这些数据发生变化时,用户能够即时在App上接收到推送通知。 例如某位用户最近正在锻炼身体,为自己设定了每天走1万步,每周达成3次的目标;常规的数据订阅可以做到每天给用户推送当天步数,但用户需要自己进行二次计算才能得知自己是否完成了本周目标。 而场景事件订阅可以弥补这个缺点。场景事件订阅不仅仅是针对某一种数据类型,而是偏重由一种或者多种数据类型组合起来的场景。还是以上面这个情景为例,一周内有任意3天走到1万步就是一个场景,若用户达成了场景目标,才会收到应用的推送提醒。 华为运动健康服务(Health Kit)不仅支持数据事件订阅,新版本还增加了场景事件订阅能力,让运动健康数据订阅更懂用户。那开发者该如何实现该能力呢?以下是详细的集成步骤。 集成方法 一、注册成为订阅者 在联盟卡片申请Health Kit服务时,选择已经创建的产品,勾选注册订阅通知能力。可选择HTTP订阅方式,填写回调通知地址,并通过测试连通性来检查回调地址是否连通。目前只支持企业开发者在Healthkit卡片中开启订阅功能。 如果你的使用场景满足如下条件,也可以选择端侧订阅方式,填写应用包名与Action: 使用端侧订阅方式 订阅事件类型是场景目标事件 使用apk与apk间信息通知 详细准备步骤可参考扩展能力服务开发指南。 二、注册订阅记录 HTTP请求,请参见新增/更新订阅记录接口 POST https://health-api.cloud.huawei.com/healthkit/v1/subscriptions 请求示例: POST https://health-api.cloud.huawei.com/healthkit/v1/subscriptions 请求体: POST https://health-api.cloud.huawei.com/healthkit/v1/subscriptions Content-Type: application/json Authorization: Bearer *** x-client-id: *** x-version: *** x-caller-trace-id: *** { "subscriberId": "08666998-78f6-46b9-8620-faa06cdbac2b", "eventTypes": [ { "type": "SCENARIO_GOAL_EVENT", "subType": "ACHIEVE", "eventType": "SCENARIO_GOAL_EVENT$ACHIEVE", "goalInfo": { "createTime": 1654660859105, "startDay": 20220608, // 目标开始计算日期,注意需晚于目标创建日期 "recurrence": { "unit": 1, // 周期单位:日 "count": 30, // 整个周期30天 "expectedAchievedCount": 28 }, "goals": [ { "goalType": 1, "metricGoal": { "value": 10000, // 设置达标值10000步 "fieldName": "steps", "dataType": "com.huawei.continuous.steps.total" } } ] } } ] } 三、接收达标事件消息通知 HTTP请求,请参见订阅事件通知接口 POST https://www.example.com/healthkit/notifications 请求示例 POST https://www.example.com/healthkit/notifications 请求体 POST https://lfhealthdev.hwcloudtest.cn/test/healthkit/notifications Content-Type: application/json x-notification-signature: *** [{ "appId": "101524371", "subscriptionId": "3a82f885-97bf-47f8-84d1-21e558fe6e99", "periodIndex": 0, "periodStartDay": 20220608, "periodEndDay": 20220608, "goalAchieve": [{ "goalType": 1, "metricGoal": { "value": 10000.0, "fieldName": "steps", "dataType": "com.huawei.continuous.steps.total" }, "achievedFlag": true //已达标 } ] } 四、若需要查询某个场景事件订阅记录,对应的单周期内的目标达成结果值,可使用如下接口查询。(非必要步骤) HTTP请求,请参见查询场景事件结果。 GET https://health-api.cloud.huawei.com/healthkit/v1/subscriptions/3a82f885-97bf-47f8-84d1-21e558fe6e99/achievedRecord 请求示例 GET https://health-api.cloud.huawei.com/healthkit/v1/subscriptions/3a82f885-97bf-47f8-84d1-21e558fe6e99/achievedRecord 响应体 HTTP/1.1 200 OK Content-type: application/json;charset=utf-8 [ { "openId": "MDFAMTAxNTI0MzcxQGQ0Y2M3N2UxZTVmNjcxNWFkMWQ5Y2JjYjlmZDZiaNTY3QDVhNmNkY2FiaMTFhYzc4NDk4NDI0MzJiaNjg0MzViaYmUyMGEzZjZkNzUzYWVjM2Q5ZTgwYWM5NTgzNmY", "appId": "101524371", "subscriptionId": "3a82f885-97bf-47f8-84d1-21e558fe6e99", "periodIndex": 0, "periodStartDay": 20220608, "periodEndDay": 20220608, "goalAchieve": [{ "goalType": 1, "metricGoal": { "value": 10000.0, // 设定的目标值 "fieldName": "steps", "dataType": "com.huawei.continuous.steps.total" }, "achievedResult": "20023", // 实际值 "achievedFlag": true // 已达标标记 }] }, { "openId": "MDFAMTAxNTI0MzcxQGQ0Y2M3N2UxZTVmNjcxNWFkMWQ5Y2JjYjlmZDZiaNTY3QDVhNmNkY2FiaMTFhYzc4NDk4NDI0MzJiaNjg0MzViaYmUyMGEzZjZkNzUzYWVjM2Q5ZTgwYWM5NTgzNmY", "appId": "101524371", "subscriptionId": "3a82f885-97bf-47f8-84d1-21e558fe6e99", "periodIndex": 1, "periodStartDay": 20220609, "periodEndDay": 20220609, "goalAchieve": [{ "goalType": 1, "metricGoal": { "value": 10000.0, // 设定的目标值 "fieldName": "steps", "dataType": "com.huawei.continuous.steps.total" }, "achievedResult": "9800", // 实际值 "achievedFlag": false // 未达标标记 }] } ] 了解更多详情>> 访问华为开发者联盟官网 获取开发指导文档 华为移动服务开源仓库地址:GitHub、Gitee 关注我们,第一时间了解 HMS Core 最新技术资讯~
创建帐户或登录后发表意见