一個山寨優步APP的全過程
編者按:一群搞事情的程序猿山寨優步的APP,他們想幹啥呢? 一起來看一下吧。
去年,我創辦了 Codename One Academy ,詢問我們的團隊他們想學些什麼。 他們的反應傾向強烈,紛紛表示 想學學怎麼做出來優步這樣的APP 。 一開始我想以優步的風格創造點什麼出來,不過最後決定建立一種跟原生APP的看上去非常接近的東西,某種程度上來說幾乎一模一樣。 我的動機在於:
- 我想讓設計看起來更專業一點,跟著市場上排名一等一的公司的設計總沒錯;
- 通過了解優步的決策,人們可以學到很多東西——我知道我做到了;
- 要是一開始我能創造一些與眾不同的東西,那我可能給自己帶來不可估量的收益。 當然,這在現實世界中並不存在。
我用“克隆”一詞來表明這種相似度,但絕不意味著跟它跟優步做的一模一樣。 優步的APP無所不包,在細枝末節上也見得功夫,而我只有一個星期的時間來寫所有相關的適用代碼……我的目標就是搭起框架來,至於細枝末節,實在是鞭長莫及了。
太長不看版
我有這樣一些心得:
- 優步的安卓和iOS版本是同一批人做的;
- 安卓版本修復了某些bug,而iOS沒有;
- 儘管安卓和iOS版本有著幾乎一樣的用戶界面,但有一項功能安卓沒有iOS卻有;
- 安卓版本的優步不適用原生短信攔截;
- 優步重功能甚於形式;
- 對像優步這樣的應用來說,迅速做出改變和設計決策的能力很重要;
- 巧妙借助現有工具,做出像優步那樣的APP真的不難。
我學到了什麼?
我也沒想著要學到很多東西,不過確實了解了一些令我倍感驚訝的事情。 其中之一就是優步在iOS系統中的原生APP中,大量使用的原質化設計(material design)。 比如:
優步在iOS系統的原生應用
你可注意了,這看起來與安卓版本的APP幾乎相同。 主要的安卓交互界面元素一應俱全:懸浮按鈕、原質化設計文本輸入、箭頭返回鍵……
安卓版本的看著確實和iOS版本一模一樣啊!
我一直都以為原生的小部件是通過營造熟悉感來提高參與度的。 但其實陳和我一直就這個問題在爭論不休,我更推崇“系統原生感”,不過陳更傾向於所有的平台上用戶界面都一致。
看來優步是站在陳這一邊的了。 畢竟 它在安卓系統和iOS系統的用戶界面設計都出差不多 。
仔細想想這也挺有道理,凡事做一遍就行了。 你看它們一套班子可以掛兩塊牌子。 只要整個APP都看著正兒八經,直覺什麼的都沒毛病。
在安卓2.x和iOS6.x這倆操作系統之間的鴻溝大到幾乎不可逾越的日子裡,在安卓系統的APP裡,左上角有一個退出鍵簡直是冒天下之大不韙…
不過現在,即使你不用什麼跨平台工具,兩者的趨同也能帶來不少收益。
切換樣式仍有不同
我不知道這是否是有意為之,但是安卓和iOS系統的優步軟件的切換方式還是全然不同的。 安卓版本版本使用了原質化設計的切換(但我貌似看不出一種主切換方式),相比之下,iOS則表現為覆蓋和滑動。
倘若這是刻意而為,那可能說明“感官”居“直觀”之上風。 我猜他們對此並沒有給予足夠的關心,不過究竟如何就難以確定了。
漏洞問題
這是安卓系統中,優步的登錄界面。
安卓登錄界面
同樣的界面在iOS系統裡看上去差不多,但是存在渲染漏洞。
iOS版本登錄界面的渲染漏洞
以防你沒發現這個bug,我再提醒一下,是在“請輸入你的手機號碼”等字樣那裡出了問題。
優步的肯定做了大量的優化工作,但還是出現了bug,我猜測應該是因為他們太naive,不知道還有國家的國際代碼是三位數吧。 安卓版本(和我們的山寨版本)處理地都很好,可能是因為安卓在全球比較流行,所以漏洞被修復了吧。
不過針對安卓版本的修復並未移植至iOS版本。
有些功能安卓沒有
如果你用的是iOS版的優步,你會發現登錄界面背景圖案的變換,這給人一種賞心悅目的感覺。
所以我就很好奇為什麼它們在安卓版本中不也這樣……我懷疑可能是工程師人手不足吧。
針對這個問題,我研究了一陣子,發現了原因,其實還挺明顯的,因為矢量圖形出了點問題,如果運行那樣的變換程序,軟件就會報錯:
“OpenGLRenderer: Path too large to be rendered into a texture”
“路經過大,無法渲染。”
我發現唯一的解決辦法就是通過繪製新圖像來禁用硬件渲染。
糟糕的是想問題出在哪兒還真不容易。 渲染路徑不會引發異常,只是無法顯示。 所以我不能退回軟件渲染,也不知道路徑中究竟出了什麼問題。
是坐標出界還是坐標數據有誤?
而研究與之相關的安卓代碼,也沒有多大幫助。
不過不管怎麼說,幾乎一樣的用戶界面,有一項功能安卓沒有iOS卻有,總讓人有點不爽。
安卓的短信服務不會被攔截
我最喜歡安卓的一點,是你可以作為開發人員進行低層次的控制。 不過這是一把雙刃劍,但在某些情況下它好處明顯……
一個很好的例子就是短信攔截支持,在註冊或登錄某個軟件時,用戶需要接收短信驗證碼,而安卓系統本身就可以讀取信息並自動填寫到驗證碼輸入框內,可以省去人工輸入 的步驟。
但是優步並不可以這樣做。 它沒有使用安卓的這一功能 。
似乎優步這些年因為需要“太多許可”飽受詬病,可能是因為他們只關心系統允不允許打電話的吧……
我不知道它是否適用於應用程序編程接口。 反正我在我們的山寨版本中添加了這個功能,然後安卓版的註冊省事了不少。
只能豎屏的APP
手機是我的私人物品,我喜歡可以橫屏的APP,然而優步只能豎屏使用。
我也理解他們為啥堅持豎屏。 支持橫屏意味著非常非常大的工作量,就比如說吧,我上文提到的登錄界面bug在橫屏情況下又可能是另外一個樣子,需要重新設計。
以上這些我覺得很明顯地表明優步比起形式來更重功能。 它們略去橫屏支持,直擊目標。 我可以理解這一點。
它們改變良多
在我開始山寨優步的用戶界面之前,還沒有註意到它的用戶界面變化有多快。 比如之前的歷史鍵,是圓形,位於屏幕底部,而現在,交互手勢改成了搜索區域下拉。
對優步這樣的APP來說,迅速做出改變和設計決策的能力是至關重要的 。
用最少的選項提供最多的服務
當然,我並不是一絲不苟地設計了整個APP,90%的工作都基於谷歌的一些應用。
我使用了谷歌地圖和一些網頁服務(方向、位置、地理編碼),還使用Twilio和Braintree分別進行短信和計費功能。 有了這些,我才可以在不到一個星期的時間裡就能做出優步的大部分功能!
巧妙借助現有工具,做出像優步那樣的APP真的不難。
主要的問題在於你能在跨平台工具之上使用何種級別的API支持。
安卓版本的優步和我的山寨版
對優步的工程師們,我有著無限的敬仰,能做出這樣複雜的應用頗為不易。
我認為創新的確是創造新事物,但並不意味著非得是全新的事物。 我們改進上一代事物使之日臻完善,就像簡單地構建出一個山寨優步APP的全過程。 日後我們會看到更為優秀的應用。
原文地址:本文發表於Hackernoon,題目 What I Learned from Cloning the Uber App
原文作者:Shai Almog
譯者:喜湯,由36氪編譯部出品。 編輯:郝鵬程
譯文地址:http://36kr.com/p/5115830.html
題圖來源於網絡