華為運動健康服務(HUAWEI Health Kit)為三方生態應用提供了REST API介面,通過其介面可訪問資料庫,為用戶提供運動健康類數據服務。在實際的集成過程中,開發者們可能會遇到各種問題,這裡我們將典型問題進行分享和總結,希望為其他遇到類似問題的開發者提供參考。 1. 註冊訂閱通知能力後, ...
華為運動健康服務(HUAWEI Health Kit)為三方生態應用提供了REST API介面,通過其介面可訪問資料庫,為用戶提供運動健康類數據服務。在實際的集成過程中,開發者們可能會遇到各種問題,這裡我們將典型問題進行分享和總結,希望為其他遇到類似問題的開發者提供參考。
1. 註冊訂閱通知能力後,連通性檢查失敗
在註冊成為訂閱者後,測試連通性檢查回調通知地址時,提示“連通性檢查失敗,連通性檢查響應非204”。
原因分析:
在回調通知地址可以訪問的情況下,需要開發者確認訂閱的回調通知地址的HTTP狀態碼是否為204,否則將返回404表示回調地址連通性檢驗失敗。
參考訂閱數據文檔
解決方案:
檢查鏈接是否可用,且返回的狀態碼是否為204。
2. 採樣數據統計介面返回的步數總和與獲取步數明細數據後自己計算的總和不一致
用採樣數據統計查詢介面獲取步數總和
統計查詢介面:https://health-api.cloud.huawei.com/healthkit/v1/sampleSet:polymerize
請求參數:
{
"polymerizeWith": [
{
": 1651809600000,
"startTime": 1651766400000,
"groupByTime": {
"groupPeriod": {
"timeZone": "+0800",
"unit": "day",
"value": 1
}
}
}
最終返回的步數結果為7118
用採樣數據明細查詢介面獲取步數明細,並計算總和
明細查詢介面:https://health-api.cloud.huawei.com/healthkit/v1/sampleSet:polymerize
請求參數:
{
"polymerizeWith": [
{
"dataTypeName": "com.huawei.continuous.steps.delta"
}
],
"endTime": 1651809600000,
"startTime": 1651766400000
}
根據返回的結果計算的步數總和為6280
通過數據可以看出,在時間段相同的前提下,採樣數據統計介面返回的步數總和與根據步數明細計算的總和是不一致的。
原因分析:
是明細數據和統計數據不同的機制導致的。明細數據和統計數據是分開上報的,由於各種原因,明細數據可能會有丟失或延遲,導致兩種數據不能完全匹配。
其次,在統計一天的數據時,聚合條件為以下參數時(見下圖),返回的是上報的統計數據,而不是通過明細數據計算的數據。
解決方案:
採樣數據統計查詢時,按時間聚合,傳入groupByTime參數,groupByTime中設置duration參數。
請求參數:
{
"polymerizeWith": [
{
"dataTypeName": "com.huawei.continuous.steps.delta"
}
],
"endTime": 1651809600000,
"startTime": 1651766400000,
"groupByTime": {
"duration": 86400000
}
}
最終返回的結果是6280,與根據步數明細計算的總和一致。
3. 錯誤碼403,錯誤信息“Insufficient Permission: Request had insufficient authentication scopes.”
原因分析:
403為拒絕請求,主要是scopes許可權不足,導致拒絕請求。
解決方案:
(1)檢查聯盟卡片中是否申請了相關許可權。
(2)檢查認證鑒權時是否傳入了申請的許可權,且是否在授權頁面進行了同意授權。
認證鑒權時是否傳入了申請的許可權
授權界面是否勾選了許可權
4. 錯誤碼400,錯誤信息“Insufficient Permission: Request had insufficient authentication scopes.”
案例:查詢步數的採樣數據明細
參數說明:
Access Token:根據首次認證鑒權的code碼生成。
首次認證鑒權的時間(第一次生成code碼的時間):2022年5月7日上午8點左右。
採集數據的起始時間:
開始時間:2022-05-06 00:00:00(1651766400000)
結束時間:2022-05-06 12:00:00(1651809600000)
具體請求,見下圖:
響應結果:
原因分析:
查詢數據時,出於對用戶數據的保護,只允許開發者查詢在用戶授權之後的數據。如果需要查詢用戶授權前的數據,開發者需要獲取到“讀取歷史數據”許可權的授權,如果用戶未授予此許可權,開發者在查詢數據時設置的起始時間若早於用戶授權時間,則起始時間將自動修正為用戶首次授權的時間,這將導致查詢錯誤(code:400,message: “Invalid startTime or endTime.”)或僅能查詢到用戶授權時間後的數據,與設置的起始時間不一致。
拿問題中的例子來說,由於用戶未授予“讀取歷史數據”的許可權,在開始時間為5月6日,首次授權時間為5月7日的情況下,開始時間會自動修正為首次授權時間,也就是5月7日,這就導致修正後的開始時間晚於了結束時間,因此才會返回了錯誤碼400,錯誤信息"Invalid startTime or endTime."。
解決方案:
(1)檢查Health Kit 聯盟卡片上是否申請了“讀取歷史數據”許可權,此許可權在伺服器應用中可見
(2)生成授權碼code時, 在scope中添加"https://www.huawei.com/healthkit/historydata.open"許可權,供用戶在登錄華為帳號之後為應用授予“讀取歷史數據”。
授權之後查詢的數據:
瞭解更多詳情>>