數據訂閱是運動健康類應用中很常見的功能,用戶訂閱運動記錄、健康記錄等數據,當這些數據發生變化時,用戶能夠即時在App上接收到推送通知。 例如某位用戶最近正在鍛煉身體,為自己設定了每天走1萬步,每周達成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 最新技術資訊~