Cordova webapp實戰開發:(7)如何通過簡單的方法做到,不重新發布APP來修復bug、增加功能、或者躲開蘋果的一些嚴格審核?


到《Cordova webapp實戰開發:(6)如何寫一個iOS下獲取APP版本號的插件?》為止,我們已經大體學會了如何使用Cordova了,那些都是使用Cordova的開發者必備的技能。今天我們要說一下開發者應該具備的一些額外經驗,這些經驗簡單有效,如果希望要更系統更好的方法,那就持續關注本系列文章吧,與敏捷個人一起成長。

本次練習你能學到的

  1. 學習如何動態不發布APP來修復bug
  2. 學習如何動態增加功能
  3. 學習如何躲開蘋果的一些嚴格審核

 

如何動態不發布APP來修復bug

做過網站的都知道,修復bug很方便,只要更改一個網站,所有訪問此網站的人使用的都是最新版本。其實這對做PC端產品的人也不陌生,大家都做自動升級,也就是客戶端會在開啟時啟動檢查服務器端是否有最新版本提供,有的就自動下載更新。這也是Android和iOS原生APP檢查更新的傳統方式。

對於一些善於思考和優化運營的原生APP開發者來說,他們會想要做增量更新,也就是把服務器的資源下載到手機上,省去了重新安裝APP的過程,這個需要一些技術含量的。幸運的是,現在Web App的興起讓大家做APP時也考慮是否能像web站點一樣來動態更新呢?不說新增功能,至少能夠動態修復一下bug吧?

如果你有這種想法,那么接下來的一些小技巧可能能派上用場。這不需要你有什么技術含量,我把代碼一貼出來,你就會比一般人高一些的經驗了。

在做 掌中廣材 的時候,我人手嚴重不夠,測試力度在當前團隊組成來看也一定不足,我就想如何保證快速響應,能夠在發現問題后馬上更改修復呢?

雖然前幾年我用Web APP方式做了敏捷個人的應用,但是基本上很少花心思在上面去想技術的問題,但是做產品不一樣,這不只是興趣,更要承擔所應承擔的責任。於是開始思考如何能夠做到在不重新發布APP的情況下來修復一些bug?

事情要做到完美或極致都是需要付出時間和努力的。我沒有太多時間,所以只能想一個比較簡單,但又相對有效,能解決某一類問題的解決方案,最終想到的方案也很簡單有效,簡單的說,就是在Cordova的每個頁面調用一個服務器端的腳本,這個腳本可以重寫和新增函數,如果發現之前寫的函數有bug,那就重寫這個函數,然后發布到Web服務器上。這樣的話,用戶安裝的APP不需要重新安裝,就會調用更新后的函數體中。

說起來是不是很簡單,如果還不明白,不要緊,接着我會貼出一些代碼,這樣你就會更明白我在說什么了。

上面是掌中廣材APP的一個【選擇城市】的截圖,發布時遺漏了一個bug出去。在Andorid下一切正常,但是發布到iOS上卻出現了一個奇怪現象。那就是輸入b之后軟鍵盤就自動消失了,以致於不能再輸入j。這個問題折騰我兩天了,當時很郁悶。試了很多步驟都沒有找到問題所在,最后才發現原來問題是公司的統計平台的一個js代碼導致,這個就不具體說了,不是本文重點。重點是我發現問題了,並知道如何修改了,現在怎么修復讓用戶立刻正常使用的問題?

發布Andorid還好說,iOS那可不是你說發布就發布的,審核周期一般兩周,出點問題讓你審核不通過一個月就只能發一次,如果只因為修改一個bug就發一次,那代價太大了,但如果不發布,讓用戶用一個月錯誤的軟件,代價就更大,用戶流失率一定會劇增。那我是如何做到立刻修復這個問題的呢?

看看代碼,在城市輸入框中輸入事件代碼如下圖所示,在 scj.js 有一個函數 inputCityKeyWord。這個問題的修復其實就是我把這個代碼里關於統計的那一行代碼注釋掉,也就是不進行統計。

 

