付娟娟
(周口師范學(xué)院計(jì)算機(jī)學(xué)院,河南 周口 466001)
智能化移動終端的使用已經(jīng)普及,智能手機(jī)在高校學(xué)生中也占有了很大的市場份額。因此,如何充分及時有效地通過推送技術(shù)將學(xué)生最新的成績信息以及學(xué)校最新的資訊即時發(fā)送到手機(jī)上,不再需要學(xué)生通過電腦不停刷新來檢查服務(wù)器更新,這種便捷、及時、有效的信息推送應(yīng)成為學(xué)校所關(guān)注的重要問題。建立一個以Push為技術(shù)支持的學(xué)生成績推送管理平臺,實(shí)現(xiàn)服務(wù)器將成績信息推送至手機(jī)終端,減少了用戶手動查詢或檢查信息更新的繁瑣,還為學(xué)校信息發(fā)布、統(tǒng)一管理提供了便利。本文設(shè)計(jì)與實(shí)現(xiàn)了基于該平臺的學(xué)生成績推送系統(tǒng)。
在發(fā)布訂閱模型中,采用分層結(jié)構(gòu)中的內(nèi)容作為主題把點(diǎn)對點(diǎn)模型里僅有的一個目的地給替換掉,這種通信方式采取松耦合、不同步的模式[1]。發(fā)布某個主題供多個應(yīng)用程序進(jìn)行訂閱,而對于其它應(yīng)用程序卻不知道發(fā)送方是誰。先將一個主題發(fā)送給接收方去訂閱,消息中間件再作為代理服務(wù)器將該主題里的消息發(fā)送給全部訂閱方。
SharedPreferences采用的“鍵-值”對方式是Android系統(tǒng)采取的五種數(shù)據(jù)存儲方式中能夠存儲配置相對簡單的一種“輕量級”機(jī)制,使用Map數(shù)據(jù)結(jié)構(gòu)將數(shù)據(jù)存儲到程序apk的安裝目錄下的XML文件中,這種存儲方式實(shí)現(xiàn)比較簡單,常用來實(shí)現(xiàn)密碼設(shè)置或發(fā)布/訂閱的配置[2]。
采用IBM開發(fā)的MQTT協(xié)議根據(jù)主題作為訂閱者與發(fā)布者的連接,完成通信的發(fā)布和訂閱。利用MQTT協(xié)議,代理服務(wù)器broker作為發(fā)布者可以用訂閱的不同層次需求的信息準(zhǔn)確地發(fā)送到訂閱者的手機(jī)里[3]。這種輕量級的即時通訊協(xié)議使用發(fā)布/訂閱的消息傳遞模式,允許一條消息只發(fā)布一次,即可被多個應(yīng)用程序/設(shè)備所接收,實(shí)現(xiàn)系統(tǒng)間的松耦合,簡化了系統(tǒng)開發(fā),具有很強(qiáng)的擴(kuò)展能力;不同的手機(jī)客戶端只要連接上服務(wù)器,可以告訴服務(wù)器自己需要接收哪些消息,未訂閱的信息就不會接收過來。在移動設(shè)備使用上節(jié)省電量,提供一對多的消息發(fā)布,采用TCP/IP提供網(wǎng)絡(luò)連接,還應(yīng)用于低帶寬、不可靠連接、低CPU內(nèi)存資源消耗上。
傳統(tǒng)的查詢模式只能通過有線網(wǎng)絡(luò)自主查閱,但缺乏統(tǒng)一的管理,缺乏實(shí)時性與便捷性,無法防止信息泄露。因此,針對系統(tǒng)中采用的Android移動服務(wù)體系,根據(jù)學(xué)校面向?qū)W生進(jìn)行的信息推送,并結(jié)合客戶端的實(shí)際需要,可通過應(yīng)用服務(wù)器、手機(jī)客戶端和代理服務(wù)器來完成整個流程。應(yīng)用服務(wù)器負(fù)責(zé)推送學(xué)生成績及Android客戶端程序的控制管理,以Android Notification的方式提示學(xué)生終端。手機(jī)客戶端則用來接收院系部門發(fā)來的新聞消息或?qū)Ψ?wù)器命令的應(yīng)答,并向用戶提供一個查看、搜索模塊。
結(jié)合學(xué)校學(xué)生成績傳送需求并考慮移動智能終端的特性,選用發(fā)布-訂閱機(jī)制與智能終端保持網(wǎng)絡(luò)通訊協(xié)議的長連接完成數(shù)據(jù)推送過程中的網(wǎng)絡(luò)通信。整個系統(tǒng)主要包括應(yīng)用服務(wù)器、移動手機(jī)客戶端和代理服務(wù)器。代理服務(wù)器(即中間件)將智能終端訂閱的主題發(fā)送給管理端(即信息發(fā)布方)從而得到信息反饋,來實(shí)現(xiàn)對智能終端的遠(yuǎn)程管理和發(fā)布命令。而系統(tǒng)中代理服務(wù)器則實(shí)現(xiàn)信息的實(shí)時推送,接收來自應(yīng)用服務(wù)器發(fā)布過來的信息并將其保存,然后再推送給手機(jī)客戶端。應(yīng)用服務(wù)器不但可以當(dāng)作Web服務(wù)器,還能當(dāng)作手機(jī)客戶端回復(fù)信息的訂閱方。系統(tǒng)的框架圖如下圖1所示:
圖1 系統(tǒng)架構(gòu)圖
結(jié)合系統(tǒng)的總體結(jié)構(gòu)分析,構(gòu)建應(yīng)用服務(wù)器所需的系統(tǒng)數(shù)據(jù)庫如表1所示:
表1 系統(tǒng)數(shù)據(jù)庫說明
其中,成績信息記錄表,其包含的字段有學(xué)號(主鍵)、姓名、課程名、成績、所屬院系、發(fā)布人、發(fā)布時間和點(diǎn)擊數(shù)。學(xué)生通過網(wǎng)頁或手機(jī)客戶端瀏覽查看成績記錄表,它保存了管理員發(fā)布的所有院系的各科成績信息。
使用PHP開發(fā)的應(yīng)用程序需要基于Web服務(wù),其工作流程是:PHP應(yīng)用程序服務(wù)器運(yùn)行時要與Web服務(wù)器協(xié)同工作,當(dāng)客戶端在瀏覽器中輸入對以.php為擴(kuò)展名的網(wǎng)頁請求時,瀏覽器會把請求傳遞到Web服務(wù)器,這個請求要適當(dāng)?shù)匕徽埱蟮捻撁?;Web服務(wù)器在自己的系統(tǒng)里查詢并識別該擴(kuò)展名,再將查詢到的整個頁傳送給PHP應(yīng)用程序服務(wù)器。服務(wù)器會針對文件源代碼進(jìn)行編碼轉(zhuǎn)換,再作為響應(yīng)發(fā)送到用戶客戶端。
代理服務(wù)器(即中間件)將智能終端訂閱的主題發(fā)送給管理端(即信息發(fā)布方)從而得到信息反饋,來實(shí)現(xiàn)對智能終端的遠(yuǎn)程管理和發(fā)布命令[4]。應(yīng)用服務(wù)器根據(jù)智能終端訂閱的特定主題,用來接受從客戶端返回的信息。其中,加入代理服務(wù)器使得管理端與智能終端在空間、時間和控制流上的通信完全解耦,這種方式對于移動網(wǎng)絡(luò)的高度動態(tài)環(huán)境特別適用,為參與通信的雙方進(jìn)行消息傳遞提供高效可靠的推送服務(wù)。由于系統(tǒng)中存在大量的訂閱與發(fā)布,代理服務(wù)器需要具備的功能如圖2所示:
圖2 代理服務(wù)器結(jié)構(gòu)
對于手機(jī)客戶端需要構(gòu)建成績信息表和推送日志記錄表來存儲數(shù)據(jù)信息。其中,成績信息記錄表包含學(xué)生學(xué)號、姓名、課程名、成績、發(fā)布人和發(fā)布時間等。推送日志記錄表包含推送指令、推送內(nèi)容、推送時間、終端反饋時間及反饋結(jié)果這些內(nèi)容完整記錄了成績信息的整個推送過程,也包括了客戶端接收信息后的反饋結(jié)果。不但方便查看記錄,還為以后軟件升級提供了依據(jù)。
在Android中,用戶登錄及密碼修改需要對某些很小型的數(shù)據(jù)或軟件的參數(shù)進(jìn)行保存,我們也可借助SharedPreferences類將密碼保存到XML文件中。在啟動登陸界面的時如開啟了用戶的自動登陸功能,則直接進(jìn)入系統(tǒng),并把flag的值改為1,若在默認(rèn)狀況或關(guān)閉自動登錄時,把flag設(shè)為0。在Activity組件中,利用onResume()方法先確定標(biāo)志flag是否為1,如果是,則取出用戶名和密碼進(jìn)行自動登錄[5]。
(1)登錄驗(yàn)證模塊
管理員登陸系統(tǒng)模塊進(jìn)入后臺管理時,需要用到session來實(shí)現(xiàn)信息的安全性。當(dāng)?shù)卿洺晒?,賬號、密碼等個人信息及權(quán)限都會存放到變量$_session中,登陸密碼要經(jīng)過MD5編碼后存入數(shù)據(jù)庫,對密碼的輸入及驗(yàn)證都要進(jìn)行編碼轉(zhuǎn)換。當(dāng)管理登錄成功后,多個Web頁面在應(yīng)用程序中隨意切換,session對象所存儲的變量將一直隨著會話保存而不會丟失。
(2)終端管理模塊
終端管理模塊是院系管理員用來添加本院系學(xué)生的Android終端,并通過手機(jī)的唯一識別IMEI與學(xué)生信息表相關(guān)聯(lián),而IMEI也是Android信息表的主關(guān)鍵字,管理員利用它查詢到學(xué)生手機(jī)終端的學(xué)號、手機(jī)型號、手機(jī)號、SIM卡更換時間等等,再由信息表里的學(xué)號關(guān)聯(lián)到學(xué)生的基本情況信息表,實(shí)現(xiàn)對學(xué)生添加、刪除或更改等操作。
(3)推送管理模塊
管理員在確定客戶端所訂閱的主題后,根據(jù)對應(yīng)的ID、課程名、成績、發(fā)布時間、所屬院系等信息構(gòu)造推送的消息。要把消息發(fā)布到departments院系表里需要連接MQTT服務(wù)器并調(diào)用SAMConnection類中的Connect函數(shù)與Send函數(shù),再由代理服務(wù)器把該消息的ID、課程名及成績推送到訂閱該主題的學(xué)生客戶端上,客戶端收到的該消息后,只要連接應(yīng)用服務(wù)器即可根據(jù)ID解析并獲取詳細(xì)的信息。管理員通過students學(xué)生信息表和phones手機(jī)信息表確定某個學(xué)生的IMEI號來查詢訂閱的主題,而終端所訂閱的主題可以是一個或多個,命令發(fā)布時根據(jù)所需選擇多個命令同時發(fā)送即可。當(dāng)消息到達(dá)客戶端之后,再依次解析并做出響應(yīng)。
(1)用戶登錄及密碼修改功能實(shí)現(xiàn)
在使用客戶端程序時為保護(hù)系統(tǒng)的安全要求用戶先登陸系統(tǒng)才能操作系統(tǒng),尤其是手機(jī)失竊之后,有密碼的保護(hù)可避免他人惡意的修改設(shè)置,造成系統(tǒng)無法接收服務(wù)器推送的命令。
采用Context.MODE_PRIVATE操作模式調(diào)用getShared-Preferences()函數(shù)來獲取一個SharedPreferences對象實(shí)例,然后通過getString()函數(shù)取出保存的用戶名和密碼,與用戶所填寫的進(jìn)行比對,如果填寫正確則進(jìn)入系統(tǒng),否則會提示“密碼錯誤,請重新輸入”并清空填寫的密碼。SharedPreferences接口本身沒有提供寫入數(shù)據(jù),不過可借助其內(nèi)部的edit()函數(shù)來獲取對應(yīng)的Editor對象,并利用Editor對象的putString()函數(shù)來修改指定的Key值,最后使用commit()函數(shù)提交即可在XML中保存修改后的新密碼。整個密碼校驗(yàn)過程如圖4所示。
(2)系統(tǒng)設(shè)置功能實(shí)現(xiàn)
系統(tǒng)設(shè)置功能模塊主要用來啟動系統(tǒng)服務(wù)、部門主題設(shè)置和SIM卡更換提示。
部門主題設(shè)置要根據(jù)客戶端所在院系的不同來訂閱所需主題。由前文中對手機(jī)客戶端的主題空間設(shè)計(jì)可知,主題要明確客戶端所屬院系和IMEI,用戶可從下拉列表框里找到自己所在院系名稱選擇,IMEI是根據(jù)手機(jī)自動獲取的,可利用TelephonyManager類中的getDeviceld()方法返回唯一的設(shè)備IMEI號。
對用戶SIM卡的更換感知進(jìn)行實(shí)時監(jiān)控,要利用get-SimState()可獲取手機(jī)當(dāng)前狀態(tài),當(dāng)手機(jī)發(fā)生失竊被惡意換卡時,可以向指定的安全號碼發(fā)送提示短信,通過發(fā)送的刪除指令,客戶端后臺會啟動Service將所有短信、聯(lián)系人、SD卡中的數(shù)據(jù)刪除或上傳,保護(hù)手記手機(jī)里的信息安全。
圖驗(yàn)4證 流密程碼驗(yàn)證流程
在設(shè)置好所有訂閱主題后,將系統(tǒng)服務(wù)開啟,它是將Service開啟以保持后臺與代理服務(wù)器之間的長連接,使得客戶端能夠接收到管理員推送過來的信息和指令,而且要將這種服務(wù)設(shè)置為開機(jī)自啟動。
(3)備份刪除功能實(shí)現(xiàn)
備份刪除功能主要是將手機(jī)中保存的聯(lián)系方式、短信息及特定文件夾下的文件信息進(jìn)行保存或刪除。在刪除文件時,操作過程比較容易實(shí)現(xiàn),只需查詢“文件管理”中文件存儲的位置,選中點(diǎn)擊刪除即可。
在備份客戶端中獲取所有聯(lián)系人時需要用URI去查找數(shù)據(jù),它所指向的是:“content://com.android.contacts/data/phones”,而在獲取短信時用SMS_URI_ALL="content://sms/";其中,URI一般是由三部分組成:訪問資源的命名機(jī)制、存放資源的主機(jī)名、資源自身的名稱。URI前綴采用標(biāo)準(zhǔn)的“content://”來表示,其含義是指Android只能在ContentProvider中選出一個來對URI進(jìn)行處理。
系統(tǒng)測試采取長連接推送方式,對功能模塊進(jìn)行測試,驗(yàn)證系統(tǒng)的可實(shí)現(xiàn)性,客戶端能夠?qū)崟r接收推送信息及命令,并對服務(wù)器進(jìn)行反饋,相關(guān)輔助功能也都可以正常使用并達(dá)到預(yù)定要求?;贏ndroid的學(xué)生成績推送系統(tǒng)的基本結(jié)構(gòu)雖已完成,系統(tǒng)安全與數(shù)據(jù)庫的建立還不全面,針對不同的需求分析還有很多具體的功能有待設(shè)計(jì)與分析。
[1]黃河清,陳文.Android平臺消息推送服務(wù)的實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2014,18:53-55.
[2]楊亮,袁嵩,蔣鵬,等.基于Android平臺的數(shù)據(jù)存儲機(jī)制應(yīng)用研究[J].電腦知識與技術(shù),2014,11:2481-2484.
[3]任亨.基于MQTT協(xié)議的消息推送集群系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].中國科學(xué)院研究生院(沈陽計(jì)算技術(shù)研究所),2014.
[4]張宗利.基于信息推送技術(shù)的公選平臺消息子系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].東華大學(xué),2014.
[5]鄒春剛.基于移動互聯(lián)網(wǎng)應(yīng)用的可靠數(shù)據(jù)推送方法[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2014,06:49-50.