写点什么

运动健康服务场景事件订阅,让应用推送“更懂用户”

作者:HMS Core
  • 2022 年 8 月 11 日
    新加坡
  • 本文字数:2490 字

    阅读完需:约 8 分钟

数据订阅是运动健康类应用中很常见的功能,用户订阅运动记录、健康记录等数据,当这些数据发生变化时,用户能够即时在 App 上接收到推送通知。


例如某位用户最近正在锻炼身体,为自己设定了每天走 1 万步,每周达成 3 次的目标;常规的数据订阅可以做到每天给用户推送当天步数,但用户需要自己进行二次计算才能得知自己是否完成了本周目标。


而场景事件订阅可以弥补这个缺点。场景事件订阅不仅仅是针对某一种数据类型,而是偏重由一种或者多种数据类型组合起来的场景。还是以上面这个情景为例,一周内有任意 3 天走到 1 万步就是一个场景,若用户达成了场景目标,才会收到应用的推送提醒。



华为运动健康服务(Health Kit)不仅支持数据事件订阅,新版本还增加了场景事件订阅能力,让运动健康数据订阅更懂用户。那开发者该如何实现该能力呢?以下是详细的集成步骤。

集成方法

一、注册成为订阅者

在联盟卡片申请 Health Kit 服务时,选择已经创建的产品,勾选注册订阅通知能力。可选择 HTTP 订阅方式,填写回调通知地址,并通过测试连通性来检查回调地址是否连通。目前只支持企业开发者在 Healthkit 卡片中开启订阅功能。



如果你的使用场景满足如下条件,也可以选择端侧订阅方式,填写应用包名与 Action:


  1. 使用端侧订阅方式

  2. 订阅事件类型是场景目标事件

  3. 使用 apk 与 apk 间信息通知


详细准备步骤可参考扩展能力服务开发指南

二、注册订阅记录

HTTP 请求,请参见新增/更新订阅记录接口


POSThttps://health-api.cloud.huawei.com/healthkit/v1/subscriptions
复制代码


请求示例


POSThttps://health-api.cloud.huawei.com/healthkit/v1/subscriptions
复制代码


请求体


POSThttps://health-api.cloud.huawei.com/healthkit/v1/subscriptionsContent-Type: application/jsonAuthorization: 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 请求,请参见订阅事件通知接口


POSThttps://www.example.com/healthkit/notifications
复制代码


请求示例


POSThttps://www.example.com/healthkit/notifications
复制代码


请求体


POSThttps://lfhealthdev.hwcloudtest.cn/test/healthkit/notificationsContent-Type: application/jsonx-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 请求,请参见查询场景事件结果


GEThttps://health-api.cloud.huawei.com/healthkit/v1/subscriptions/3a82f885-97bf-47f8-84d1-21e558fe6e99/achievedRecord
复制代码


请求示例


GEThttps://health-api.cloud.huawei.com/healthkit/v1/subscriptions/3a82f885-97bf-47f8-84d1-21e558fe6e99/achievedRecord
复制代码


响应体


HTTP/1.1 200 OKContent-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 // 未达标标记  }]    }]
复制代码


了解更多详情>>


访问华为开发者联盟官网


获取开发指导文档


华为移动服务开源仓库地址:GitHubGitee


关注我们,第一时间了解 HMS Core 最新技术资讯~

发布于: 刚刚阅读数: 4
用户头像

HMS Core

关注

HMS Core技术团队。 2022.06.16 加入

分享最新的技术干货,带来最全的能力应用场景,更新热门开发者圈子活动。与开发者一起,同成长,共精彩。

评论

发布
暂无评论
运动健康服务场景事件订阅,让应用推送“更懂用户”_HMS Core_InfoQ写作社区