APP開(kāi)發(fā)模式通常分為Web APP與Native APP原生模式兩種,這兩種模式均各自有自己的優(yōu)勢(shì),到底是采用Native App開(kāi)發(fā)還是采用Web App開(kāi)發(fā)一直是業(yè)界爭(zhēng)論的焦點(diǎn),但是隨著HTML5的發(fā)展及云服務(wù)普及,采用HTML5進(jìn)行Web App開(kāi)發(fā)正在成為一種趨勢(shì),用戶可以根據(jù)應(yīng)用特點(diǎn)和需求進(jìn)行選擇,亦可選擇兩者混合模式:
Native App開(kāi)發(fā)
Native App開(kāi)發(fā)即我們所稱的傳統(tǒng)APP開(kāi)發(fā)模式(原生APP開(kāi)發(fā)模式),該開(kāi)發(fā)針對(duì)IOS、Android等不同的手機(jī)操作系統(tǒng)要采用不同的語(yǔ)言和框架進(jìn)行開(kāi)發(fā),該模式通常是由“云服務(wù)器數(shù)據(jù)+APP應(yīng)用客戶端”兩部份構(gòu)成,APP應(yīng)用所有的UI元素、數(shù)據(jù)內(nèi)容、邏輯框架均安裝在手機(jī)終端上。
Web App開(kāi)發(fā)
Web App開(kāi)發(fā)即是一種框架型APP開(kāi)發(fā)模式(HTML5 APP 框架開(kāi)發(fā)模式),該開(kāi)發(fā)具有跨平臺(tái)的優(yōu)勢(shì),該模式通常由“HTML5云網(wǎng)站+APP應(yīng)用客戶端”兩部份構(gòu)成,APP應(yīng)用客戶端只需安裝應(yīng)用的框架部份,而應(yīng)用的數(shù)據(jù)則是每次打開(kāi)APP的時(shí)候,去云端取數(shù)據(jù)呈現(xiàn)給手機(jī)用戶。
原生APP開(kāi)發(fā)及Web APP開(kāi)發(fā)模式的區(qū)別
Web APP需開(kāi)發(fā)“html5云網(wǎng)站”和“APP客戶端”,親網(wǎng)信息總結(jié)這類型APP應(yīng)用呈現(xiàn)以下特點(diǎn):
(1)每次打開(kāi)APP,都要通過(guò)APP框架向云網(wǎng)站取UI及數(shù)據(jù);
(2)手機(jī)用戶無(wú)法上網(wǎng)則無(wú)法訪問(wèn)APP應(yīng)用中的數(shù)據(jù)。
(3)框架型的APP無(wú)法調(diào)用手機(jī)終端的硬件設(shè)備(語(yǔ)音、攝像頭、短信、GPS、藍(lán)牙、重力感應(yīng)等)
(4)框架型APP的訪問(wèn)速度受手機(jī)終端上網(wǎng)的限制,每次使用均會(huì)消耗一定的手機(jī)上網(wǎng)流量;
(5)框架型APP應(yīng)用的安裝包小巧,只包含框架文件,而大量的UI元素、數(shù)據(jù)內(nèi)容剛存放在云端;
(6)APP用戶每次都可以訪問(wèn)到實(shí)時(shí)的最新的云端數(shù)據(jù);
(7)APP用戶無(wú)須頻繁更新APP應(yīng)用,與云端實(shí)現(xiàn)的是實(shí)時(shí)數(shù)據(jù)交互;
適用企業(yè):電子商務(wù)、金融、新聞資訊、企業(yè)集團(tuán)需經(jīng)常更新內(nèi)容的APP應(yīng)用。
Native App(原生型APP)需要開(kāi)發(fā)“云服務(wù)器數(shù)據(jù)中心”和“APP客戶端”,親網(wǎng)信息總結(jié)這類型的APP應(yīng)用呈現(xiàn)以下特點(diǎn):
(1)每次獲取最新的APP功能,需要升級(jí)APP應(yīng)用;
(2)原生型APP應(yīng)用的安裝包相對(duì)較大,包含UI元素、數(shù)據(jù)內(nèi)容、邏輯框架;
(3)手機(jī)用戶無(wú)法上網(wǎng)也可訪問(wèn)APP應(yīng)用中以前下載的數(shù)據(jù)。
(4)原生型的APP可以調(diào)用手機(jī)終端的硬件設(shè)備(語(yǔ)音、攝像頭、短信、GPS、藍(lán)牙、重力感應(yīng)等)
(5)APP應(yīng)用更新新功能,涉及到每次要向各個(gè)應(yīng)用商店進(jìn)行提交審核。
適用企業(yè):游戲、電子雜志、管理應(yīng)用、物聯(lián)網(wǎng)等無(wú)需經(jīng)常更新程序框架的APP應(yīng)用。
到底該如何選擇Web App和Native App開(kāi)發(fā)模式
移動(dòng)Web無(wú)所不在,移動(dòng)Web是目前唯一的支持各種設(shè)備訪問(wèn)的平臺(tái),與桌面Web一樣,移動(dòng)Web支持各種標(biāo)準(zhǔn)的協(xié)議。移動(dòng)Web也是唯一一個(gè)可供開(kāi)發(fā)者發(fā)布移動(dòng)應(yīng)用的平臺(tái),它將各種移動(dòng)交互與桌面任務(wù)有效地連接了起來(lái);而開(kāi)發(fā)Native App可以充分利用設(shè)備的特性,而這一點(diǎn)往往是Web瀏覽器做不到的,所以對(duì)一個(gè)產(chǎn)品本身而言,Native App是最佳的選擇。下面幾節(jié)將討論一下Native App的一些主要功能。
什么時(shí)候應(yīng)該選擇Native App
1.為應(yīng)用收費(fèi)
沒(méi)有任何地方規(guī)定開(kāi)發(fā)者不能對(duì)一個(gè)移動(dòng)Web App收取使用費(fèi),但是由于某些原因,人們常常認(rèn)為不能或是不應(yīng)該對(duì)一個(gè)Web App收取費(fèi)用。由于歷史原因,導(dǎo)致移動(dòng)設(shè)備上付費(fèi)服務(wù)遭遇兩大阻力:
2.付款方式
在移動(dòng)設(shè)備上輸入信用卡號(hào)相當(dāng)麻煩,而且在許多老式設(shè)備上也沒(méi)有安全保障。一種典型的方式是,如果你需要對(duì)你的應(yīng)用收費(fèi),你可以與運(yùn)營(yíng)商達(dá)成協(xié)議,讓運(yùn)營(yíng)商代為為你的服務(wù)收費(fèi)。這也意味著,你需要和多個(gè)運(yùn)營(yíng)商達(dá)成合作。這通常是首選的方法,因?yàn)樵S多手機(jī)用戶可能根本就沒(méi)有信用卡,比如青少年。
另一種方法是將用戶的信用卡信息保存在一個(gè)安全的網(wǎng)站上。用戶可以通過(guò)登錄到該網(wǎng)站購(gòu)買應(yīng)用服務(wù)。這個(gè)過(guò)程不算特別理想,因?yàn)檫@意味著用戶不能直接通過(guò)他們的移動(dòng)設(shè)備購(gòu)買服務(wù)了。
3.強(qiáng)制分成
移動(dòng)運(yùn)營(yíng)商是會(huì)提成的。App無(wú)論是通過(guò)運(yùn)營(yíng)商還是通過(guò)移動(dòng)設(shè)備發(fā)布,他們都為應(yīng)用提供了一套收費(fèi)機(jī)制。這些運(yùn)營(yíng)商和移動(dòng)設(shè)備將會(huì)提取部分收益,然后將剩余的部分交給應(yīng)用開(kāi)發(fā)商,這也意味著,開(kāi)發(fā)人員必須遵守他們的市場(chǎng)規(guī)則。適應(yīng)運(yùn)營(yíng)商的市場(chǎng)規(guī)則通常是非常困難的,需要投入大量的人力資源。相比而言,移動(dòng)設(shè)備的市場(chǎng)規(guī)則則簡(jiǎn)單許多,但是也存在不少的困難。
妨礙運(yùn)營(yíng)商和移動(dòng)設(shè)備開(kāi)發(fā)商利益的應(yīng)用以及服務(wù)都將受到阻擾。過(guò)去,那些不靠運(yùn)營(yíng)商和移動(dòng)設(shè)備開(kāi)發(fā)商運(yùn)作的網(wǎng)站如果收入過(guò)于顯眼的話,都逃脫不了被關(guān)閉的命運(yùn),但是最近,這樣的事情鮮少發(fā)生了。
如果你想為你的Native App收費(fèi),那么你就必須接受這個(gè)現(xiàn)實(shí)——你必須遵守別人的市場(chǎng)規(guī)則,還得放棄部分收益。
4.開(kāi)發(fā)游戲
如果你是想開(kāi)發(fā)一個(gè)移動(dòng)游戲(移動(dòng)游戲是移動(dòng)市場(chǎng)上最大的一塊),那么你需要開(kāi)發(fā)一個(gè)Native App。游戲?qū)Y源的占用很大,并且需要使用許多設(shè)備API或平臺(tái)API。雖然,現(xiàn)在有幾款完全使用Web技術(shù)開(kāi)發(fā)的游戲占有了一定的市場(chǎng)份額,但是和Native App市場(chǎng)的占有情況相比,還是微不足道的。游戲用戶對(duì)應(yīng)用的視覺(jué)和操作效果要求很高。移動(dòng)Web雖然提供了一些仿真體驗(yàn),但還遠(yuǎn)遠(yuǎn)不能滿足用戶的需求。
在開(kāi)發(fā)移動(dòng)游戲時(shí),你需要慎重考慮你的應(yīng)用需要支持哪些平臺(tái)。幸運(yùn)的是,現(xiàn)在有許多工具能夠幫助你將你的游戲推向多個(gè)平臺(tái),但是完成這些工作,還是需要花費(fèi)大量的人力和物力。
5.使用定位功能
下一個(gè)功能就是定位功能,可以通過(guò)GPS或者是信號(hào)檢測(cè)確定用戶當(dāng)前的位置信息。以前只能通過(guò)Native App的APIs查看用戶的位置信息,但現(xiàn)在大多數(shù)主流移動(dòng)瀏覽器上都嵌入了W3C Geolocation API。像iPhone或Android這樣安裝了WebKit的設(shè)備,或是配置了Opera或Mozilla瀏覽器的設(shè)備,都可以獲取用戶的位置信息。
我相信定位功能會(huì)為Web技術(shù)帶來(lái)許多全新的應(yīng)用。如果能夠合理利用Web瀏覽器,Web開(kāi)發(fā)商就能使用用戶的位置信息和其他內(nèi)容開(kāi)發(fā)出更加有趣的應(yīng)用。雖然這在技術(shù)上沒(méi)有太大的困難,但卻受到隱私保護(hù)條例的限制。我們將Web瀏覽器當(dāng)做是用戶進(jìn)入World Wide Web的入口。加入定位功能,意味著在網(wǎng)站中引入了一些敏感信息,這有可能導(dǎo)致嚴(yán)重的后果。但是位置感知應(yīng)用中顯示的位置信息必須經(jīng)過(guò)用戶的授權(quán),用戶當(dāng)然有權(quán)禁止應(yīng)用發(fā)布自己的位置信息。
6.使用攝像頭
攝像頭可以為你的應(yīng)用提供豐富的可能性。以往移動(dòng)MMS(Multimedia Messaging Service)被用于處理移動(dòng)照片。換言之,你拍了一張照片后,需要使用MMS將它傳送給一個(gè)服務(wù)器,服務(wù)器對(duì)照片做出相應(yīng)的處理,并將處理完成的結(jié)果通知給你。這個(gè)過(guò)程是非常耗時(shí)的,而且相當(dāng)復(fù)雜,也沒(méi)有可靠性保障。
通過(guò)訪問(wèn)攝像頭,Native App開(kāi)發(fā)者能夠簡(jiǎn)化拍照的過(guò)程。用戶可以直接在客戶端對(duì)照片做一些簡(jiǎn)單的處理,只有在有需要的時(shí)候才將照片上傳給服務(wù)器,而且是通過(guò)可靠的HTTP傳輸。W3C正在開(kāi)發(fā)一個(gè)訪問(wèn)攝像頭的API,但現(xiàn)在還沒(méi)有將這部分工作正式整合到瀏覽器中。
在許多類型的移動(dòng)Apps中,攝像頭是非常有用的,比如快拍應(yīng)用、短片拍攝應(yīng)用等等,攝像頭可以用來(lái)捕捉許多重要的瞬間。不久的將來(lái),我們可以看到——只要通過(guò)攝像頭拍攝某個(gè)標(biāo)識(shí),應(yīng)用程序就能自動(dòng)完成對(duì)標(biāo)識(shí)上的語(yǔ)言轉(zhuǎn)換工作——這個(gè)技術(shù)在日本已經(jīng)開(kāi)始流行起來(lái)了。
7.使用感應(yīng)器
現(xiàn)在越來(lái)越來(lái)越多的移動(dòng)設(shè)備上都新增了感應(yīng)器功能,該裝置可以感知設(shè)備的物理速度以及重力,并將感知的數(shù)據(jù)結(jié)果傳送給設(shè)備。這個(gè)裝置常被用來(lái)感應(yīng)設(shè)置是否被翻轉(zhuǎn),應(yīng)用根據(jù)接受到的信息自動(dòng)調(diào)節(jié)畫(huà)面的方向。
感應(yīng)器可以用來(lái)幫助用戶提升與設(shè)備交互時(shí)的真實(shí)感;大多數(shù)移動(dòng)設(shè)備都是手持的,應(yīng)用能夠根據(jù)設(shè)備的方向調(diào)整內(nèi)容畫(huà)面,比如翻轉(zhuǎn)屏幕,或是檢測(cè)物理移動(dòng),并能據(jù)此猜測(cè)用戶所處的環(huán)境。舉一個(gè)簡(jiǎn)單的例子:比如用戶正在走路,那么感應(yīng)器能夠檢測(cè)到一個(gè)輕緩的移動(dòng)或是速度,這時(shí)可以為用戶提供一個(gè)大字體的用戶界面,從而使得用戶更容易看清屏幕上的內(nèi)容。
然而,開(kāi)發(fā)者也不能過(guò)分依賴感應(yīng)器,因?yàn)楦袘?yīng)器無(wú)法區(qū)分究竟哪些交互是有意的,而哪些是沒(méi)有意義的。每個(gè)移動(dòng)交互都需要通過(guò)“傳輸測(cè)試”。設(shè)計(jì)你的交互時(shí)必須考慮用戶在一個(gè)擁擠的汽車或是火車上的場(chǎng)景。考慮一下如果用戶正身處擁擠的地鐵或是正在駕車時(shí),你的應(yīng)用能否正確處理用戶搖晃移動(dòng)設(shè)備的動(dòng)作。通常,大多數(shù)開(kāi)發(fā)者都沒(méi)有考慮這些因素。確保為每個(gè)任務(wù)設(shè)計(jì)一個(gè)備用方案以處理特殊場(chǎng)景中的移動(dòng)交互。
8.訪問(wèn)文件系統(tǒng)
如果你的應(yīng)用需要將數(shù)據(jù)保存在本地,那么你需要開(kāi)發(fā)一個(gè)Native App。比如你要保存用戶的地址簿、電話或E-mail信息,或是保存從其他設(shè)備上獲取的數(shù)據(jù)。
訪問(wèn)文件系統(tǒng)常常會(huì)涉及到安全和用戶隱私保護(hù)的問(wèn)題。惡意應(yīng)用程序可能會(huì)修改或是刪除你的移動(dòng)設(shè)備上的數(shù)據(jù)。一個(gè)攜帶病毒的應(yīng)用程序可以利用移動(dòng)設(shè)備上的關(guān)系網(wǎng)將病毒擴(kuò)散到許多其他的手機(jī)上,在采用移動(dòng)應(yīng)用認(rèn)證機(jī)制以前,這種事情是常常發(fā)生的。
另一方面,移動(dòng)設(shè)備正變得越來(lái)越私人化,移動(dòng)設(shè)備上保存了大量用戶的個(gè)人信息,以及用戶的朋友信息和商業(yè)信息。針對(duì)這些私人信息開(kāi)發(fā)應(yīng)用是一個(gè)不錯(cuò)的想法。但是這也存在一定的風(fēng)險(xiǎn),使用保存在移動(dòng)設(shè)備上的數(shù)據(jù)可以為用戶提供更加有針對(duì)性的服務(wù)。
開(kāi)發(fā)者必須謹(jǐn)記,只有在獲得用戶的授權(quán)后才能訪問(wèn)用戶的私人數(shù)據(jù)。我們看到許多應(yīng)用在沒(méi)有得到用戶授權(quán)的情況下使用了大量的用戶私人數(shù)據(jù),而被誤認(rèn)為是垃圾信息或是釣魚(yú)應(yīng)用,即使這些應(yīng)用原本是在提供一些非常有用的服務(wù)。人們對(duì)你的應(yīng)用的誤解將會(huì)影響到你的服務(wù)的推廣,如果運(yùn)營(yíng)商收到過(guò)多關(guān)于你的應(yīng)用的投訴,那么你的服務(wù)可能將被終止,甚至?xí)窟B其他的應(yīng)用。
訪問(wèn)文件系統(tǒng)時(shí)至關(guān)重要的一點(diǎn)就是在沒(méi)有獲得用戶授權(quán)的情況下,不要訪問(wèn)任何用戶的私人數(shù)據(jù)。而這一點(diǎn),往往被大多數(shù)應(yīng)用忽略了。W3C正在為移動(dòng)開(kāi)發(fā)商開(kāi)發(fā)相關(guān)的標(biāo)準(zhǔn)API,但目前該工作尚未完成。
9.離線用戶
最后一個(gè)需要開(kāi)發(fā)Native App的理由就是,用戶有可能是離線的或者無(wú)法接入移動(dòng)網(wǎng)絡(luò)。這在城市可能很少發(fā)生,即使是在農(nóng)村,網(wǎng)絡(luò)的覆蓋也已經(jīng)逐步普及了。但是短暫的網(wǎng)絡(luò)連接中斷還是時(shí)常發(fā)生的,你的應(yīng)用程序應(yīng)該考慮如何處理這種情景。
想想用戶通常在什么時(shí)候,在哪里會(huì)使用你的App。如果是一個(gè)移動(dòng)游戲,那么用戶很可能在飛機(jī)上使用這個(gè)App。跟蹤地圖應(yīng)用常在偏遠(yuǎn)且網(wǎng)絡(luò)覆蓋不佳的地方使用。移動(dòng)旅游向?qū)СT谝粋€(gè)國(guó)外的網(wǎng)絡(luò)中訪問(wèn),往往需要支付漫游和國(guó)際網(wǎng)絡(luò)費(fèi)用。這時(shí),應(yīng)用程序最好能夠?yàn)橛脩籼峁╇x線服務(wù),保證用戶在不接入網(wǎng)絡(luò)的情況下,仍然能享受同等的服務(wù)。
現(xiàn)在支持HTML5的瀏覽器也能實(shí)現(xiàn)脫機(jī)訪問(wèn)功能,但對(duì)用戶來(lái)說(shuō)可能不太明顯。隨著越來(lái)越多的瀏覽器都開(kāi)始支持脫機(jī)訪問(wèn),應(yīng)用需要明確地告訴用戶網(wǎng)絡(luò)連接中斷時(shí),他們?nèi)匀豢梢栽L問(wèn)移動(dòng)Web Apps。
Native Apps常常假設(shè)網(wǎng)絡(luò)連接是可靠的。App通常只考慮了網(wǎng)絡(luò)狀況良好的情景,想當(dāng)然地認(rèn)為網(wǎng)絡(luò)是封閉的,并且網(wǎng)速足夠快。移動(dòng)設(shè)備從網(wǎng)絡(luò)良好的環(huán)境突然進(jìn)入一個(gè)網(wǎng)絡(luò)糟糕的環(huán)境并不少見(jiàn)。Native Apps應(yīng)該在網(wǎng)絡(luò)狀況最差的情況下測(cè)試。比如用戶啟動(dòng)任務(wù)時(shí)可能還是全信號(hào)覆蓋,而在任務(wù)結(jié)束時(shí)可能已經(jīng)完全沒(méi)有網(wǎng)絡(luò)信號(hào)了。
用戶在安裝Native Apps時(shí),根本不會(huì)考慮是在線訪問(wèn)還是離線訪問(wèn)——他們期望的是不管在任何狀況下,Native Apps都能正常工作。而這也是開(kāi)發(fā)者的職責(zé)。
什么時(shí)候應(yīng)該選擇Web App
只要你的應(yīng)用程序不滿足之前提到的Native App條件之一,那么你就沒(méi)有必要開(kāi)發(fā)一個(gè)Native App,而應(yīng)該選擇開(kāi)發(fā)一個(gè)Web App。正如文章之前提到的,我是一個(gè)Native App的擁護(hù)者,我認(rèn)為Native App有許多優(yōu)秀的特質(zhì),并且具有很大的市場(chǎng)潛力,但是Web Apps是唯一一個(gè)經(jīng)久不衰的移動(dòng)內(nèi)容、服務(wù)、應(yīng)用開(kāi)發(fā)平臺(tái)。
Native App并不能明顯地為用戶提供更好的服務(wù);它反而會(huì)增加項(xiàng)目的成本,減少了應(yīng)用發(fā)布的渠道,增加了App升級(jí)的復(fù)雜度,削弱了開(kāi)發(fā)者對(duì)應(yīng)用的控制和利潤(rùn),并且可能會(huì)給設(shè)備帶來(lái)麻煩。Native App可以為開(kāi)發(fā)者帶來(lái)短期的效益,但這是有一定風(fēng)險(xiǎn)的,甚至可能會(huì)影響到移動(dòng)市場(chǎng)的可持久發(fā)展。
移動(dòng)Web App的優(yōu)勢(shì)在前文中已經(jīng)提到過(guò)了。如果上一節(jié)提到的幾點(diǎn)功能是促成你選擇Native App的唯一原因,那么如果能夠在移動(dòng)瀏覽器上屏蔽這些障礙,你是否還會(huì)堅(jiān)持選擇Native App呢?Palm的webOS已經(jīng)著手解決了上述的部分問(wèn)題。他們基于WebKit構(gòu)建了一個(gè)全移動(dòng)操作系統(tǒng),將手機(jī)變成了一個(gè)Web瀏覽器。所謂的“Native Apps”實(shí)際上就是一個(gè)Web Apps。
PhoneGap也是一個(gè)類似的項(xiàng)目,這個(gè)開(kāi)源項(xiàng)目用于幫助開(kāi)發(fā)者在iPhone、Android以及BlackBerry設(shè)備上開(kāi)發(fā)Native Apps,并且能夠模擬設(shè)備上的功能(如定位功能和文件系統(tǒng))供Web Apps調(diào)用。這些代碼可以在各個(gè)設(shè)備的應(yīng)用商店中發(fā)布并且出售,但是他們使用的通用代碼和設(shè)計(jì)是可以共享的。由于開(kāi)發(fā)的是一個(gè)Web App,開(kāi)發(fā)者可以為低端的移動(dòng)瀏覽器開(kāi)發(fā)一個(gè)簡(jiǎn)化版的應(yīng)用。只用開(kāi)發(fā)一次,就可以部署在多個(gè)平臺(tái)上了,
對(duì)于那些有著豐富的移動(dòng)開(kāi)發(fā)經(jīng)驗(yàn)的程序員來(lái)說(shuō),一提到“要開(kāi)發(fā)一個(gè)功能豐富的應(yīng)用”時(shí),可能首先想到的就是Native App。雖然在很多設(shè)備上,這一想法仍然適用,但是現(xiàn)在移動(dòng)Web Apps上也提供了足夠豐富的功能接口供開(kāi)發(fā)者調(diào)用。這使得Web App不僅可以像Native App一樣被設(shè)計(jì)得功能豐富界面絢麗,而且還能在各個(gè)平臺(tái)上遷移,甚至不用修改一行代碼。
現(xiàn)在在移動(dòng)設(shè)備開(kāi)發(fā)中,移動(dòng)Web Apps的創(chuàng)新進(jìn)入了前所未有的高潮時(shí)期。但更重要的是,這是有史以來(lái)第一次,移動(dòng)設(shè)備開(kāi)發(fā)商決定共同制定一個(gè)移動(dòng)Web開(kāi)發(fā)的標(biāo)準(zhǔn),就像是桌面Web上的標(biāo)準(zhǔn)一樣。不僅如此,那些支持移動(dòng)Web App創(chuàng)新功能的設(shè)備或是支持第三方瀏覽器的移動(dòng)設(shè)備都受到消費(fèi)者的歡迎。