版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Android App快速開發(fā)平臺設(shè)計與實(shí)現(xiàn).pdf
- “再中介化”出行共享平臺app的分析與創(chuàng)建
- 快速開卡手機(jī)APP的設(shè)計與實(shí)現(xiàn).pdf
- 基于ios平臺的天氣app應(yīng)用設(shè)計與實(shí)現(xiàn)
- 基于ios平臺的天氣app應(yīng)用設(shè)計與實(shí)現(xiàn)
- RPSim:面向SoC軟件研發(fā)的快速原型全系統(tǒng)模模擬平臺設(shè)計與實(shí)現(xiàn).pdf
- 共享圖書app軟件的研發(fā)
- 基于APP的CBD管理平臺設(shè)計與實(shí)現(xiàn).pdf
- 基于Android平臺的校園APP的設(shè)計與實(shí)現(xiàn).pdf
- 快速定位平臺的設(shè)計與實(shí)現(xiàn).pdf
- 軟件研發(fā)管理平臺的設(shè)計與應(yīng)用.pdf
- 基于android平臺的旅游攻略APP的設(shè)計與實(shí)現(xiàn).pdf
- 基于手機(jī)app的校園代購平臺的設(shè)計與應(yīng)用分析
- 書友交流分享與社交平臺app的設(shè)計與實(shí)現(xiàn).pdf
- 44667.基于android平臺的課堂筆記app設(shè)計與實(shí)現(xiàn)
- 基于Android APP的船廢監(jiān)測平臺的研究與設(shè)計.pdf
- 基于FPGA快速原型平臺的設(shè)計與實(shí)現(xiàn).pdf
- 基于Google App Engine云平臺OA系統(tǒng)的設(shè)計與實(shí)現(xiàn).pdf
- 基于Android平臺智能插座控制APP設(shè)計與實(shí)現(xiàn).pdf
- Android平臺下圖像加密APP設(shè)計與實(shí)現(xiàn).pdf
評論
0/150
提交評論