我現在的做法是,在另一個叫做 scjEx.js 中重寫了這個函數 inputCityKeyWord,

 

現在你一定很好奇,我這個scjEx.js 文件和 scj.js 有什么關系?

在scj.js文件最后,我有一行這樣的代碼

$.getScript("http://【隱去了我工作的地址,這里是你的具體網址】/www/js/app/scjEx.js");

要理解這段代碼到意思,需要先了解jQuery.getScript()函數。這個函數用於通過HTTP GET形式的加載JavaScript文件並運行它。可以動態加載JS文件,並在全局作用域下執行文件中的JS代碼。這個js代碼可以是該函數可以以異步方式加載跨域的JS文件。

理解這個函數之后就應該知道我寫上這句,其實就是為了讓cordova加載完業務js之后,加載執行一段服務器的js。

接下來的事情就有意思了。

你想想,如果這兩個文件都有相同名字的函數,程序會怎么辦?不知道答案的可以自己去嘗試一下。嘗試完了是否也理解了我是如何做到不重新發布APP來修復bug的呢?如果還不明白,再重頭看一遍,這個必須看懂,否則以后系列出來更復雜更完善增量更新,那就更不好懂了。(其實增量更新,我還一直沒時間去做,或者說連思考還沒有開始,我一個人需求、開發、測試、運營都做,結果技術上沒有以前那么投入了)

如何增加新功能

看下面兩張圖,有什么區別?

第二幅圖比第一幅圖多了一個廣告欄,提示下載APP。

使用Web App還有個好處時,你可以發布手機版、網頁版(還可通過微信菜單調用)、桌面版,如果非手機版使用時,我們就想在底下加一個推薦下載APP的廣告欄。這些並不是在我原有計划之中的功能,但是我不能因為這個功能重新發版,特別是iOS更不可能呢。

現在如果是你,你可以如何做到不發布APP做到這點?

別告訴我你不會啊。如果還不會,那就返回看上一小節。

簡單的說,就是在這個頁面調用的一個js的服務器端擴展js文件中在$('document').ready(function(){   });中動態生成這個廣告欄,並放置到底下就行了。至於如何動態生成頁面內容,這個不是本文重點,不懂得可以網上找找如何用JQuery動態創建頁面內容

如果這個你自己搞明白了,那么你還可以動態生成一個page,例如這幾天我在思考如何做一個活動頁面,從三個方案最終選擇還是以這種方式來實現

 

躲開蘋果的一些嚴格審核

在掌中廣材的分享功能是使用友盟的社會化分享組件的。我沒什么開發經驗啊,不懂iOS那么多道道,結果提交APP Store之后,竟然被嚴厲的拒絕了。理由很簡單,當手機沒有安裝微信、QQ時,會彈出頁面使用方式,這樣的處理令蘋果很生氣,以不友好為由拒絕了。

還有一個理由就是說我的APP中有一個【檢查更新】,這個蘋果是不允許的,因為只能使用它們APP的更新提醒,在APP內不讓做這個功能。

但是,我也不是聽話的人,蘋果不讓我這么做,我就要乖乖的聽話嗎?

我仍舊使用了第一小節提到的方式,在提交蘋果審核期間,我在服務器端代碼中增加了隱藏分享和檢查更新按鈕的代碼,這樣蘋果就看不到了。眼不見心不煩,看不到他自然也不會拒絕我了,就這樣我被蘋果接收了。

接下來的事情你也能想到。那就是一上架之后,我把那些代碼一刪,iOS上的這些功能又出現在用戶面前了。

 

增量更新要做好其實要狠下功夫的,弄好了就可以更敏捷了,只是真是沒時間弄這一塊。不過今天說的這些也足夠讓大家比以往更敏捷一些。最后想說的是,如果大家想真正敏捷,技術是其次,了解一下敏捷個人,學習它背后的價值觀和思維,會讓你終身受益。

 

PhoneGap App開發 477842664 Cordova App實戰開發2 

 

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM