快速創(chuàng)建app平臺的研發(fā)與設(shè)計_第1頁
已閱讀1頁,還剩58頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  目錄</b></p><p><b>  1.引言1</b></p><p>  1.1 平臺的背景1</p><p>  2 相關(guān)技術(shù)介紹1</p><p>  2.1 MVC模型1</p><p>  2.2 Phalcon框架的P

2、HP技術(shù)1</p><p>  2.3 Cordova移動開發(fā)客戶端框架2</p><p>  3 平臺技術(shù)方案2</p><p>  4 快速創(chuàng)建App平臺3</p><p><b>  4.1平臺描述3</b></p><p>  4.2賬戶權(quán)限模塊3</p><

3、;p>  4.3 App模塊4</p><p>  4.4登錄與注冊模塊4</p><p><b>  4.5賬戶模塊4</b></p><p><b>  4.6管理模塊4</b></p><p>  4.7訂閱模塊模塊4</p><p>  4.8問題反饋

4、模塊5</p><p>  5快速創(chuàng)建App平臺數(shù)據(jù)庫設(shè)計5</p><p>  5.1 快速創(chuàng)建App平臺數(shù)據(jù)庫表設(shè)計5</p><p>  5.2快速創(chuàng)建App平臺數(shù)據(jù)庫E-R圖7</p><p>  5.3快速創(chuàng)建App平臺UI圖7</p><p>  6.平臺功能模塊的實(shí)現(xiàn)13</p>

5、<p>  6.1數(shù)據(jù)庫訪問的實(shí)現(xiàn)13</p><p>  6.2登錄模塊的實(shí)現(xiàn)13</p><p>  6.2.1賬戶登錄13</p><p>  6.2.2管理員登錄14</p><p>  6.3 App更新后臺模塊15</p><p>  6.3.1新增第三方QQ登錄模塊17</p

6、><p>  6.3.2實(shí)現(xiàn)填寫App類型模塊17</p><p>  6.3.4實(shí)現(xiàn)選擇App功能頁模塊18</p><p>  6.3.5實(shí)現(xiàn)選擇App樣式和顏色模塊18</p><p>  6.3.6實(shí)現(xiàn)填寫App基本信息模塊18</p><p>  6.3.7實(shí)現(xiàn)App預(yù)覽模塊19</p>

7、<p>  6.3.8實(shí)現(xiàn)App管理模塊19</p><p>  7 移動應(yīng)用開發(fā)服務(wù)關(guān)鍵技術(shù)21</p><p><b>  8 總結(jié)21</b></p><p>  快速創(chuàng)建App平臺的研發(fā)與設(shè)計</p><p>  嶺南師范學(xué)院數(shù)學(xué)與計算科學(xué)學(xué)院,湛江 524048</p><p

8、>  摘 要:本文研究快速創(chuàng)建App平臺的主要目的是能夠幫助完全不懂語言編程的人,能在數(shù)分鐘的時間內(nèi)創(chuàng)建一個屬于自己的App.平臺設(shè)計分為前臺App創(chuàng)建模塊、后臺數(shù)據(jù)庫設(shè)計與管理模塊、中間網(wǎng)頁服務(wù)器三個模塊,使用了AngularJS、Phalcon、Cordova等框架.采用JS,PHP ,mongoDB等技術(shù)結(jié)合,實(shí)現(xiàn)App開發(fā)、賬戶管理、內(nèi)容管理系統(tǒng)、分析數(shù)據(jù)等模塊的具體研發(fā)過程.</p><p> 

9、 關(guān)鍵詞:App;Cordova;混合APP;WebApp;客戶定制App </p><p>  Research and design of the rapid creation of App platform</p><p>  Author:Liu SiyuanTeacher: Gui Xiancai</p><p>  Lingnan Normal

10、 University of mathematics and computer science, zhanjiang 524048</p><p>  Abstract: This article is an application platform that is designed to help people that don’t understand programming language, to be

11、able to construct and create their own Application within a few minutes of time. This article’s content will be based upon the three modules, which is the front-desk(reception) App builder module, the Background database

12、 design and management module, and lastly the web-server module. The platform will be Based on AngularJS, Phalcon, Cordova framework. Use technology</p><p>  Keywords: APP ;Cordova;Hybrid App; WebApp; Custom

13、ization</p><p><b>  1.引言</b></p><p>  1.1 平臺的背景</p><p>  移動互聯(lián)網(wǎng)市場的發(fā)展態(tài)勢,巨大的商機(jī)令人垂涎,各領(lǐng)域企業(yè)紛紛開發(fā)了專屬的APP,但很多非IT軟件類企業(yè)開發(fā)經(jīng)營自己的APP,卻面臨軟件開發(fā)、商業(yè)模式和市場推廣三座大山.快速創(chuàng)建App平臺是一款非編程App制作的平臺服務(wù).快

14、速創(chuàng)建App平臺可以幫助企業(yè)、個人免費(fèi)DIY制作屬于自己的手機(jī)APP應(yīng)用.無需具備編程能力、不用自己架設(shè)服務(wù)器,只需要花幾分鐘的時間,就可以制作運(yùn)營自己的App.</p><p>  對于開發(fā)者來說,HTML5技術(shù)跨平臺,適配多終端.傳統(tǒng)移動終端上的Native App,開發(fā)者的研發(fā)工作必須針對不同的操作系統(tǒng)進(jìn)行,成本相對較高.Native App對于賬戶還存在著管理成本、存儲成本以及性能消耗成本.HTML/Ja

