由於Android APP/IOS APP平臺和開發語言的差異,對開髮端和用戶端來說,在系統相容適配、外接藍牙的安裝更新,以及不同平臺之間的移植都有不同程度的制約。 ...
技術背景
隨著人們生活水平的提升,對健康的關註意識也隨之提高;另外人口結構的老齡化,慢性病發病率升高,以及新冠疫情持久廣泛的影響,進一步提高了大眾對疾病早期預防、身體數據定期自測、慢性病持續關註等各個層面的重視程度;典型的,比如體溫、血氧、血壓、體重等高頻、普遍使用的自測參數,在一些醫療器械和智能手機APP中實現可獨立操作性、實時監測性及便捷性;市場上可穿戴式醫療器械日益種類多樣、形態各異,根據功能不同可以分為運動健身類、生活娛樂類、健康醫療類、遠程式控制制類、智能開關類、信息資訊類以及多功能穿戴式醫療器械。
在技術層面近年來,無線通信技術、感測器、柔性電子、生物遙測、體域網等技術的發展,可穿戴醫療器械也早已不局限於智能手環、智能手錶等形式,我國國家藥品監督管理局批准上市的醫療級可穿戴設備有ECG心電信號測量設備、血壓測量設備、血氧測量設備、血糖測量設備;與可穿戴設備相容的智能手機醫療保健應用程式越來越多,醫療服務供應商對無線連接青睞越來越明顯,低功耗藍牙(BLE)由於其低功耗在智能穿戴終端中應用廣泛,智能手錶、智能手環,以及其它智能相關的設備,幾乎都是依靠這個技術與手機進行無線連接和數據交互的。另外,低功耗藍牙技術,可以實現短距離通信的最低功耗,這也大大延長可穿戴設備的工作時間。
與國外相比,我國可穿戴式醫療器械相對於較晚,當前市場上的可穿戴式醫療器械主要偏向於運動/睡眠監測功能,其可長時間與人體接觸,是理想的監測設備,具有廣闊的市場空間。隨著我國雲計算、大數據和5G的高速發展,醫療器械可穿戴化必是大勢所趨,可穿戴式醫療器械必將迎來良好的市場機遇。
然而由於醫療數據具有產品多樣化、平臺差異性和數據高密度的特點,所以對數據進行有效儲存、交互、傳遞以及跨平臺讀取就十分有必要,通過可穿戴式醫療器械與醫療數據云平臺相聯,實現數據的互通共用,將採集到的患者數據通過雲平臺處理,不僅患者自己可以通過雲平臺瞭解相關的診斷結果、治療方案,醫療機構也同樣可以利用雲平臺的數據制定治療措施,對患者進行跟蹤和交流。
目前穿戴設備幾乎都相容三種平臺Android APP, IOS APP, 微信小程式,各自同步實現方式(如圖1):
1. Android app 基於Android平臺JAVA作為開發語言構建。藍牙設備數據採集需要根據系統提供的Native BLE SDK 來實現 手機與 外設直接 命令與數據交互; 手機獲取到的採集數據需要採用JAVA語言來實現後續處理邏輯; 網路傳輸,以及傳輸過程中失敗處理 也一併需要考慮在內 等上述提供的6個步驟。
2. IOS APP 基於IOS平臺ObjectC作為開發語言構建。 藍牙設備數據採集需要基於IOS藍牙開發規範 實現上述提供的6個步驟。 處理流程同Android APP
3. 微信小程式 基於JavaScript語言。 藍牙設備數據採集,需要基於微信小程式 提供藍牙API 使用規範實現上述提供的6個步驟,處理流程同以上兩者 ;
圖1:平臺數據採集流程圖
存在如下痛點:
-
藍牙交互程式內置於用戶APP端
-
適配更多開發平臺, 就需要重覆實現上述6個步驟,代碼不具有可移植性和跨平臺能力;
-
如果有支持新類型藍牙設備的需求,只能發佈新版APP, 提示用戶升級安裝。藍牙協議的代碼是打包APP中,這種方式通過代碼靜態分析工具,容易被破解;用戶即使只使用一款藍牙設備,也需要下載一個龐大的APP 。
-
修複bug困難(熱修複),只能通過版本更新(需要用戶介入)才能實現,頻繁更新影響用戶體驗。尤其是 Android平臺由於大量企業安卓的系統是自身定製,軟體系統之間相容也存在困難;
總體上來說,由於Android APP/IOS APP平臺和開發語言的差異,對開髮端和用戶端來說,在系統相容適配、外接藍牙的安裝更新,以及不同平臺之間的移植都有不同程度的制約。
新技術的功能特點
基於藍牙的智能設備數據採集平臺化方案,在三種平臺(Android APP/ IOS APP/微信小程式)使用同一套藍牙設備採集代碼,應具備以下特點:
-
藍牙交互及控製程序與用戶APP解耦, 由雲端控制
-
可移植和跨平臺性:一種藍牙設備同步程式在其中一個平臺開發、調試,正常運行,移植到其他平臺依然可以正常運行支持動態加入新類型藍牙設備,綁定新類型藍牙設備後立即生效。而不是用戶頻繁卸載安裝新版的APP方式
-
具備藍牙功能模塊的熱修複能力:一種快速、低成本修複APP缺陷的地方
-
解決藍牙協議靜態打包在APP, 保護智能設備廠商知識版權
方案的整體架構
經過大量調研,和多種類型藍牙設備接入代碼實戰應用發現, 三種平臺在接入藍牙設備讀取到的數據之後,後面的數據處理,演算法邏輯是相同,只是在 Native BLE SDK部分差異較大。從這個角度來講,藍牙同步功能可以抽象為:①手機與藍牙設備交互部分;②獲取藍牙數據後續處理。
我們引入中間層設計思想:主要目的屏蔽底層差異性,並給上層提供一致的介面;中間層主要是對上層負責,屏蔽底層無規則、無協議、環境複雜的問題;如果把不同平臺的差異給屏蔽掉,那麼上層就可以專註於解決業務,而不再需要耗費精力去解決差異性。
藍牙同步架構方案有以下三層(如圖2):
原生層: Native BLE SDK部分:與藍牙設備直接交互,不同平臺實現方式,開發語言不同,實現方式也可能不同。抽象大致相同藍牙通信能力(如表1)
中間層:用於解耦業務層與原生層強依賴,屏蔽平臺,語言的差異。位於原生層與業務層之間,對上層提供統一、一致的JS BLE API
業務層:處理藍牙數據操作,可以認為是對於APP功能中屬於業務部分,不同類型藍牙設備存在不用數據處理規則. 但是不同平臺同一類型藍牙設備notify數據格式是相同的,所以處理邏輯在不同平臺是共用的。 改造之後統一業務層使用JavaScript語言開發,運行在JavaScript引擎
表1:實現藍牙常用的API(18個)
圖2:藍牙同步架構方案
可移植和跨平臺的實現
根據面向對象思想,Native BLE SDK部分:與藍牙設備直接交互,不同平臺實現方式,開發語言不同, 實現方式也可能不同;考慮到Native BLE SDK在三種不同平臺實現,藍牙實現方式通過以下三種方式解決:
-
Android APP 加入JavaScript引擎,實現Java和JavaScript的相互調用。並對Android平臺提供支持。 通過JavaScript API介面採用原生平臺JAVA代碼實現藍牙18個API, 對上層提供 JavaScript BLE API
-
IOS APP 加入 JavaScriptCore引擎, JavaScriptCore是Safari的JavaScript引擎,在iOS7之後蘋果開放了JavaScriptCore框架,開發者可以通過其提供的OC介面來使用JavaScriptCore。 通過JavaScriptCore介面採用原生平臺ObjectC實現藍牙18個API, 對上層提供 JavaScript BLE API
-
微信小程式運行環境JavaScript。只需封裝微信提供同Android/IOS相同的JS BLE API即可。僅列舉其中初始化藍牙流程,如圖3:
圖 3 微信小程式 初始化藍牙流程
經過以上3種方式,三個平臺業務代碼都可以運行在各自的 JavaScript引擎中(如圖11), 通過調用統一的JS BLE API就可以和藍牙設備進行命令,數據交互。只需在任意一個平臺編寫、調試,之後無需任何變動就可以運行在其他平臺。一種代碼(JavaScript)即可通用,內容為:
-> 連接指定設備
-> 連接成功後,發送交互命令
-> 同步並收集設備通知數據
-> 校驗、解析藍牙數據協議
-> 數據轉化業務數據, 業務數據解析,清洗,合併等處理
-> 數據上傳雲端
藍牙平臺工作流程(如圖4):
所有支持的藍牙設備類型及其對應藍牙同步程式存儲於後臺服務端, 當用戶綁定對應類型藍牙設備後。動態獲取藍牙設備程式; 當檢測到同步程式版本發生變動後重新獲取新的藍牙同步程式。同步程式下發到APP過程 採用壓縮,動態加密,傳輸加密,多次校驗客戶端合法性方式保證藍牙協議安全性。
圖4 藍牙同步數據流程
預期收益
基於藍牙的智能設備數據採集平臺化方案:
a) 藍牙設備接入效率倍增及平臺高擴展性
b) 明確人員職責,數據接入人員與APP研發可以並行研發
c) 多平臺只需維護一套代碼,降低開發後期維護成本, 提升程式穩定性
d) 不同設備類型之間同步程式物理隔離,其中一個出現錯誤不影響其他設備正常使用,每個設備都可以自由配置日誌信息,方便開發人員快速定位解決問題
e) 用戶角度,提升用戶體驗。不用經常更新APP, 就可以接入新設備,使用新功能
藍牙廠商角度:保護了藍牙協議安全性,自身知識產權和利益;
結語
這種基於藍牙的智能設備數據採集平臺化方案,只需一套JavaScript代碼方案,實現藍牙同步可移植,通用;藍牙同步程式從客戶端靜態編碼在APP轉換為後端控制方式,極大降低了藍牙同步與平臺強耦合,提升擴展能力。同時保證了APP快速適用新設備的能力,以及熱修複能力。支持APP內藍牙後臺運行, 解決心電貼等設備數據量大場景;
幫助開發者過濾了平臺差異,以及開發語言差異方面的顧慮,並且減輕了後期的更新、錯誤修複等方面維護的工作量和成本;另外,不同平臺之間的程式的相容,穩定能更好的提升用戶體驗;減少開髮端和用戶精力投入的基礎上,更好的幫助用戶實現功能和解決不同場景的問題。
作者:京東健康 於震江
來源:京東雲開發者社區