iOS與Android取得運動數據分享
前言
現今大家越來越重視運動與健康,iPhone手機主要內建了Apple Health,Android則是可透過Google Play下載自家的Google Fit,各家廠牌也推出了運動手環、手錶、App來協助我們記錄每天的健康狀況、步行、卡路里的數值,而也越來越多的銀行、保險公司想推出與運動相關的App來拉近民眾成為潛在客戶,此篇文章將介紹該如何整合這些數據以及其中的差異。
Core Motion & Motion Sensors
Core Motion與Motion Sensors的原理是透過手機內的三軸感應來判別手機的移動。
iPhone內的CMPedometerData則提供了時間區間查詢步數、距離、平均速度(s/m 每公尺花幾秒)、目前速度(s/m每公尺花幾秒)、當前步速(步/s)、上樓樓層數、下樓樓層數等資訊。
Android手機的Motion Sensors則是需要自行透過JobScheduler於一定時間內取得此段時間增加的步數。
使用Core Motion與Motion Sensors的優點在於
1. 取得資訊即時快速。
2. 詢問使用者權限較簡單。
但卻有著以下缺點:
1. 無圖形化介面供使用者核對。
2. 可取得資料有限、僅可取得步數。
3. Android需自行建立監聽事件。
4. 於Android上容易發生誤判情形。
例如在專案中就曾發生有使用者開車時因手機晃動導致步數暴增之情形。
Apple Health
Apple Health健康資訊屬於使用者隱私資訊,在使用時須先將HealthKit權限引入,在App開啟時需詢問使用者權限外,也建議在隱私宣告的部分說明取得使用者運動數據後的用途。
App開啟後詢問權限的畫面如上,可依據開發的App是否需要寫入功能或讀取功能來取得使用者相關資訊。
Apple Health會協助串連第三方App的數據,因此建議開發App時可透過 Apple Health取得整合後的資訊即可,可免去需要與第三方手環做藍芽連線、讀取資料格式不一致等困擾,取得數據的部分也分為HKStatisticsQuery,可取得Apple Health將各App資訊整合後,透過Apple Health的演算法統計出的結果,此結果會依照各App發生運動的時間由Apple Health進行計算,但需要注意的是當使用者於Apple Health內更改各App的權限排序或關閉權限時,有可能影響該數值。
若要取得到第三方運動App的數據時,則可透過HKSampleQuery的方式取得,可取到各App內詳細的數值。
Google Fit
Google Fit取得資料的方式則是透過Google Fit雲端的API取得,除了可透過App內呼叫Google Fit API外,也可透過Web Service等方式取得,使用情境可不局限於App上。但Android手機無內建Google Fit,建議在App內需引導使用者下載Google Fit後才可取得運動數據。
Google Fit內權限的取得需參考https://developers.google.com/fit/android/get-started網址內的步驟,開發者帳號需要先通過OAuth 2.0的認證和設定才可以於Debug和Build時與Google Fit連結,若未作此動作則無法連結到Google Fit權限。
Google Fit權限的綁定會分為兩個部分,第一個步驟是選擇要綁定的帳號,此部分需選擇到有登入過Google Fit服務的帳號後才會顯示第二個步驟「允許權限」。
因Google Fit的綁定是透過Google帳號與Google Fit及我們開發的App做連結,要確認Google Fit是否綁定成功需開啟Google Fit App,到個人資料頁面右上角的設定>管理已連結的的應用程式確認是否有綁定成功。
Google Fit在取得步數資料時,可透過DataPoint.getOriginalDataSource().getAppPackageName()方法來分辨資料來源,但卡路里的部分在一般情況下則會統一顯示為com.google.android.gms,無法分辨來源。
另外Google Fit的卡路里資料是包含動態卡路里和靜態卡路里加總而算出來的,靜態卡路里指的是是指一般人所需的最小熱能需求量,計算公式如下:
每日男性 REE = (10 × 體重) +(6.25 × 身高) - (5 × 年齡) + 5
每日女性 REE = (10 × 體重) +(6.25 × 身高) - (5 × 年齡) – 161
Google Fit內的卡路里並無法拆分動態與靜態,因此卡路里的部分會受到使用者在Google Fit內填寫的身高、體重、性別、生日而影響,故來源為Google Fit。
由上圖可發現,33卡路里為平均出現的數值(每日靜態卡路里/48),代表靜態卡路里,而較突出的部分58卡路里則是動態+靜態後的值,若需要算出此半小時時段內的動態卡路里需自行扣除每日靜態卡路里/48。
Apple Health vs Google Fit
上表針對Apple Health與Google Fit於實務上較常使用的參數進行比較與整理,目前只有步數兩邊平台的基礎是一致的,爬樓梯層數只有Apple Health有,距離的部分Apple Health區分了腳踏車的騎乘距離與行走距離,而Google Fit的距離則是將腳踏車的騎乘距離與行走距離加總計算。
卡路里的部分Apple Health可分別取得動態及靜態能量,但皆需額外有穿戴裝置才可取得,靜態能量一般常見的運動手環也無法取得;Google Fit的部分則是將動態靜態卡路里加總提供,未提供分別的數值,需要自行透過公式去計算,較為麻煩。
上表則整理Apple Health與Google Fit使用層面的差異。