谷歌:打造出色的移動應(yīng)用必須知道的十點(diǎn)規(guī)則
譯文iOS與Android之間的不同成為移動領(lǐng)域一切差異的根源,但只要遵循以下技巧、大家就完全能夠在打造跨平臺應(yīng)用程序的工作當(dāng)中取得成功。
我最近撰寫并出版了一本名為《利用Appcelerator構(gòu)建原生跨平臺App:寫給Web開發(fā)人員的新手指南》的跨平臺移動開發(fā)書籍。今天的文章內(nèi)容主要源自對該書主干的摘錄,但在清晰性與篇幅長度上作出了針對性調(diào)整??傮w來說,本文可以視為對該書內(nèi)各核心重點(diǎn)的整理與總結(jié)——當(dāng)然,如果大家愿意,也可以稱之為“備忘清單”。
盡管這些技巧主要圍繞Appcelerator平臺所展開,但其核心主旨仍然適用于任何一位打算為多種移動操作系統(tǒng)同時(shí)編寫應(yīng)用程序的開發(fā)人員。如果大家能夠?qū)⑦@些技巧理解透徹并加以掌握,那么它們必定會幫助各位打造出出類拔萃的跨平臺原生應(yīng)用程序。
技巧一號:不同平臺對于“美”的定義亦有所區(qū)別
以下各圖所示為Evernote移動應(yīng)用在iOS 8、Android 4.4.4以及Windows Phone 8.1平臺上的運(yùn)行效果。這些截屏顯示的是該應(yīng)用的主屏幕內(nèi)容,由于在同一時(shí)間由同一位用戶所登錄,因此其數(shù)據(jù)是完全相同的。
不過正如大家所見,Evernote在不同平臺上的用戶界面可謂截然不同。它們都很美觀而且擁有出色的設(shè)計(jì),但很明顯“漂亮的Android應(yīng)用”這一概述與“漂亮的iOS應(yīng)用”可謂相去甚遠(yuǎn)??偨Y(jié)來看,不同平臺對于“美”的定義亦有所區(qū)別。
在著手設(shè)計(jì)自己的應(yīng)用程序之前,請大家別急著行動,先了解自己這套目標(biāo)平臺的運(yùn)作特色,并根據(jù)其具體參數(shù)實(shí)現(xiàn)自己的品牌表現(xiàn)效果。另外請大家記住,即使各位的應(yīng)用程序渲染機(jī)制在不同平臺上有所區(qū)別,有了Appcelerator的幫助、我們?nèi)匀荒軌蛟诙嗥脚_上使用同一套代碼庫并獲得相當(dāng)高的代碼可重復(fù)使用比例。
技巧二號:所謂代碼重復(fù)使用指的是應(yīng)用程序的邏輯——而不一定是UI
在使用Appcelerator或者其它跨平臺工具時(shí),人們往往對于代碼重復(fù)使用這一概念存在著諸多誤解。事實(shí)上,期待能將全部代碼都加以重復(fù)使用本身并不合理,因?yàn)檫@不僅意味著我們對于自己應(yīng)用的UI/UX幾乎不具備任何控制能力,同時(shí)也代表著應(yīng)用程序在不同目標(biāo)平臺上將擁有幾乎一致的視覺表現(xiàn)。
當(dāng)然,有些朋友認(rèn)為這正是跨平臺工具的終極目標(biāo)——但我得說,這確實(shí)是種理解偏差。這是網(wǎng)絡(luò)瀏覽器的終極目標(biāo),跟跨平臺工具真的沒啥關(guān)系。再次強(qiáng)調(diào)一點(diǎn),高重復(fù)可用性應(yīng)該體現(xiàn)在應(yīng)用程序的邏輯層面。
技巧三號:始終秉持“Web服務(wù)”的思維方式
因?yàn)槲覀円_發(fā)的是跨平臺應(yīng)用程序,因此我建議大家最好在編寫代碼時(shí)確保其完全抽象,這一點(diǎn)與創(chuàng)建Web服務(wù)時(shí)非常相似(如果大家愿意,可以將跨平臺應(yīng)用理解成一種本地化Web服務(wù))。將所有編程邏輯完全獨(dú)立于其所將運(yùn)行的屏幕之外甚至是平臺之外,這樣應(yīng)用中的全部編程模塊就完全不會受到具體平臺類型的影響了,而且更重要的是,其能夠在其它平臺上得到重復(fù)使用。接下來,建立原本用戶界面,其作用是使用這些“本地Web服務(wù)”。在這套架構(gòu)的支持下,各位將能夠確保自己的所有用戶界面代碼都徹底從邏輯中解耦出來,且各自擁有獨(dú)立的運(yùn)作流程。
作為一位前Web開發(fā)人員,我在構(gòu)建移動應(yīng)用程序時(shí)花了很長時(shí)間才完成了這一思路扭轉(zhuǎn)與適應(yīng)工作。是的,當(dāng)時(shí)我一直在腦袋里想著“Web服務(wù)”這個(gè)概念。不過這種關(guān)于心理轉(zhuǎn)變的努力是完全值得的,而我們的應(yīng)用程序也會因此變得更加出色。
更重要的是,通過這種方式,我們在iOS平臺上使用TabbedBar或者在Android平臺上使用ViewPager將不會帶來任何差異。畢竟用戶界面代碼僅僅只是應(yīng)用程序邏輯的消費(fèi)方。
為了幫助大家更順利地完成這段旅程,我特意準(zhǔn)備了一套應(yīng)用程序模板,大家可以利用它來創(chuàng)建自己的全新應(yīng)用程序(詳見后文)。這套模板利用Alloy,也就是Appcelerator的MVC框架編寫而成。該模板提供針對不同平臺構(gòu)建多套用戶界面所必需的MVC架構(gòu),而且其內(nèi)容與邏輯皆具備可重復(fù)使用性。各位可以點(diǎn)擊此處從GitHub處下載這套應(yīng)用程序模板。
技巧四號:請記住,標(biāo)簽既可深入、亦可淺顯
iOS標(biāo)準(zhǔn)當(dāng)中包含一套內(nèi)置NavigationController,允許各個(gè)標(biāo)簽當(dāng)中包含多個(gè)導(dǎo)航層級。相比之下,Android標(biāo)簽的結(jié)構(gòu)則較為淺顯,并不具備標(biāo)簽內(nèi)導(dǎo)航機(jī)制。
為了更形象地說明這一點(diǎn),我將向大家展示Facebook的Android版本應(yīng)用程序在這方面犯下的錯(cuò)誤(不過目前其已經(jīng)得到修復(fù))。下圖所示為Facebook的Android版本應(yīng)用程序原本采用的通知標(biāo)簽。
在任何一套Android應(yīng)用設(shè)計(jì)指南當(dāng)中都會提到,當(dāng)用戶按下主屏幕處的后退按鈕時(shí),當(dāng)前應(yīng)用程序就會被關(guān)閉?,F(xiàn)在,如果大家點(diǎn)擊Facebook應(yīng)用程序當(dāng)中的任意通知信息,就會看到如下圖所示的畫面。
在Android標(biāo)簽當(dāng)中,這里并不應(yīng)該存在導(dǎo)航按鈕。
很明顯,F(xiàn)acebook公司希望能夠像iOS那樣在標(biāo)簽之內(nèi)實(shí)現(xiàn)導(dǎo)航功能。然而這直接引發(fā)了兩個(gè)問題。第一,目前我們面對的是通知標(biāo)簽,但ActionBar的標(biāo)題處卻寫著“評論”。這實(shí)在讓人有點(diǎn)犯迷糊,而且也與直觀感受有所沖突。第二,也是最重要的一點(diǎn),后退按鈕在這里被重新定義:按下它不再意味著關(guān)閉應(yīng)用程序,而是將用戶帶回到前一個(gè)屏幕處。
作為一項(xiàng)重要的經(jīng)驗(yàn)法則,不要嘗試在自己的Android標(biāo)簽當(dāng)中強(qiáng)行加入導(dǎo)航機(jī)制。這么做只會破壞后退按鈕的操作效果,并讓大家的應(yīng)用程序給人留下莫名其妙的印象。
技巧五號:透徹自己的目標(biāo)平臺
以上列舉的實(shí)例也恰好證明了這一條,即我們應(yīng)當(dāng)對自己的目標(biāo)開發(fā)平臺加以透徹了解。而了解自己的應(yīng)用程序能夠借用平臺上的哪些功能特性、我們又應(yīng)該或者不應(yīng)該采取哪些設(shè)計(jì)思路的最佳途徑就是認(rèn)真閱讀每套平臺的用戶界面開發(fā)指南。
除非大家每天都在使用自己的目標(biāo)開發(fā)平臺,而且有信心對其中的運(yùn)作方式、視覺相似性以及差異性都了如指掌,否則我建議大家先花點(diǎn)時(shí)間通往閱讀其開發(fā)者指南。
好好看看iOS開發(fā)指南與Android開發(fā)指南,在吃透了這些說明文檔之后,大家將擁有豐富的背景信息,足以幫助自己了解每套平臺的特色、設(shè)計(jì)出更優(yōu)秀的用戶界面并了解能夠借助Titanium API或者第三方模塊實(shí)現(xiàn)哪些運(yùn)行效果。
技巧六號:與設(shè)計(jì)團(tuán)隊(duì)通力協(xié)作
如果大家身為一位圖形設(shè)計(jì)師,請確保自己了解每一套移動系統(tǒng)平臺、其導(dǎo)航模式以及視覺表達(dá)語言。大家會發(fā)現(xiàn),這些細(xì)微的差別最終可能對應(yīng)用程序的可用性造成巨大影響。
如果大家身為一位程序員,且開發(fā)團(tuán)隊(duì)當(dāng)中擁有一位專業(yè)的圖形設(shè)計(jì)師,或者以外包人員/自由職業(yè)者的身份為某個(gè)機(jī)構(gòu)臨時(shí)工作,那么首先請學(xué)會如何與這些非技術(shù)設(shè)計(jì)人員順暢協(xié)作、同時(shí)教導(dǎo)他們吃透移動平臺的特性。幫助他們意識到,不同移動平臺各自擁有自己的一套信息顯示、屏幕布局以及導(dǎo)航實(shí)現(xiàn)機(jī)制,而這些差別絕不僅僅是Android設(shè)備上存在后退按鈕與ActionBar、但iOS上沒有這么簡單。移動平臺彼此間存在差異,因此根據(jù)定義,大家的跨平臺應(yīng)用程序也應(yīng)該在不同平臺之上提供有所區(qū)別的顯示效果。
技巧七號:不要畏懼模塊
Appcelerator的目標(biāo)從來不是為100%原生SDK提供全面支持,恰恰相反,其核心訴求在于提供一套全面而卓越的跨平臺API。為了涵蓋那些尚未正式得到支持的功能特性,Appcelerator提供了一套原生模塊開發(fā)框架(即Native Module Development Framework),Objective-C與Java開發(fā)人員能夠利用它享受到更多特性與功能所帶來的便利。這些模塊能夠顯著增強(qiáng)應(yīng)用程序的整體質(zhì)量,并借此帶來更出色的用戶體驗(yàn)。學(xué)習(xí)尋找模塊、使用模塊并接納模塊。
技巧八號:熱愛自己的目標(biāo)開發(fā)平臺
不要讓我們的個(gè)人偏好影響到跨平臺應(yīng)用程序的設(shè)計(jì)、功能以及質(zhì)量。即使大家更喜愛iOS,也沒有理由因此而為iOS版本的應(yīng)用作出更多承諾,而留下Android用戶孤伶伶無人問津。學(xué)會熱愛每一套移動平臺,了解其各自優(yōu)勢與局限。學(xué)會對不同平臺進(jìn)行比較,而不是有針對性地挑剔甚至進(jìn)行語言攻擊。各平臺都擁有著自己的生存發(fā)展之道,而且從其背景來看都做出了正確的選擇。請記住,我們是專業(yè)的開發(fā)人員,我們的目標(biāo)就是為每一套目標(biāo)平臺開發(fā)出能力范圍之內(nèi)最棒的應(yīng)用產(chǎn)品。
技巧九號:經(jīng)常測試
由于我們的跨平臺應(yīng)用程序當(dāng)中包含有大量跨平臺以及平臺專用性代碼及組件,因此請確保自己以較高頻率對其進(jìn)行測試。不要連續(xù)幾天在Android版本上搞東搞西,最后卻發(fā)現(xiàn)自己的編寫成果運(yùn)行在iOS平臺上時(shí)會產(chǎn)生對象位置偏差、顯示字體有誤甚至App載入時(shí)崩潰等問題。我的建議是經(jīng)常進(jìn)行測試,這樣如果單一平臺上存在問題、大家將能夠立刻意識到這一點(diǎn)。
技巧十號:從用戶的角度思考問題
在構(gòu)建自己的應(yīng)用程序時(shí),我們的用戶是需要最優(yōu)先考量的核心因素。要在目標(biāo)平臺上開發(fā)應(yīng)用,我們自己首先應(yīng)該成為該平臺的用戶并了解該平臺的運(yùn)作方式。另外,在用戶之前首先自行試用,看看應(yīng)用程序體驗(yàn)?zāi)芊駶M足自己的預(yù)期。再有,將視角放遠(yuǎn),感受一下其它應(yīng)用程序,并從客觀的角度比較并分析它們與自己設(shè)計(jì)成果間的優(yōu)劣。
在對自己的應(yīng)用程序進(jìn)行測試時(shí),請注意以下幾個(gè)問題:我會使用自己的應(yīng)用程序嗎?這款應(yīng)用程序的使用感受是否理想?確保一切都符合我們自己的既定標(biāo)準(zhǔn)。如果大家熱愛自己的應(yīng)用成果,那么相信用戶們也會對其表示認(rèn)同。
在我們當(dāng)下所生活的時(shí)代里,沒有任何一家企業(yè)能夠忽視移動技術(shù)的強(qiáng)大力量或者無視移動用戶們的預(yù)期及需求。了解如何正確地開發(fā)跨平臺應(yīng)用程序?qū)⒊蔀橐豁?xiàng)關(guān)鍵性技能,足以幫助大家(以及所在企業(yè))在激烈的市場競爭當(dāng)中脫穎而出。有了以上十條技巧作為保障,大家應(yīng)該能夠以自己的方式在移動開發(fā)的道路上取得成功。
備注:我還將以上技巧制作成了信息圖表,以便于大家隨時(shí)激勵自己——點(diǎn)擊此處即可查看。圖表內(nèi)容被設(shè)計(jì)成了海報(bào)尺寸,這樣大家就能根據(jù)需要將其打印并貼在辦公桌邊的墻上了。
原文鏈接:
http://www.infoworld.com/article/2918472/mobile-development/top-10-tips-for-building-better-mobile-apps.html
原文標(biāo)題:Top 10 tips for building better mobile apps
核子可樂譯