付娟娟
(周口師范學院計算機學院,河南 周口 466001)
智能化移動終端的使用已經普及,智能手機在高校學生中也占有了很大的市場份額。因此,如何充分及時有效地通過推送技術將學生最新的成績信息以及學校最新的資訊即時發送到手機上,不再需要學生通過電腦不停刷新來檢查服務器更新,這種便捷、及時、有效的信息推送應成為學校所關注的重要問題。建立一個以Push為技術支持的學生成績推送管理平臺,實現服務器將成績信息推送至手機終端,減少了用戶手動查詢或檢查信息更新的繁瑣,還為學校信息發布、統一管理提供了便利。本文設計與實現了基于該平臺的學生成績推送系統。
在發布訂閱模型中,采用分層結構中的內容作為主題把點對點模型里僅有的一個目的地給替換掉,這種通信方式采取松耦合、不同步的模式[1]。發布某個主題供多個應用程序進行訂閱,而對于其它應用程序卻不知道發送方是誰。先將一個主題發送給接收方去訂閱,消息中間件再作為代理服務器將該主題里的消息發送給全部訂閱方。
SharedPreferences采用的“鍵-值”對方式是Android系統采取的五種數據存儲方式中能夠存儲配置相對簡單的一種“輕量級”機制,使用Map數據結構將數據存儲到程序apk的安裝目錄下的XML文件中,這種存儲方式實現比較簡單,常用來實現密碼設置或發布/訂閱的配置[2]。
采用IBM開發的MQTT協議根據主題作為訂閱者與發布者的連接,完成通信的發布和訂閱。利用MQTT協議,代理服務器broker作為發布者可以用訂閱的不同層次需求的信息準確地發送到訂閱者的手機里[3]。這種輕量級的即時通訊協議使用發布/訂閱的消息傳遞模式,允許一條消息只發布一次,即可被多個應用程序/設備所接收,實現系統間的松耦合,簡化了系統開發,具有很強的擴展能力;不同的手機客戶端只要連接上服務器,可以告訴服務器自己需要接收哪些消息,未訂閱的信息就不會接收過來。在移動設備使用上節省電量,提供一對多的消息發布,采用TCP/IP提供網絡連接,還應用于低帶寬、不可靠連接、低CPU內存資源消耗上。
傳統的查詢模式只能通過有線網絡自主查閱,但缺乏統一的管理,缺乏實時性與便捷性,無法防止信息泄露。因此,針對系統中采用的Android移動服務體系,根據學校面向學生進行的信息推送,并結合客戶端的實際需要,可通過應用服務器、手機客戶端和代理服務器來完成整個流程。應用服務器負責推送學生成績及Android客戶端程序的控制管理,以Android Notification的方式提示學生終端。手機客戶端則用來接收院系部門發來的新聞消息或對服務器命令的應答,并向用戶提供一個查看、搜索模塊。
結合學校學生成績傳送需求并考慮移動智能終端的特性,選用發布-訂閱機制與智能終端保持網絡通訊協議的長連接完成數據推送過程中的網絡通信。整個系統主要包括應用服務器、移動手機客戶端和代理服務器。代理服務器(即中間件)將智能終端訂閱的主題發送給管理端(即信息發布方)從而得到信息反饋,來實現對智能終端的遠程管理和發布命令。而系統中代理服務器則實現信息的實時推送,接收來自應用服務器發布過來的信息并將其保存,然后再推送給手機客戶端。應用服務器不但可以當作Web服務器,還能當作手機客戶端回復信息的訂閱方。系統的框架圖如下圖1所示:

圖1 系統架構圖
結合系統的總體結構分析,構建應用服務器所需的系統數據庫如表1所示:

表1 系統數據庫說明
其中,成績信息記錄表,其包含的字段有學號(主鍵)、姓名、課程名、成績、所屬院系、發布人、發布時間和點擊數。學生通過網頁或手機客戶端瀏覽查看成績記錄表,它保存了管理員發布的所有院系的各科成績信息。
使用PHP開發的應用程序需要基于Web服務,其工作流程是:PHP應用程序服務器運行時要與Web服務器協同工作,當客戶端在瀏覽器中輸入對以.php為擴展名的網頁請求時,瀏覽器會把請求傳遞到Web服務器,這個請求要適當地包含被請求的頁面;Web服務器在自己的系統里查詢并識別該擴展名,再將查詢到的整個頁傳送給PHP應用程序服務器。服務器會針對文件源代碼進行編碼轉換,再作為響應發送到用戶客戶端。
代理服務器(即中間件)將智能終端訂閱的主題發送給管理端(即信息發布方)從而得到信息反饋,來實現對智能終端的遠程管理和發布命令[4]。應用服務器根據智能終端訂閱的特定主題,用來接受從客戶端返回的信息。其中,加入代理服務器使得管理端與智能終端在空間、時間和控制流上的通信完全解耦,這種方式對于移動網絡的高度動態環境特別適用,為參與通信的雙方進行消息傳遞提供高效可靠的推送服務。由于系統中存在大量的訂閱與發布,代理服務器需要具備的功能如圖2所示:

圖2 代理服務器結構
對于手機客戶端需要構建成績信息表和推送日志記錄表來存儲數據信息。其中,成績信息記錄表包含學生學號、姓名、課程名、成績、發布人和發布時間等。推送日志記錄表包含推送指令、推送內容、推送時間、終端反饋時間及反饋結果這些內容完整記錄了成績信息的整個推送過程,也包括了客戶端接收信息后的反饋結果。不但方便查看記錄,還為以后軟件升級提供了依據。
在Android中,用戶登錄及密碼修改需要對某些很小型的數據或軟件的參數進行保存,我們也可借助SharedPreferences類將密碼保存到XML文件中。在啟動登陸界面的時如開啟了用戶的自動登陸功能,則直接進入系統,并把flag的值改為1,若在默認狀況或關閉自動登錄時,把flag設為0。在Activity組件中,利用onResume()方法先確定標志flag是否為1,如果是,則取出用戶名和密碼進行自動登錄[5]。
(1)登錄驗證模塊
管理員登陸系統模塊進入后臺管理時,需要用到session來實現信息的安全性。當登錄成功后,賬號、密碼等個人信息及權限都會存放到變量$_session中,登陸密碼要經過MD5編碼后存入數據庫,對密碼的輸入及驗證都要進行編碼轉換。當管理登錄成功后,多個Web頁面在應用程序中隨意切換,session對象所存儲的變量將一直隨著會話保存而不會丟失。
(2)終端管理模塊
終端管理模塊是院系管理員用來添加本院系學生的Android終端,并通過手機的唯一識別IMEI與學生信息表相關聯,而IMEI也是Android信息表的主關鍵字,管理員利用它查詢到學生手機終端的學號、手機型號、手機號、SIM卡更換時間等等,再由信息表里的學號關聯到學生的基本情況信息表,實現對學生添加、刪除或更改等操作。
(3)推送管理模塊
管理員在確定客戶端所訂閱的主題后,根據對應的ID、課程名、成績、發布時間、所屬院系等信息構造推送的消息。要把消息發布到departments院系表里需要連接MQTT服務器并調用SAMConnection類中的Connect函數與Send函數,再由代理服務器把該消息的ID、課程名及成績推送到訂閱該主題的學生客戶端上,客戶端收到的該消息后,只要連接應用服務器即可根據ID解析并獲取詳細的信息。管理員通過students學生信息表和phones手機信息表確定某個學生的IMEI號來查詢訂閱的主題,而終端所訂閱的主題可以是一個或多個,命令發布時根據所需選擇多個命令同時發送即可。當消息到達客戶端之后,再依次解析并做出響應。
(1)用戶登錄及密碼修改功能實現
在使用客戶端程序時為保護系統的安全要求用戶先登陸系統才能操作系統,尤其是手機失竊之后,有密碼的保護可避免他人惡意的修改設置,造成系統無法接收服務器推送的命令。
采用Context.MODE_PRIVATE操作模式調用getShared-Preferences()函數來獲取一個SharedPreferences對象實例,然后通過getString()函數取出保存的用戶名和密碼,與用戶所填寫的進行比對,如果填寫正確則進入系統,否則會提示“密碼錯誤,請重新輸入”并清空填寫的密碼。SharedPreferences接口本身沒有提供寫入數據,不過可借助其內部的edit()函數來獲取對應的Editor對象,并利用Editor對象的putString()函數來修改指定的Key值,最后使用commit()函數提交即可在XML中保存修改后的新密碼。整個密碼校驗過程如圖4所示。
(2)系統設置功能實現
系統設置功能模塊主要用來啟動系統服務、部門主題設置和SIM卡更換提示。
部門主題設置要根據客戶端所在院系的不同來訂閱所需主題。由前文中對手機客戶端的主題空間設計可知,主題要明確客戶端所屬院系和IMEI,用戶可從下拉列表框里找到自己所在院系名稱選擇,IMEI是根據手機自動獲取的,可利用TelephonyManager類中的getDeviceld()方法返回唯一的設備IMEI號。
對用戶SIM卡的更換感知進行實時監控,要利用get-SimState()可獲取手機當前狀態,當手機發生失竊被惡意換卡時,可以向指定的安全號碼發送提示短信,通過發送的刪除指令,客戶端后臺會啟動Service將所有短信、聯系人、SD卡中的數據刪除或上傳,保護手記手機里的信息安全。

圖驗4證 流密程碼驗證流程
在設置好所有訂閱主題后,將系統服務開啟,它是將Service開啟以保持后臺與代理服務器之間的長連接,使得客戶端能夠接收到管理員推送過來的信息和指令,而且要將這種服務設置為開機自啟動。
(3)備份刪除功能實現
備份刪除功能主要是將手機中保存的聯系方式、短信息及特定文件夾下的文件信息進行保存或刪除。在刪除文件時,操作過程比較容易實現,只需查詢“文件管理”中文件存儲的位置,選中點擊刪除即可。
在備份客戶端中獲取所有聯系人時需要用URI去查找數據,它所指向的是:“content://com.android.contacts/data/phones”,而在獲取短信時用SMS_URI_ALL="content://sms/";其中,URI一般是由三部分組成:訪問資源的命名機制、存放資源的主機名、資源自身的名稱。URI前綴采用標準的“content://”來表示,其含義是指Android只能在ContentProvider中選出一個來對URI進行處理。
系統測試采取長連接推送方式,對功能模塊進行測試,驗證系統的可實現性,客戶端能夠實時接收推送信息及命令,并對服務器進行反饋,相關輔助功能也都可以正常使用并達到預定要求?;贏ndroid的學生成績推送系統的基本結構雖已完成,系統安全與數據庫的建立還不全面,針對不同的需求分析還有很多具體的功能有待設計與分析。
[1]黃河清,陳文.Android平臺消息推送服務的實現[J].電腦編程技巧與維護,2014,18:53-55.
[2]楊亮,袁嵩,蔣鵬,等.基于Android平臺的數據存儲機制應用研究[J].電腦知識與技術,2014,11:2481-2484.
[3]任亨.基于MQTT協議的消息推送集群系統的設計與實現[D].中國科學院研究生院(沈陽計算技術研究所),2014.
[4]張宗利.基于信息推送技術的公選平臺消息子系統的設計與實現[D].東華大學,2014.
[5]鄒春剛.基于移動互聯網應用的可靠數據推送方法[J].網絡安全技術與應用,2014,06:49-50.