路瀚程,霍小衛(wèi)
鄭州西亞斯學(xué)院信息化建設(shè)與管理處,河南鄭州,450000
隨著城市功能服務(wù)的聚集性增強(qiáng),流動人口管控問題日益突出,如何解決流動人員的登記和安全問題,確保社會和治安狀況處于可控和可查,是中國許多城市面臨的巨大挑戰(zhàn)。本文以某中心城市試點(diǎn)實(shí)行利用PDA智能讀卡設(shè)備對城中所有中小旅館的旅客進(jìn)行信息采集為研究對象,探討利用H5混合開發(fā)技術(shù)開發(fā)一種APP服務(wù)平臺并調(diào)用PDA的讀卡設(shè)備對旅客信息進(jìn)行實(shí)時采集和上傳,公安部門可后臺實(shí)時監(jiān)控城市各種小旅館的人員住店和離店,并對異常人員信息進(jìn)行預(yù)警和分析處理。
移動互聯(lián)網(wǎng)應(yīng)用開發(fā)從技術(shù)路線上分為移動中間件、原生態(tài)和混合式開發(fā)Hybrid APP等,三種路線各有優(yōu)劣?;谥虚g件平臺的移動開發(fā)模式適用于已經(jīng)具有成熟業(yè)務(wù)系統(tǒng)的前提下,該模式開發(fā)效率高、成本低、周期短,但同時所開發(fā)的移動客戶端功能受限于現(xiàn)有業(yè)務(wù)系統(tǒng)的功能,無法做深度開發(fā);原生態(tài)開發(fā)模式適用于沒有現(xiàn)成業(yè)務(wù)系統(tǒng)并且對移動客戶端的功能和界面定制要求較高的前提下,該模式開發(fā)效率低、成本高、周期長,開發(fā)的客戶端功能更加豐富、用戶體驗(yàn)更加良好,能支持直接對移動設(shè)備的原生功能調(diào)用;混合模式開發(fā)允許使用本地資源的調(diào)用能力,所開發(fā)出來的APP具備跨端運(yùn)行能力[1]。經(jīng)過對比實(shí)際開發(fā)需求和技術(shù)結(jié)構(gòu),我們選擇使用混合開發(fā)模式作為開發(fā)環(huán)境。
CORDOVA技術(shù)的產(chǎn)生為混合開發(fā)提供了可編輯的原生功能調(diào)用方式,可以在不使用ANDROID或者IOS的情況下實(shí)現(xiàn)設(shè)備驅(qū)動。本文所描述的項(xiàng)目中關(guān)于使用PDA讀取公民身份證的信息即是通過該技術(shù)實(shí)現(xiàn),其中PDA提供了讀取公民身份證的標(biāo)準(zhǔn)ANDROID SDK包,利用CORDOVA技術(shù)對該二次開發(fā)包進(jìn)行的重新定義和封裝,使得可以通過一個JS文件實(shí)現(xiàn)對接口中身份證讀取方法的調(diào)用。
HTML5是一種標(biāo)準(zhǔn)的前端開發(fā)語言,目前能支持該語言的開發(fā)工具很多,比如:HBuilder、WEX5等,經(jīng)過對不同工具的試用和比較,我們發(fā)現(xiàn)在快速開發(fā)、一站式部署以及對CORDOVA插件的支持等方面,WEX5更符合本文開發(fā)需求[2]。WEX5是一個完全開源的移動開發(fā)工具,它不僅具備主流移動開發(fā)技術(shù)所必需的功能,更重要的是它支持所有對移動設(shè)備的CORDOVA插件,在進(jìn)行文字、通信、圖片、音視頻等方面只需通過簡單的JS開發(fā)即可實(shí)現(xiàn)原生功能調(diào)用。
REST API提供了一組設(shè)計(jì)原則和約束條件,交互在請求和響應(yīng)之間是無狀態(tài)的,服務(wù)器在請求之間重啟都不會對客戶端造成影響,基于這個風(fēng)格設(shè)計(jì)的軟件更簡潔、更有層次、更易于實(shí)現(xiàn)緩存等機(jī)制[3]。在本應(yīng)用中,需要采集旅客身份信息并實(shí)時上傳服務(wù)器,通過在服務(wù)器端創(chuàng)建REST API服務(wù),利用WEX5實(shí)現(xiàn)對REST服務(wù)的調(diào)用,從而實(shí)現(xiàn)客戶端與服務(wù)器端的數(shù)據(jù)交換。
移動旅客信息采集平臺功能包括存儲過程模塊、NVO插件、SatRda狀態(tài)監(jiān)測模塊、身份證讀取CORDOVA調(diào)用模塊、數(shù)據(jù)采集模塊以及設(shè)備拍照模塊等。其中,存儲過程轉(zhuǎn)換為標(biāo)準(zhǔn)的REST API服務(wù)給前端使用,NVO插件實(shí)現(xiàn)旅店信息邏輯計(jì)算,SatRda模塊將存儲過程和NVO插件轉(zhuǎn)換為REST服務(wù),身份證讀取模塊通過調(diào)用CORDOVA插件讀取身份證信息,數(shù)據(jù)采集AJAX實(shí)現(xiàn)前端和后端REST服務(wù)的通信,原生照相模塊實(shí)現(xiàn)對旅客照片的實(shí)時采集和上傳。
基于上述原理實(shí)現(xiàn)“旅客信息上傳”的存儲過程(sp_t_floating_info),通過JAVA等開發(fā)工具設(shè)計(jì)為標(biāo)準(zhǔn)的NVO對象,SatRda根據(jù)自己的運(yùn)行處理機(jī)制將該NVO對象運(yùn)行GOLANG語言配置為可進(jìn)行遠(yuǎn)程過程調(diào)用的REST服務(wù)。旅客信息采集過程中,可通過H5代碼以及JS對該REST API進(jìn)行調(diào)用,從而實(shí)現(xiàn)移動端的數(shù)據(jù)采集上傳。數(shù)據(jù)采集的部分核心代碼如圖1所示。
圖1 公民身份信息讀取上傳的實(shí)現(xiàn)
利用CORDOVA插件實(shí)現(xiàn)信息采集的過程如下:首先,利用Android環(huán)境對身份證信息讀取過程進(jìn)行原生開發(fā),編寫讀取身份證的JAVA類和讀卡方法;然后,基于該類編寫JS方法調(diào)用類中的讀卡方法并配置在配置文件中,用JS根據(jù)配置文件路徑執(zhí)行調(diào)用并回調(diào);最后,將編寫好的文件按照CORDOVA標(biāo)準(zhǔn)封裝過程進(jìn)行封裝,將該插件部署到WEX5的開發(fā)環(huán)境中,H5的前端利用JS調(diào)用封裝好的CORDOVA插件實(shí)現(xiàn)對身份證的讀卡操作[4]。
本項(xiàng)目使用的PDA是身份證專用讀取設(shè)備,對身份證的讀取過程通過標(biāo)準(zhǔn)的處理過程實(shí)現(xiàn),包括上電IDCardPonwer1操作、實(shí)例化HsSerial操作、打開設(shè)備Init操作、卡認(rèn)證Authenticate操作、讀卡Read_Card操作、照片解碼Unpack操作、退出Close操作等[5],該邏輯過程為系列化和事務(wù)化,通過統(tǒng)一的JAVA類和讀卡方法進(jìn)行封裝實(shí)現(xiàn)。讀卡部分核心代碼如下:
獲得設(shè)備控制實(shí)例以后,需進(jìn)行上電和打開操作,該部分操作耗費(fèi)一定的時間,需要將其放在新線程中執(zhí)行并提示用戶正在上電和打開設(shè)備,在進(jìn)行多次連續(xù)設(shè)備使用的時候,不需要每次都執(zhí)行上電、打開再關(guān)閉、斷電操作,此操作流程僅需執(zhí)行一次,在長時間不再使用設(shè)備的時候調(diào)用關(guān)閉和斷電方法。
WEX5平臺封裝了進(jìn)行設(shè)備拍照的原聲調(diào)用插件,只需要將該CORDOVA插件引入WEX5平臺并調(diào)用即可。手機(jī)拍照過程中,拍照參數(shù)有兩種:一種是DATA_URL模式,即拍照返回的照片是Base64位格式;一種是FILE_URI格式,即拍照返回的是文件目錄。第一種模式支持直接將調(diào)用返回的值上傳至服務(wù)器但無法保存至本地,第二種模式支持將圖片保存在本地但無法直接上傳服務(wù)器。
采用拍照插件的開發(fā)需要注意如下事項(xiàng):拍照插件的getpicture方法參數(shù)中destinationType定義拍照的圖片產(chǎn)生的模式,JS因?yàn)榘踩珕栴}不能直接讀取絕對路徑下的圖片,展現(xiàn)圖片如果采用DATA_URL模式,返回的內(nèi)容為Base64為字符串,必須通過DATA_URL轉(zhuǎn)為Base64,再將該值賦值給img圖片組件,在該模式下圖片無法保存到手機(jī)本地圖片庫,同時無法將圖片轉(zhuǎn)存到數(shù)據(jù)庫保存。如果選擇FILE_URI模式,返回的是圖片的絕對路徑地址并保存在本地圖片庫中,該方式存在的問題是由于JS不支持直接使用本地路徑,必須將FILE_URI模式返回的圖片路徑轉(zhuǎn)Base64位方式后,再賦值給img圖片組件。
WEX5提供數(shù)據(jù)組件綁定數(shù)據(jù)輸出,本文旅客信息展現(xiàn)模塊采用Listgroup組件方式,將旅客住宿信息和照片按照列表組的方式進(jìn)行展現(xiàn)。旅客內(nèi)容通過數(shù)據(jù)組件綁定方式獲取到數(shù)據(jù)庫中的數(shù)據(jù),旅客照片通過JS調(diào)用本地圖片存儲庫實(shí)現(xiàn)展現(xiàn)。具體實(shí)現(xiàn)過程如下:①新建數(shù)據(jù)組件checklistdata,定義數(shù)據(jù)組件的字段及字段類型;②定義數(shù)據(jù)庫的REST服務(wù),將旅客信息展現(xiàn)的內(nèi)容以服務(wù)形式拋出;③設(shè)置數(shù)據(jù)組件和REST服務(wù)的綁定關(guān)系,組件字段和REST接口字段的映射;④設(shè)置數(shù)據(jù)展現(xiàn)控件,將控件使用的數(shù)據(jù)源設(shè)置為數(shù)據(jù)組件字段;⑤執(zhí)行數(shù)據(jù)加載操作,將旅客住宿信息展現(xiàn)到頁面上。實(shí)現(xiàn)代碼如下:
AJAX可以使網(wǎng)頁實(shí)現(xiàn)異步更新,這種交互式方式對用戶來說最直觀的感受是在進(jìn)行頁面刷新時感覺不到頁面重新加載的閃動[6]。本項(xiàng)目中利用AJAX功能實(shí)現(xiàn)了旅客住宿信息和公安系統(tǒng)的同步,實(shí)現(xiàn)過程如下:首先,使用PDA設(shè)備讀取旅客身份證并進(jìn)行拍照;然后登記旅客住宿的信息,調(diào)用REST進(jìn)行權(quán)限驗(yàn)證和有效性驗(yàn)證;最后,調(diào)用AJAX完成旅客信息的上傳和同步并返回處理結(jié)果。該功能的部分核心代碼如下:
WEX5是一種新的HTML5開發(fā)平臺,相比原生開發(fā)有較大的優(yōu)勢,CORDOVA作為Apache的開源項(xiàng)目,在開源插件平臺上也有大量開發(fā)者貢獻(xiàn)的高質(zhì)量原生調(diào)用插件,這些都為混合式開發(fā)提供了堅(jiān)實(shí)的技術(shù)基礎(chǔ)。本文所述的移動應(yīng)用項(xiàng)目就是利用這種混合式開發(fā)技術(shù)實(shí)施的實(shí)際案例,整個開發(fā)過程無論從成本上還是時間上,都要比原生開發(fā)具有更強(qiáng)的優(yōu)勢,作為移動互聯(lián)網(wǎng)發(fā)展的新業(yè)態(tài),基于CORDOVA和H5的混合式開發(fā)模式是值得嘗試的選擇。