15、vaScript/CSS語言所開發(fā)的應(yīng)用只要一次開發(fā)就能進(jìn)入所有瀏覽器進(jìn)行分發(fā).即使是走傳統(tǒng)的App Store應(yīng)用商店渠道,只需要再將底層用HTML5開發(fā)的應(yīng)用“封裝”為App,從時間和資金成本上講遠(yuǎn)小于跨系統(tǒng)移植.</p><p><b>  2 相關(guān)技術(shù)介紹</b></p><p><b>  2.1 MVC模型</b></p>

16、<p>  MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(Controller)的縮寫,一種軟件設(shè)計典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個部件里面,在改進(jìn)和個性化定制界面及賬戶交互的同時,不需要重新編寫業(yè)務(wù)邏輯.MVC被獨(dú)特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化賬戶界面的結(jié)構(gòu)中. </p>

17、<p>  2.2 Phalcon框架的PHP技術(shù)</p><p>  Phalcon是一套實(shí)現(xiàn)MVC架構(gòu)的高性能PHP應(yīng)用程序框架.初始版本發(fā)布于2012年11月,開放源代碼并基于BSD授權(quán)條款.與其他大部分的PHP框架不同,Phalcon使用C語言編寫,因此Phalcon的執(zhí)行速度高過其他PHP框架,并且消耗更少的資源,根據(jù)官方的測試,Phalcon是目前世界上速度最快的PHP框架之一.是一個開源的

18、,全堆棧的,用C語言寫成的php5框架,專為高性能設(shè)計.你不需要學(xué)習(xí)和使用C語言的功能,因為這是一個PHP框架,只不過用C寫成而已.同時Phalcon是松耦合的,您可以根據(jù)需要使用其他組件[1].</p><p>  2.3 Cordova移動開發(fā)客戶端框架</p><p>  Apache Cordova是一套設(shè)備API,允許移動應(yīng)用的開發(fā)者使用JavaScript來訪問本地設(shè)備的功能,

19、比如攝像頭、加速計.它可以與UI框架(如 jQuery Mobile或Dojo Mobile或Sencha Touch)等相結(jié)合使用,這些UI框架可以使用HTML、CSS和JavaScript開發(fā)智能手機(jī)應(yīng)用.</p><p>  在使用Cordova API時,應(yīng)用程序的構(gòu)建可以無需本地代碼(如Java或?qū)ο驝等),使用的是Web技術(shù).</p><p>  由于這些JavaScript.

20、 API在多個設(shè)備平臺上是一致的,而且是基于Web標(biāo)準(zhǔn)創(chuàng)建的,因此應(yīng)用程序的移植很方便,基本不做什么改變.</p><p>  使用Cordova的應(yīng)用使用平臺SDK打包成應(yīng)用程序,可以從每種設(shè)備的應(yīng)用程序商店下載安裝.</p><p>  Cordova提供了一套統(tǒng)一的JavaScript庫供調(diào)用,它支持iOS、Android、Blackberry、Windows Phone、Palm

21、WebOS、Bada和Symbian[2].</p><p><b>  3 平臺技術(shù)方案</b></p><p>  由于Phalcon是基于C的MVC模式的Web開發(fā)框架,利用這一框架可以建立動態(tài)的、高性能的、安全的、跨平臺的動態(tài)網(wǎng)站.為了使系統(tǒng)將來的維護(hù)、升級等工作方便、簡單,我們采用MVC開發(fā)模式,以PHP為開發(fā)平臺,在本系統(tǒng)中我們細(xì)分為四層即網(wǎng)絡(luò)服務(wù)層,視圖

22、層、數(shù)據(jù)層、控制邏輯層,使用AngularJS來實(shí)現(xiàn)是圖層層 View 的功能;用NodeJS來實(shí)現(xiàn)接口的定義[3];用于控制邏輯層來具體實(shí)現(xiàn)的業(yè)務(wù).具體實(shí)現(xiàn)就是AngularJS提交信息到Controller進(jìn)行判斷,然后調(diào)用Controller中的的具體Action方法實(shí)現(xiàn)具體業(yè)務(wù),這當(dāng)中可能涉及到對數(shù)據(jù)庫的操作,即調(diào)用數(shù)據(jù)層里面的具體方法.最后返回一個信息給 Controller ,由 Controller 把信息封裝到一個 Js

23、on格式的數(shù)據(jù)中,再由Controller返回數(shù)據(jù)到網(wǎng)絡(luò)服務(wù)層,來實(shí)現(xiàn)各種需求.使用MVC模式,我們在修改頁面的時候,因為里面不包含有邏輯代碼,所以不會影響到系統(tǒng)的邏輯工作,只需要UI就能完成工作;在邏輯層部分,只需要專注于代碼的開發(fā),而不需要關(guān)心數(shù)據(jù)庫數(shù)據(jù)的實(shí)現(xiàn),因為數(shù)據(jù)庫數(shù)據(jù)調(diào)用只需要通過接口實(shí)現(xiàn)即可,數(shù)</p><p> ?。?)用uxpin來實(shí)現(xiàn)靜態(tài)代碼的設(shè)計和AngularJS邏輯代碼的實(shí)現(xiàn)[4].&l

24、t;/p><p> ?。?)用PHP來實(shí)現(xiàn)動態(tài)代碼的設(shè)計,如進(jìn)行的行為和動作.</p><p> ?。?)用NodeJS調(diào)用模型和邏輯的API對接,完成業(yè)務(wù)操作后,把得到的結(jié)果存到Json中,然后把封裝結(jié)果的Json作為返回的請求.</p><p> ?。?)用NodeJS作為數(shù)據(jù)庫的調(diào)用接口,PHP代碼可以通過該NodeJS通過調(diào)用API來實(shí)現(xiàn)對數(shù)據(jù)庫的調(diào)用[5].&

25、lt;/p><p> ?。?)對數(shù)據(jù)庫的設(shè)計,首先設(shè)計數(shù)據(jù)表,然后用MongoDB建立數(shù)據(jù)表.</p><p>  4 快速創(chuàng)建App平臺</p><p><b>  4.1平臺描述</b></p><p>  移動應(yīng)用開發(fā)平臺是專門用于實(shí)現(xiàn)賬戶自我DIY自己需要的APP,進(jìn)行商業(yè)或者個人興趣的平臺.</p>

26、<p>  移動應(yīng)用開發(fā)平臺通常以下的7個模塊,不同模塊分別實(shí)現(xiàn)不同的功能.</p><p>  (1)賬戶模塊,賬戶模塊主要實(shí)現(xiàn)賬戶功能,其中對賬戶資料的收集最為重要.</p><p>  (2)App模塊,App模塊是最核心的模塊,其中實(shí)現(xiàn)對App的生成,App上架到AppStore,App資料的管理.</p><p>  (3)問題反饋模塊,是對于平

27、臺運(yùn)作后期最為重要的一部分,它能反饋許許多多的問題,然后我們分析問題對平臺進(jìn)行修改和完善.</p><p>  (4)賬戶管理模塊,它是管理賬戶的資料,與賬戶模塊緊緊相連.</p><p>  (5)代理模塊,是平臺后期很重要的營銷模式.</p><p>  (6)訂閱模塊,他實(shí)現(xiàn)了App平臺服務(wù)于賬戶之間的聯(lián)系,實(shí)現(xiàn)賬戶在平臺購買App的關(guān)鍵.</p>

28、<p>  (7)登陸注冊模塊,他實(shí)現(xiàn)了賬戶與平臺的關(guān)聯(lián),實(shí)現(xiàn)App與平臺的溝通.</p><p><b>  4.2賬戶權(quán)限模塊</b></p><p>  (1)賬戶管理:賬戶進(jìn)入到賬戶管理頁面后,可以實(shí)現(xiàn)對自己資料的增刪改查,并且根據(jù)賬戶權(quán)限可以查詢到自己賬戶的資料,進(jìn)入賬戶管理頁面.</p><p> ?。?)賬戶權(quán)限管理

29、:由于平臺管理有多種多樣的功能,并非所有客戶都愿意將root所有權(quán)賦予給所有的人,所以這里root賬戶可以實(shí)現(xiàn)RBAC(基于角色控制)進(jìn)而實(shí)現(xiàn)不同的賬戶擁有不同的權(quán)限用于管理自己的App或者平臺.</p><p><b>  4.3 App模塊</b></p><p> ?。?)App Builder(App創(chuàng)建模塊):當(dāng)客戶進(jìn)入到創(chuàng)建App時,可以選擇不同模板和不同

30、的內(nèi)容來填充客戶的App,這里就是App Builder,它能實(shí)現(xiàn)你App的DIY,樣式的選擇,模板的選擇,功能的選擇,內(nèi)容的選擇,是最重要的用戶體驗部分.</p><p> ?。?)App Manage(App管理):當(dāng)客戶創(chuàng)建成功App后,他會進(jìn)入到App管理頁面,你能在App管理頁面對你的App進(jìn)行增刪改查,不同的樣式,不同的內(nèi)容,不同的功能都能在這里修改,同時可以生成你的App下載體驗.</p>

31、;<p>  (3)App ToStore(App上架): 在這里你能選擇你的App生成的平臺類型,安卓,IOS,Win8進(jìn)行上架,可以選擇上架到百度,谷歌.</p><p>  4.4登錄與注冊模塊</p><p>  登錄與注冊模塊主要分為賬戶登錄注冊與管理登錄注冊,這里有一套RBAC(基于角色控制)進(jìn)行權(quán)限的分配.根據(jù)你賬戶角色的不同擁有不同的增刪改查權(quán)利.如果你是一名

32、普通用戶,你僅僅可以對你賬戶資料的進(jìn)行增刪改查.同時你是平臺的管理員,你可以查看到不同賬戶的的資料并且進(jìn)行賬戶的增刪改查.注冊模塊主要實(shí)現(xiàn)賬戶的注冊功能.</p><p><b>  4.5賬戶模塊</b></p><p> ?。?)添加賬戶:使用平臺的前提首先你需要有一個賬戶,此時你需要注冊一個賬戶.</p><p>  (2)修改賬戶:你能

33、在此進(jìn)行你賬戶信息的修改,比如你公司地址換了,你需要更新你的賬戶信息以供后續(xù)我們提供服務(wù)的連通性.</p><p> ?。?)刪除賬戶:如果賬戶進(jìn)行了非法勾當(dāng),我們平臺可以進(jìn)行刪除賬戶.</p><p>  (4)查詢賬戶:賬戶是基于平臺,所以平臺可以知道賬戶的資料和行為.</p><p><b>  4.6管理模塊</b></p>

34、<p>  代理模塊主要應(yīng)用于平臺服務(wù)的銷售,銷售的重要性不容置疑,一個平臺的收入依賴于銷售.因此平臺提供不同的營銷方式,可以單體購買,團(tuán)體購買,代理購買,使用代理模式.</p><p><b>  4.7訂閱模塊模塊</b></p><p> ?。?)添加訂閱:添加一個套餐的訂閱.</p><p> ?。?)修改訂閱:賬戶購買的

35、同時可以修改自己訂閱,進(jìn)而選擇更喜歡的套餐或者產(chǎn)品.</p><p>  (3)刪除訂閱:賬戶不需要訂閱的時候可以進(jìn)行刪除訂閱.</p><p> ?。?)查詢訂閱:平臺提供訂閱的歷史,方便客戶統(tǒng)計訂閱到期時間,和續(xù)費(fèi)時間.</p><p><b>  4.8問題反饋模塊</b></p><p>  (1)添加反饋:添加

36、反饋,敘述自己App出現(xiàn)的問題,管理人員可以根據(jù)反饋的內(nèi)容進(jìn)行維護(hù).</p><p> ?。?)修改反饋:反饋的的問題可能是賬戶本身出現(xiàn)操作問題,如果賬戶自身發(fā)現(xiàn)App問題可以進(jìn)行修改反饋,使得管理人員和平臺知道問題的來源.</p><p> ?。?)刪除反饋:當(dāng)反饋已經(jīng)解決可以進(jìn)行刪除反饋.</p><p> ?。?)查詢反饋:可以查看所反饋的內(nèi)容.</p&

37、gt;<p>  5快速創(chuàng)建App平臺數(shù)據(jù)庫設(shè)計</p><p>  5.1 快速創(chuàng)建App平臺數(shù)據(jù)庫表設(shè)計</p><p><b> ?。?)賬戶管理表</b></p><p>  快速創(chuàng)建App平臺使用的是mongoDB數(shù)據(jù)庫技術(shù),賬戶是本系統(tǒng)的主要賬戶.因此,數(shù)據(jù)系統(tǒng)中需要存儲賬戶的基本[6].</p><

38、;p><b>  表1.賬戶管理表</b></p><p>  表2.賬戶信息管理表</p><p> ?。?)App信息表中包括AppId(appId)、App名字(appName)、等內(nèi)容.</p><p><b>  表3.App表</b></p><p>  5.2快速創(chuàng)建App平臺數(shù)

39、據(jù)庫E-R圖</p><p>  這里擁有3個表,賬戶表,賬戶表和App表.一個賬戶可以開啟多個賬戶,然后每個賬戶可以創(chuàng)建多個App,所以就有了以下的表關(guān)系.</p><p>  圖 1.數(shù)據(jù)庫ER圖</p><p>  5.3快速創(chuàng)建App平臺UI體驗圖</p><p>  下面的圖片是快速創(chuàng)建App平臺前臺UI體驗圖,圖片介紹了如果進(jìn)行客

40、戶定制形式的選擇App的各種部件,幾分鐘的選擇后就可以生成一個可供各種平臺安裝的App.</p><p><b>  圖 2.平臺介紹圖</b></p><p><b>  圖 3.賬戶登錄圖</b></p><p><b>  圖 4.引導(dǎo)創(chuàng)建圖</b></p><p>  

41、圖 5.選擇App類型圖</p><p>  圖 6.選擇App功能頁面圖</p><p>  圖 7.選擇App主題</p><p>  圖 8.選擇App樣式</p><p>  圖9.填寫App主要信息</p><p><b>  圖 10.預(yù)覽圖片</b></p><p

42、>  圖 11.App管理頁面</p><p>  6.平臺功能模塊的實(shí)現(xiàn)</p><p>  6.1數(shù)據(jù)庫訪問的實(shí)現(xiàn)</p><p>  數(shù)據(jù)庫連接是本平臺最為重要的實(shí)現(xiàn)部分,因為系統(tǒng)中的全部模塊的實(shí)現(xiàn)都依賴于數(shù)據(jù)庫操作的實(shí)現(xiàn),包括對數(shù)據(jù)中的數(shù)據(jù)的查詢、添加、修改、刪除等基本操作.比如App模塊中,賬戶對App信息的查詢、修改、添加等等.</p>

43、<p>  6.2登錄模塊的實(shí)現(xiàn)</p><p>  注冊完成后,后臺數(shù)據(jù)庫系統(tǒng)中就已經(jīng)存儲了他們的信息.這時,當(dāng)用戶打開快速創(chuàng)建App平臺的首頁時,就可以通過登錄模塊登錄到快速創(chuàng)建App平臺進(jìn)行App的創(chuàng)建了.另一方面,管理員如果要對系統(tǒng)進(jìn)行維護(hù),包括對賬戶信息的查看、添加、修改,對不同模型的查看、添加、修改等等工作,也首先需要登錄系統(tǒng).登錄模塊部分包括管理員登錄模塊和賬戶登錄兩個部分.管理登錄模

