現狀:
- 當前App中,通常,少部分頁面是採用「App嵌入H5網頁 (Hybrid App)」 ,大部分頁面是採”App原生”方式來實現功能。
- 在一個App原生頁面中,大部分地方可由手機API控制顯示指定信息、操控App前端顯示指定樣式的UI (這些樣式的App代碼需要預先寫在App本地)。
- 淘寶、天貓這樣的電商App來說,我們的App仍總是看起來沒有別人的一般變化多端。
但是,如果為了能達到隨時變化、增加新的變化之目的而改採「App嵌入H5網頁 (Hybrid App)」的方式,卻會造成因”H5網頁操作體驗無法超越原生App”先天技術限制使App體驗變差。 - 對於前述這些顧慮,Apple iOS 及 Google Android兩大陣營皆未釋出官方的解決方式。
Facebook 在2015上半年,推出了「React Native」這種新技術。據我理解,其重點有二:
- 重點一:以 Javascript 語言一次對 iOS App及 Android App進行開發 (但又非以往 PhoneGap、Titanium、Corona 等第三方SDK那種體驗仍不如原生語言的作法 )
- 重點二:能夠實現 “讓App本地向服務端請求更新,下載新代碼、置換原本在App本地的原生代碼”
其中,前述重點二,舉直接一點的例子來說,很可能可以實現至少以下兩種需求:
- 需求一:假設我們的App因為公司重大政策修改,必須要立即升級新版本,但這個修改太大了,一來無法用API對線上版本做兼容、二來等待Apple App Store審核新版本又太曠日廢時。用React Native這樣的方式,線上版本App能夠從Server下載最新的相關代碼,用來置換本地App中的地址相關代碼,達成 「飛牛沒釋出新版本App、客人也無須更新App」 的情況之下,使線上版本直接變成使用新規則。
- 需求二:我們永遠都會看到天貓、淘寶這些強大的競爭者在雙11、雙12時 「又在App首页推出了不可思議的新模塊」,那些新模塊,應該是不太可能全都是「每次發App新版本時都預先寫在App本地裡面的」,應該可以透過遠程直接對App做更新。
下面有一些網路上的參考資料:
- 網路上來自天貓、淘寶的公開文章:http://www.tuicool.com/articles/r2EvMzn
上面這篇文章,發表於2015年10月,作者是天貓技術團隊,說明天貓App團隊真的有採用React Native技術,早在2015年618大促時,就有用這技術達成動態更新App前端的展示內容。 - 淘寶Weeb技術: http://mp.weixin.qq.com/s?__biz=MjM5MDE0Mjc4MA==&mid=402379225&idx=1&sn=e7d4832eaed0f6e2f6abcf3ee121e2ec&scene=2&srcid=0119pUB0LhsRFJ88yILFBIBy&from=timeline&isappinstalled=0#wechat_redirect 上面這篇文章,發表於2016年1月,作者是淘寶App工程師,說明淘寶團隊除了採用Facebook React Native技術以外,還自己搞了一套 Weeb 技術來實施App端的動態更新,並且用於淘寶App。
- Apple的官方文件 https://developer.apple.com/programs/ios/information/iOS_Program_Information_4_3_15.pdf 根據Apple開發者網站的文件,沒有明文對React Native這樣的技術表示支持或是禁止,但是有明文指出:在不涉及改變App原有功能主軸的前提之下,Apple 允許遠端下載code對App本地做更新。
- Facebook的實際案例:Facebook的 iOS版本 Facebook Group 及 Android版本 Ads Manager這兩個App,都已經是使用React Native技術實現。他們可以在「不發新版本到App Store上」的前提之下,依然持續對線上版本App做功能更新。
- AppHub https://apphub.io/how 這樣的服務,提供Server給「採用React Native」的App,存儲新的App代碼。而不需要發新版本到App Store上。
以上種種,使我相信:動態更新App,將是App領域下一個革命性的演進,能讓App在兼顧操作體驗的同時,實現如同網頁般靈活地動態更新。