實現(xiàn)App產(chǎn)品開發(fā)中的快速迭代方案

舉個例子,我們一定是要開發(fā)完一個版本迭代需要的所有feature后,并且經(jīng)測試可以用了,才能發(fā)布到AppStore或者各大應用市場。但通常各大應用市 場審核就需要花一定的時間,尤其是AppStore(PS.加急的次數(shù)還非常有限),這樣新的feature開發(fā)完直至能給到用戶使用也還要好多天。并且 由于這個原因,使得如果一個版本迭代規(guī)劃只開發(fā)1、2個小feature就變得非常不劃算了,因為可能開發(fā)所需花費的時間只有2、3天,但發(fā)版卻需要1周 才能通過,并且一旦遇到一些問題和碰到臨時需要調(diào)整一些feature的需求的時候還需要經(jīng)歷同樣的過程,這樣就太不靈活了。

那么,我們就思考一下,是否能通過某些方式把一些功能放到服務器端?這樣是不是就可能每天發(fā)布一個“版本”都可能不是問題呢?實現(xiàn)對功能/交互的云控。

Android和iOS開發(fā)框架中,分別提供了WebView和UIWebView作為承載網(wǎng)頁的載體控件,它在加載URL并顯示的過程中會產(chǎn)生一 些事件,并回調(diào)給我們的APP應用程序,以便我們在網(wǎng)頁加載過程中做應用程序想處理的事情。比如說客戶端需要顯示網(wǎng)頁加載的進度、網(wǎng)頁加載發(fā)生錯誤等等事 件。并且,Android和iOS都是支持JS與原生代碼之間互相調(diào)用的(猿和汪們可以查閱相關(guān)資料了解更多細節(jié),這里不做贅述)。

那么既然Android和iOS中都提供了可以加載URL的控件,并且在WebView(UIWebView)中都是支持JS調(diào)用原生系統(tǒng)事件,原生代碼也可以通過調(diào)用JS來控制WebView,這就具備的把一些APP功能放到服務器端的應用條件了。

WebView(UIWebView)可以利用Html做界面布局,通過這種方式,APP端可以通過加載URL從服務器端獲取Html并按一定的排版來展示一些數(shù)據(jù)。并且通過和JS的交互,做一些復雜的處理。

tips

這里我畫了一張圖,大概勾勒一下實現(xiàn)的過程和方法:

1439942715365

APP外部:

圖中“APP外部”表示無論從微信還是其他外部應用跳轉(zhuǎn)都會可以將一個攜帶了參數(shù)的URL傳遞給APP客戶端,然后通過URL解析參數(shù)從服務器端(包括本地的HTML模板)獲得HTML(包含了數(shù)據(jù))+JS(定義了功能/行為/交互)。

URL解析器:

當 獲得URL后,將URL傳入URL解析器進行解析,這里需要知道得到的結(jié)果就是HTML+JS,講得到的結(jié)果傳給WebView(UIWebView)進 行渲染。這里的URL解析器可以寫在自定義的WebView(UIWebView)中也可以單獨封裝出來,作為處理URL和調(diào)用server端接口的唯一 入口。(注意定義良好的接口擴展性)

自定義的WebView(UIWebView):

接下來在得到了HTML+JS后交給WebView(UIWebView)渲染顯示,通過JS和原生的交互形成點擊事件的響 應:WebView(UIWebView)外的原生事件可以通過JS來控制WebView(UIWebView),而反過來亦然,通過合理的交互設計來使 之體驗加深。這里要設計定義一個擴展性良好的時間解析器以滿足交互需求。

事件解析器:

一方面對系統(tǒng)原生提供的JS和原生之間的可交互功能做封裝,另外通過URL的指向性(解析)、參數(shù)的定義以及特殊標示符來定義多種事件。我們在圖中 可以看到通過事件交互,可以繼續(xù)打開(刷新)一個新的WebView(UIWebView)頁或者打開一個原生頁面,一個原生頁面點擊也可以跳轉(zhuǎn)到一個 WebView(UIWebView)頁,這樣交互就連貫了。

發(fā)表評論