44、塊實(shí)現(xiàn)了對管理員的權(quán)限監(jiān)控功能,并通過檢測賦予管理員不同的權(quán)限來實(shí)現(xiàn)對平臺的管理.賬戶登錄模塊主要是對賬戶是否合法進(jìn)行檢測,包括兩個方面內(nèi)容:一是賬戶身份合法性檢測,該部分是通過驗證賬戶輸入的ID是否正確來檢查進(jìn)入平臺的合法性;二是檢查進(jìn)入平臺后操作的合法性,該部分是通過驗證賬戶是否多重登錄來檢測操作的合法性.通過上述兩項檢查后,系統(tǒng)才為賬戶分配資源,否則平臺將自動退出,賬戶如果輸入有誤則提示賬戶重新登錄.下面對賬戶登錄部分的功能實(shí)現(xiàn)介

45、紹.</p><p><b>  6.2.1賬戶登錄</b></p><p>  從登錄頁面中輸入賬戶的ID及密碼,平臺便從數(shù)據(jù)庫中查找是否有該賬戶存在,如果存在該賬戶,再判斷輸入的ID和密碼是否正確.</p><p>  (從數(shù)據(jù)庫中查找比對)代碼:</p><p>  //賬戶登錄,Phalcon框架</p&g

46、t;<p>  public function dengluAction(){</p><p>  $arr = array(0 => 'name',1 => 'pwd',2 => 'appId');</p><p>  $ws = array(0 => 'token');</p&g

47、t;<p>  $data = $this->base2($this, $arr, $ws);</p><p>  if($data){</p><p>  $name = $data['name'];</p><p>  $appId = $data['appId'];</p><p>

48、  $pwd = $data['pwd'];</p><p>  if(strpos($name, '@')){</p><p>  $loginType = 'email';</p><p>  $rs = 'appUserEmail';</p><p>  }else i

49、f(strlen($name)==11 && is_numeric($name)){</p><p>  $loginType = 'tel';</p><p>  $rs = 'appUserTel';</p><p><b>  }else{</b></p><p> 

50、 $loginType = 'loginname';</p><p>  $rs = 'loginname';</p><p><b>  }</b></p><p>  $user=AppUser::findFirst(array(array($rs=>$name,'appId'=>

51、$appId)));</p><p>  if($user){</p><p>  if($user->appUserPwd !== $pwd){</p><p>  C('errorFiled', 'pwd is error');</p><p>  echoInfo(611);</p>

52、<p><b>  return;</b></p><p><b>  }</b></p><p>  $flag = $this->checkUserStatus($user);</p><p>  if(!$flag){</p><p><b>  return;<

53、;/b></p><p><b>  }</b></p><p>  $user->isLogin = true;</p><p>  $lastTime = $user->lastLoginTime->sec;</p><p>  $user->lastLoginTime = getMon

54、goDate();</p><p>  $user->appUserToken = $data['token'];//保存ws端的token</p><p>  if(!$user->save()){</p><p>  throw new Exception('賬戶數(shù)據(jù)不能更新', 1000);</p>&

55、lt;p><b>  }</b></p><p>  $identity = array();</p><p>  $identity['userId'] = $user->appUserId;</p><p>  $identity['tokenId'] = $user->appUserTok

56、en;</p><p>  $identity['lastTime'] = $lastTime;</p><p>  C('data', $identity);</p><p>  echoInfo(200, "success");</p><p><b>  return;<

57、;/b></p><p><b>  }else{</b></p><p>  echoInfo(609, 'user is not find');</p><p><b>  return;</b></p><p><b>  }</b></p&g

58、t;<p><b>  }</b></p><p><b>  }</b></p><p>  6.2.2管理員登錄</p><p>  管理員身份的驗證過程與賬戶登錄時對身份的驗證過程幾乎相同.只是在數(shù)據(jù)庫中所查詢的集合(表格)或者字段不一致.</p><p>  6.3 App更新

59、后臺模塊</p><p>  App 后臺的更新代碼,首先判斷版本是否需要更新,如果版本不一致則進(jìn)行更新,主要代碼如下:</p><p>  Public function GetRecordById($obj)</p><p><b>  {</b></p><p>  return $this->findbyi

60、d($obj->appId);</p><p><b>  }</b></p><p>  //更新一條文檔記錄依靠appID</p><p>  Public function UpdateRecordById($obj)</p><p><b>  {</b></p><

61、;p>  if(!($obj==null)){</p><p>  $record=$this->findbyid($obj->appId);</p><p>  //把PHP對象轉(zhuǎn)為數(shù)組</p><p>  $array=get_object_vars($obj);</p><p>  //獲取數(shù)組的鍵值名,返回一個鍵值名

62、數(shù)組</p><p>  foreach (array_keys($array) as $keyname)</p><p><b>  {</b></p><p>  if ($keyname=="appId")</p><p><b>  {</b></p>&l

63、t;p>  $record->_id=$obj->$keyname;</p><p><b>  }</b></p><p><b>  else {</b></p><p>  $record->$keyname=$obj->$keyname;</p><p><

64、;b>  }</b></p><p>  $record->save();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else {</b></p><p>  e

65、cho "刪除記錄失敗";</p><p><b>  }</b></p><p><b>  }</b></p><p>  //刪除一條文檔記錄依靠appID</p><p>  Public function deleteRecordById($obj)</p>

66、;<p><b>  {</b></p><p>  if(!($obj==null)){</p><p>  $this->findbyid($obj->appId);</p><p>  $this->delete();</p><p><b>  }</b>&l

67、t;/p><p><b>  else {</b></p><p>  echo "刪除記錄失敗";</p><p><b>  }</b></p><p><b>  }</b></p><p>  //創(chuàng)建一條新的文檔記錄依靠acco

68、utID</p><p>  Public function createRecordById($obj)</p><p><b>  {</b></p><p>  if(!($obj==null)){</p><p>  $this->accountId=$obj->accountId;</p>

69、;<p>  $this->save();</p><p><b>  }</b></p><p><b>  else {</b></p><p>  echo "創(chuàng)建Appid失敗";</p><p><b>  }</b></

70、p><p><b>  }</b></p><p><b>  //存儲選擇的功能</b></p><p>  Public function saveFeature($obj) {</p><p>  if(!($obj==null)){</p><p>  $this->

71、;appFeatureMap=$obj->appFeatureMap;</p><p>  $this->appFeatureDir=$obj->appFeatureDir;</p><p>  $this->appFeatureCal=$obj->appFeatureCal;</p><p>  $this->appFeatur

72、eNote=$obj->appFeatureNote;</p><p>  $this->save();</p><p><b>  }</b></p><p><b>  else {</b></p><p>  echo "儲存功能錯誤";</p>

73、<p><b>  }</b></p><p><b>  }</b></p><p><b>  //APP更新函數(shù)</b></p><p>  Public function isUpdate($obj)</p><p><b>  {</b>

74、;</p><p>  //根據(jù)appID獲取一條需要更新的記錄</p><p>  $record=$this->getRecordById($obj);</p><p>  //判斷version</p><p>  if(!($record->appVersion == $obj->appVersion))</p

75、><p><b>  {</b></p><p>  echo "version不一樣,you shold rebuld the app,return a AppStore url";</p><p><b>  }</b></p><p><b>  else{<

76、;/b></p><p>  //相同,檢測appUpdateNum是否一樣</p><p>  if (!($record->appUpdateNum == $obj->appVersion))</p><p><b>  {</b></p><p>  tozip("E:/xampp/ht

77、docs/www","E:/xampp/htdocs/www.zip");</p><p>  echo "打包成功,";</p><p><b>  }</b></p><p>  //updatenum相同,不需要更新</p><p><b>  else{

78、</b></p><p>  echo "不需要更新";</p><p><b>  }</b></p><p>  6.3.1新增第三方QQ登錄模塊</p><p>  該子模塊實(shí)現(xiàn)登錄功能的第三方登錄.后臺實(shí)現(xiàn)一個接口.Post接受參數(shù)進(jìn)行判斷是否第三方QQ登錄</p>

79、<p>  //QQ登錄的實(shí)現(xiàn)代碼</p><p>  public function qqdengluAction(){</p><p>  $arr = array(0 => 'openId',1 => 'appId');</p><p>  $data = $this->base($this, $ar

80、r);</p><p>  if($data){</p><p>  $user = QQUser::getUser($data);</p><p>  if(is_object($user)){</p><p>  $flag = $this->checkUserStatus($user);</p><p> 

81、 if(!$flag){</p><p><b>  return;</b></p><p><b>  }</b></p><p>  $identity = array();</p><p>  $identity['userId'] = $user->appUserId;

82、</p><p>  $identity['tokenId'] = getMd5($user->appUserId."@3an%xing*".$user->lastLoginTime->sec);</p><p>  C('data', $identity);</p><p>  echoInf

83、o(200, "success");</p><p><b>  }else{</b></p><p>  echoInfo(614, "user is not exist");</p><p><b>  }</b></p><p><b>  }

84、</b></p><p><b>  }</b></p><p>  6.3.2實(shí)現(xiàn)填寫App類型模塊</p><p>  該子模塊實(shí)現(xiàn)填寫App類型模塊.</p><p>  public function indexAction() {</p><p>  $this->lo

85、adPartials();</p><p>  if($this->getRequest()->isXmlHttpRequest()) {</p><p>  $html = array('html' => $this->getLayout()->getPartial('content_editor')->toHtml()

86、);</p><p>  $this->getLayout()->setHtml(Zend_Json::encode($html));</p><p><b>  }</b></p><p><b>  }</b></p><p>  6.3.4實(shí)現(xiàn)選擇App功能頁模塊</p>

87、;<p>  該子模塊實(shí)現(xiàn)選擇App功能頁面模塊.</p><p>  public function editAction() {</p><p>  if($type = $this->getRequest()->getParam('type')) {</p><p>  $this->getLayout()-&g

88、t;setBaseRender('content',</p><p>  sprintf('application/customization/page/edit/%s.phtml',</p><p>  $type), 'admin_view_default');</p><p>  $html = array(&#

89、39;html' => $this->getLayout()->render());</p><p>  $this->_sendHtml($html);</p><p><b>  }</b></p><p><b>  }</b></p><p>  6.3.5實(shí)

90、現(xiàn)選擇App樣式和顏色模塊</p><p>  該子模塊實(shí)現(xiàn)選擇App樣式和顏色頁面模塊.</p><p>  public function colorsAction() {</p><p>  $this->loadPartials(null, false);</p><p>  $html = array('html

91、9; => $this->getLayout()->render());</p><p>  $this->getLayout()->setHtml(Zend_Json::encode($html));</p><p><b>  }</b></p><p>  6.3.6實(shí)現(xiàn)填寫App基本信息模塊</p&g

92、t;<p>  該子模塊實(shí)現(xiàn)填寫App基本信息模塊.</p><p>  public function saveAction() {</p><p>  if($data = $this->getRequest()->getPost()) {</p><p><b>  try {</b></p>&l

93、t;p>  if(!empty($data["name"])) {</p><p>  if(is_numeric(substr($data["name"], 0, 1))) {</p><p>  throw new Exception("Ce champ ne peut pas commencer par un chiffre&q

94、uot;);</p><p>  } $this->getApplication()->setName($data['name'])->save();</p><p><b>  }</b></p><p>  catch(Exception $e) {</p><

95、;p>  $html = array(</p><p>  'message' => $e->getMessage()</p><p><b>  );</b></p><p>  }$this->_sendHtml($html);</p><p><b>  }}<

96、;/b></p><p>  6.3.7實(shí)現(xiàn)App預(yù)覽模塊</p><p>  該子模塊實(shí)現(xiàn)App預(yù)覽模塊.</p><p>  public function modalAction() {</p><p>  $layout = $this->getLayout();</p><p>  $layout

97、->setBaseRender('modal', 'html/modal.phtml', 'core_view_default')->setTitle($this->_('Preview'))->setSubtitle($this->_('Preview and test your native apps directly on you

98、r mobile.'));</p><p>  $layout->addPartial('modal_content', 'admin_view_default', 'application/previewer/modal.phtml');</p><p>  $html = array('modal_html'

99、 => $layout->render());</p><p>  $this->getResponse()->setBody(Zend_Json::encode($html))->sendResponse();</p><p><b>  die;</b></p><p><b>  }</b&g

100、t;</p><p>  6.3.8實(shí)現(xiàn)App管理模塊</p><p>  該子模塊實(shí)現(xiàn)App管理模塊.</p><p>  public function listAction() {</p><p>  $this->loadPartials();</p><p><b>  }</b>

101、</p><p>  public function editAction() {</p><p>  if($app_id = $this->getRequest()->getParam('app_id')) {</p><p>  $application = new Application_Model_Application();&

102、lt;/p><p>  $application->find($app_id);</p><p>  if(!$application->getId()) {</p><p>  $this->getSession()->addError($this->_('This application does not exist')

103、);</p><p>  $this->_redirect('application/backoffice/list');</p><p><b>  } else {</b></p><p>  $this->loadPartials();</p><p>  $this->getLa

104、yout()->getPartial('content')->setCurrentApplication($application);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

105、<p>  public function savepostAction() {</p><p>  if($datas = $this->getRequest()->getPost()) {</p><p>  $application = new Application_Model_Application();</p><p><

106、b>  try {</b></p><p>  if(!empty($datas['app_id'])) {</p><p>  $application->find($datas['app_id']);</p><p>  if(!$application->getId()) {</p>

107、<p>  throw new Exception($this->_('An error occurred while saving the application. Please try again later.'));</p><p><b>  }</b></p><p><b>  }</b></p&

108、gt;<p>  if(empty($datas['bundle_id'])) {</p><p>  throw new Exception($this->_('The Bundle Id is required'));</p><p><b>  }</b></p><p>  $appl

109、ication->addData($datas)</p><p><b>  ->save()</b></p><p><b>  ;</b></p><p>  $this->getSession()->addSuccess($this->_('The application has

110、 been successfully saved'));</p><p>  $this->_redirect('application/backoffice/list');</p><p><b>  }</b></p><p>  catch(Exception $e) {</p><p&g

111、t;  $this->getSession()->addError($e->getMessage());</p><p>  if($application->getId()) {</p><p>  $this->_redirect('application/backoffice/edit', array('app_id' =

112、> $application->getId()));</p><p><b>  } else {</b></p><p>  $this->_redirect('application/backoffice/new');</p><p><b>  }</b></p>&

113、lt;p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  public function deleteAction() {</p><p>  if($app_id = $this->get

114、Request()->getParam('app_id')) {</p><p><b>  try {</b></p><p>  $application = new Application_Model_Application();</p><p>  $application->find($app_id);&l

115、t;/p><p>  if(!$application->getId()) {</p><p>  throw new Exception($this->_("This application does not exist"));</p><p><b>  }</b></p><p>  $

116、application->delete();</p><p>  $html = array(</p><p>  'success' => 1,</p><p>  'app_id' => $app_id</p><p><b>  /* ); */</b></p

117、><p><b>  }</b></p><p>  catch(Exception $e) {</p><p>  $html = array(</p><p>  'error' => 1,</p><p>  'message' => $e->g

118、etMessage()</p><p><b>  );</b></p><p><b>  }</b></p><p>  $this->_sendHtml($html);</p><p><b>  }</b></p><p><b>

119、;  }</b></p><p>  7 移動應(yīng)用開發(fā)服務(wù)關(guān)鍵技術(shù)</p><p>  快速創(chuàng)建App平臺關(guān)鍵技術(shù)在于Cordova框架的實(shí)現(xiàn).他能實(shí)現(xiàn)把一個web網(wǎng)站嵌套到一個App外殼中實(shí)現(xiàn)網(wǎng)站和App外殼的結(jié)合,成為一個混合型的App.同時后臺框架Phalcon的功能實(shí)現(xiàn)數(shù)據(jù)傳輸,從而成為一個服務(wù)平臺.</p><p><b>  8 總

120、結(jié)</b></p><p>  快速創(chuàng)建App平臺的關(guān)鍵運(yùn)用了NodeJS(用于構(gòu)建web server),PHP(phlacon框架的后臺強(qiáng)大的數(shù)據(jù)處理能力)AngularJS(前端強(qiáng)大的數(shù)據(jù)綁定能力).由于時間倉促,一些技術(shù)和設(shè)備所限,該系統(tǒng)存在一些不足之處,有待進(jìn)一步改進(jìn)和完善,具體說來有:</p><p>  (1) 對后臺數(shù)據(jù)庫中事務(wù)的處理由于mongodb的局限性并

121、無法做的最完美.</p><p>  (2) 后臺數(shù)據(jù)和前臺App外殼更新無法做到拆分更新只能進(jìn)行全局更新,浪費(fèi)不必要的流量.</p><p>  (3)數(shù)據(jù)庫集合(表單)功能仍未完善.</p><p>  (4)平臺會經(jīng)過各種的測試進(jìn)而完善.</p><p><b>  參考文獻(xiàn)</b></p><

122、p>  [1] Phalcon論壇.Phalcon3.0文檔[EB/OL].Phalcon官方網(wǎng)站</p><p>  http://Phalconphp.com/zh/.</p><p>  [2] [英] John M. Wargo.Apache Cordova[M].英:Addison-Wesley Professional,2013.12.</p><p&

123、gt;  [3] 樸靈. 深入淺出Node.js [M].北京:人民郵電出版社,2013.12.</p><p>  [4] [美] Ari Lerner. AngularJS權(quán)威教程[M].北京:人民郵電出版社,2014.8.</p><p>  [5] 王非,蔡勇,賀志軍. RESTful Web Services在信息系統(tǒng)中的應(yīng)用[J]. 計算機(jī)系統(tǒng)應(yīng)用. 2013.02.</

124、p><p>  [6] [美]霍多羅夫. MongoDB權(quán)威指南[M].北京:人民郵電出版社,2011.5.</p><p><b>  大學(xué)畢業(yè)論文規(guī)范</b></p><p><b>  一、結(jié)構(gòu)要求</b></p><p>  一份完整的本科生畢業(yè)論文檔案袋內(nèi)應(yīng)包含兩個部分內(nèi)容:</p>

125、;<p>  1、畢業(yè)論文裝訂冊;2、畢業(yè)論文附件材料。</p><p><b>  二、版面要求</b></p><p>  A4紙張,其中:頁邊距上3cm,下、左2.5cm,右2cm;頁腳1.75cm;</p><p>  每冊的封面與封底需用白色的銅版紙張(規(guī)格120g-150g)印制。</p><p&g

126、t;  三、畢業(yè)論文裝訂冊組成部分與要求</p><p>  (一)封面。論文題目不得超過20個字,要簡練、準(zhǔn)確,可分為兩行。</p><p><b>  (二)內(nèi)容。</b></p><p>  1、畢業(yè)論文任務(wù)書。任務(wù)書由指導(dǎo)教師填寫,經(jīng)系部審查簽字后生效。</p><p>  2、畢業(yè)論文開題報告;</p&g

127、t;<p>  3、畢業(yè)論文學(xué)生申請答辯表與指導(dǎo)教師畢業(yè)論文評審表;</p><p>  4、畢業(yè)論文評閱人評審表;</p><p>  5、畢業(yè)論文答辯表;</p><p>  6、畢業(yè)論文答辯記錄表;</p><p>  7、畢業(yè)論文成績評定總表;</p><p>  8、學(xué)位論文原創(chuàng)性聲明及版權(quán)使用

128、授權(quán)書;</p><p>  9、中英文題目與作者;</p><p>  10、中英文內(nèi)容摘要和關(guān)鍵詞。</p><p> ?。?)摘要是論文內(nèi)容的簡要陳述,應(yīng)盡量反映論文的主要信息,內(nèi)容包括研究目的、方法、成果和結(jié)論,不含圖表,不加注釋,具有獨(dú)立性和完整性。中文摘要一般為200-400字左右,英文摘要應(yīng)與中文摘要內(nèi)容完全相同。</p><p&g

129、t; ?。?)關(guān)鍵詞是反映畢業(yè)論文主題內(nèi)容的名詞,是供檢索使用的。主題詞條應(yīng)為通用技術(shù)詞匯,不得自造關(guān)鍵詞。關(guān)鍵詞一般為3-5個,按詞條外延層次(學(xué)科目錄分類),由高至低順序排列。關(guān)鍵詞排在摘要正文部分下方。</p><p><b>  11、目錄;</b></p><p>  目錄按三級標(biāo)題編寫,要求層次清晰,且要與正文標(biāo)題一致。主要包括緒論、正文主體、結(jié)論、致謝、

130、主要參考文獻(xiàn)及附錄等。</p><p>  12、正文。論文正文部分包括:緒論(或前言、序言)、論文主體及結(jié)論。</p><p> ?。?)緒論。綜合評述前人工作,說明論文工作的選題目的和意義,國內(nèi)外文獻(xiàn)綜述,以及論文所要研究的內(nèi)容。</p><p> ?。?)論文主體。論文的主要組成部分,主要包括選題背景、方案論證、過程論述、結(jié)果分析、結(jié)論或總結(jié)等內(nèi)容。要求層次清

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論