移動(dòng)app快速開(kāi)發(fā)的幾點(diǎn)經(jīng)驗(yàn)(移動(dòng)app開(kāi)發(fā)流程)
余勛杰 Mob移動(dòng)開(kāi)發(fā)者服務(wù)平臺(tái)/MobSDK項(xiàng)目總監(jiān)超過(guò)8年Android開(kāi)發(fā)經(jīng)驗(yàn),參加過(guò)多個(gè) LBS 項(xiàng)目、流媒體項(xiàng)目和社會(huì)化模塊項(xiàng)目,知名App“遇見(jiàn)”公司早期成員,在Android Java層和本地代碼層均有豐富開(kāi)發(fā)經(jīng)驗(yàn)?,F(xiàn)任Mob移動(dòng)開(kāi)發(fā)者服務(wù)平臺(tái)技術(shù)副總監(jiān),主導(dǎo)MobSDK Android端的架構(gòu)設(shè)計(jì)及實(shí)現(xiàn)。
高可用架構(gòu):MobSDK全面支持了移動(dòng)APP開(kāi)發(fā),同時(shí)在不同領(lǐng)域也有不少的競(jìng)品,請(qǐng)問(wèn),您這邊最大的優(yōu)勢(shì)是什么?
余勛杰:最大的優(yōu)勢(shì)主要是幾個(gè)方面:
第一,我們更加全面。我們已經(jīng)構(gòu)建了一個(gè)移動(dòng)SDK矩陣,有10多個(gè)產(chǎn)品,包括13個(gè)SDK以及另外一些垂直方案。我們的競(jìng)品一般只有一兩個(gè),一般情況下,應(yīng)用可能會(huì)同時(shí)使用到多個(gè)SDK或者是多個(gè)工具。這個(gè)時(shí)候使用我們的方案,就會(huì)有更加統(tǒng)一的,比如說(shuō)API、文檔或者是一些應(yīng)用規(guī)范。作為一個(gè)開(kāi)發(fā)者來(lái)說(shuō),可以大大縮短他們的時(shí)間。
第二,因?yàn)檫@些都是我們自己出品的,所以比如說(shuō)我在PPT里面說(shuō)到的一些公共依賴更少。如果說(shuō)你同時(shí)使用多個(gè)不同的競(jìng)品的東西,他們都會(huì)自己有一套基礎(chǔ)代碼,這樣會(huì)導(dǎo)致你的包體積會(huì)明顯變大。
另外,和多數(shù)的競(jìng)品不同,我們一直在努力推廣我們的自動(dòng)集成。從2018年開(kāi)始之后,基本上都是自動(dòng)集成的方案。我們的競(jìng)品最傳統(tǒng)的是下載一個(gè)包,復(fù)制一些庫(kù)進(jìn)去,或者是像現(xiàn)在做得比較好的,比如微信,他們還會(huì)使用Maven的集成方式。但是就像我在PPT上說(shuō)過(guò)的,可能之后的問(wèn)題還是很多,比如需要反復(fù)參閱文檔調(diào)整依賴庫(kù)和配置,而我們有自動(dòng)集成就不需要做這件事情了。
第三,技術(shù)支持。這是我們非常有自信,也是做得很好的方面,我們提供了7×24小時(shí)一對(duì)一的人工技術(shù)支持服務(wù),開(kāi)發(fā)者基本上可以在任何時(shí)候,通過(guò)幾乎所有的平臺(tái),比如說(shuō)QQ、微信、電話甚至是論壇,從我們這里獲取所需的幫助。
高可用架構(gòu):管理眾多的SDK的技術(shù)產(chǎn)品,您這邊有什么秘笈可以和我們分享嗎?
余勛杰:其實(shí)我們也并沒(méi)有說(shuō)在管理方面做得非常突出,歸納起來(lái)可能會(huì)有幾點(diǎn)。首先是項(xiàng)目制,我們會(huì)為每一款SDK都確立一個(gè)獨(dú)立的項(xiàng)目組,然后我們這些SDK產(chǎn)品就由這個(gè)項(xiàng)目組來(lái)進(jìn)行,比如說(shuō)設(shè)計(jì)、研發(fā)、迭代這樣的一些工作。
其次,因?yàn)槲覀冞@邊從好幾年前就已經(jīng)預(yù)料到會(huì)有越來(lái)越多的項(xiàng)目,所以確立了一套產(chǎn)品的項(xiàng)目規(guī)范。對(duì)項(xiàng)目的立項(xiàng)、設(shè)計(jì)、研發(fā)、測(cè)試和發(fā)布(在一些定制化的產(chǎn)品中,可能是交付)各個(gè)環(huán)節(jié)都做了很詳細(xì)的約束。這樣就可以盡量的規(guī)避比如說(shuō)在研發(fā)或者是發(fā)布之后會(huì)出現(xiàn)的一些問(wèn)題。
最后,多維度的產(chǎn)品驅(qū)動(dòng)能力。一方面作為一家技術(shù)導(dǎo)向的公司,我們對(duì)內(nèi)會(huì)提倡工匠精神,鼓勵(lì)我們的產(chǎn)品、研發(fā)部門(mén)不停去打磨自己的產(chǎn)品,優(yōu)化以及迭代。另一方面,我們對(duì)外提倡用戶至上的精神,我們會(huì)要求技術(shù)支持和商務(wù)合作的同事,在做好客戶服務(wù)的同事,還要積極收集用戶對(duì)我們產(chǎn)品功能和服務(wù)的反饋意見(jiàn),通過(guò)對(duì)這些反饋信息的梳理,形成我們新的產(chǎn)品方案,然后繼續(xù)來(lái)推動(dòng)我們我們產(chǎn)品的迭代。
高可用架構(gòu):使用MobSDK來(lái)構(gòu)建一個(gè)自建的電商SDK投入的人力大約會(huì)是多少?
余勛杰:如果說(shuō)要做一個(gè)電商APP,在我們這邊會(huì)有兩個(gè)方案可以選擇。方案一是我們提供“APP工廠”這樣一個(gè)解決方案,開(kāi)發(fā)者可以直接在我們官網(wǎng)找到這個(gè)方案的入口,先選擇“電商模板”,然后在我們的網(wǎng)頁(yè)上添加一些應(yīng)用的基礎(chǔ)配置,比如說(shuō)應(yīng)用名稱、開(kāi)發(fā)者簽名、圖標(biāo)等,就可以生成一個(gè)包括安卓端和iOS端的APP。如果說(shuō)以這樣的方式產(chǎn)生一個(gè)電商APP,只需要幾分鐘就可以產(chǎn)生一個(gè)可以直接拿來(lái)用的電商APP。
不過(guò)多數(shù)的用戶還是希望自己的APP和別人長(zhǎng)得不一樣,需要一些模板以外的定制化的功能。所以我們也提供了對(duì)應(yīng)的電商SDK,基于這個(gè)SDK,開(kāi)發(fā)者可以在客戶端實(shí)現(xiàn)商品的展示、購(gòu)買(mǎi)、支付、物流查詢等等的功能,也包括可以在我們的開(kāi)發(fā)者后臺(tái)對(duì)商品類型進(jìn)行配置、發(fā)布,還有優(yōu)惠券、物流管理等。如果說(shuō)基于這個(gè)SDK來(lái)做,則可以在一兩天的時(shí)間里,就把電商的功能集成到自己的APP當(dāng)中去。
高可用架構(gòu):針對(duì)現(xiàn)在特別火的短視頻,它會(huì)有SDK嗎?
余勛杰:如果說(shuō)像快手、抖音這樣的一些直播的平臺(tái),我們?cè)谥辈倓偝鰜?lái)的2016年時(shí),就做了這樣功能的產(chǎn)品,它包含了直播、送禮物、聊天以及相互關(guān)注這樣的功能,不過(guò)后來(lái)因?yàn)橐恍┱吆褪袌?chǎng)發(fā)展的因素,我們發(fā)現(xiàn)這個(gè)項(xiàng)目的市場(chǎng)需求量并不是很大,所以就沒(méi)主推這款產(chǎn)品,不過(guò)這個(gè)功能還是有的。
另外是像錄制一些視頻,然后把它發(fā)到一些社交平臺(tái)上的功能,這個(gè)我們?cè)诟绲?015年,那個(gè)時(shí)候游戲錄屏領(lǐng)域很火,我們也做了一款對(duì)應(yīng)的產(chǎn)品ShareREC,這款產(chǎn)品適配了現(xiàn)在市場(chǎng)上主流的游戲引擎,比如說(shuō)Unity3D、Cocos2d-x等,甚至在安卓端還可以做到直接脫離任何一個(gè)游戲,錄整個(gè)系統(tǒng)。錄制時(shí)可以選擇不同的碼率、分辨率來(lái)完成錄制,錄制后也可以對(duì)視頻進(jìn)行編輯。但是因?yàn)橹皫捀Y費(fèi)比較貴,所以這款產(chǎn)品后來(lái)也并沒(méi)有很好的市場(chǎng),當(dāng)然也有一些成功的案例。但是隨著未來(lái)5G時(shí)代的降臨,帶寬的提高和資費(fèi)不斷的下調(diào),這款產(chǎn)品會(huì)更遠(yuǎn)大的前景。
高可用架構(gòu):作為一個(gè)APP的開(kāi)發(fā)者,如何通過(guò)MobSDK來(lái)快速搭建自己的應(yīng)用?
余勛杰:MobSDK不是一個(gè)IDE,所以我們并沒(méi)有辦法說(shuō)基于MobSDK來(lái)搭建一個(gè)APP,而且一個(gè)APP其實(shí)也不是因?yàn)閹讉€(gè)SDK累在一起就可以變成一個(gè)APP。一般想借MobSDK來(lái)做APP這方面的開(kāi)發(fā)的話,就像剛剛說(shuō)的還是有兩個(gè)方案。
第一,基于我們的APP工廠,先進(jìn)到官網(wǎng)APP工廠的主頁(yè),然后選擇APP的類型。我們現(xiàn)在提供幾個(gè)模板,比如社交聊天、新聞資訊和電商等等。如果想基于這樣的一些模板來(lái)產(chǎn)生APP的話,就像剛剛說(shuō)的,幾分鐘就可以搞定自己的一個(gè)APP,甚至都不需要開(kāi)發(fā)能力。第二,因?yàn)檫@個(gè)還是基于模板的,一般應(yīng)用都會(huì)有定制化的需求。如果想基于功能來(lái)使用MobSDK的話,我比較建議的是比如說(shuō)需要社會(huì)化分享以及登錄的話,可以使用ShareSDK。短信驗(yàn)證碼的話,我們也有一個(gè)SMSSDK,這個(gè)可以提供短信驗(yàn)證碼。如果說(shuō)需要推送,我們有MobPush,它已經(jīng)支持了基本上市面上所有的廠商推送,并且還支持智能標(biāo)簽、短信補(bǔ)償這類競(jìng)品收費(fèi)而我們免費(fèi)的功能。最后我們還有應(yīng)用內(nèi)統(tǒng)計(jì)的產(chǎn)品Mob統(tǒng)計(jì)分析SDK,用于實(shí)現(xiàn)統(tǒng)計(jì)功能。
高可用架構(gòu):MobSDK對(duì)于APP的開(kāi)發(fā)者來(lái)說(shuō),是不是可以比喻成云服務(wù)之于后端工程師。
余勛杰:有點(diǎn)類似,我們當(dāng)時(shí)在打造產(chǎn)品矩陣的時(shí)候也是奔著軟件云的目標(biāo)去做的。MobSDK本身有幾個(gè)層次的概念。最底層是我們十幾款的SDK,涵蓋了移動(dòng)開(kāi)發(fā)大部分的領(lǐng)域,它們的定位就有點(diǎn)像云服務(wù)器,提供了最基本和最重要的一些功能。
在這些SDK之上我們有另外一個(gè)概念,就是“SDK 運(yùn)營(yíng)賦能”的概念。我們?cè)赟DK當(dāng)中引入了大數(shù)據(jù)和運(yùn)營(yíng)能力,會(huì)輸出一些垂直方案,比如說(shuō)剛剛說(shuō)到的APP工廠,或者是我們的增長(zhǎng)變現(xiàn)或者是Mob游戲解決方案類似這樣的一些解決方案,后面還有更多,這些就像是云服務(wù)器加上附加的一些增值服務(wù)。
最后是除了SDK和解決方案這樣的通用服務(wù)之外,我們也在逐步開(kāi)放一些定制化的商務(wù)合作?,F(xiàn)在很多云服務(wù)也是提供定制化服務(wù)的,我們也提供類似的概念。這種定制化服務(wù)我們基本上是有一對(duì)一的商務(wù)和APP開(kāi)發(fā)者去談,然后我們會(huì)成立類似虛擬項(xiàng)目組去幫助他們實(shí)現(xiàn)他們要的一些功能。
高可用架構(gòu):在支持開(kāi)發(fā)者方面,您這邊都做了哪些工作?
余勛杰:主要是三個(gè)方面:
一、產(chǎn)品方面。我們?cè)诓粩鄡?yōu)化和統(tǒng)一我們的API,使之越來(lái)越容易使用;不斷地簡(jiǎn)化我們的開(kāi)發(fā)文檔,力求讓用戶一個(gè)短小的網(wǎng)頁(yè)中就能掌握我們產(chǎn)品的核心使用方式;不斷提高產(chǎn)品的自動(dòng)化集成能力,免去用戶在SDK集成時(shí)的各種機(jī)械勞動(dòng)。
二、技術(shù)支持。剛剛說(shuō)到7×24小時(shí),一對(duì)一,多渠道的人工服務(wù),這也是對(duì)開(kāi)發(fā)者最好的支持。
三、商務(wù)合作。無(wú)論是通用的功能或者是定制化的功能,我們的商務(wù)同事都會(huì)直接和開(kāi)發(fā)者進(jìn)行溝通,在必要的時(shí)候也會(huì)把我們無(wú)論是技術(shù)支持還是研發(fā)的同事拉進(jìn)討論組去幫他們解決他們可能需要的一些功能和需求。
高可用架構(gòu):通過(guò)您這邊在GIAC的分享,也是想了解一下關(guān)于您這邊工程師團(tuán)隊(duì)文化這一塊您是怎么理解的?
余勛杰:最近這一段時(shí)間我們也在構(gòu)建自己部門(mén)的文化。我們的文化是分兩個(gè)層次,一個(gè)是適用于所有員工的通用文化素質(zhì)、一個(gè)是區(qū)別于不同職能的專業(yè)技能。在通用文化素質(zhì)上,我們強(qiáng)調(diào):同心協(xié)力、迎難而上、開(kāi)拓創(chuàng)新和互補(bǔ)當(dāng)擔(dān)。而在專業(yè)技能上,比如在研發(fā)崗位上,我們確立了:時(shí)間控制、產(chǎn)出質(zhì)量、專業(yè)能力和項(xiàng)目規(guī)范4個(gè)方面的指標(biāo)。這些文化和指標(biāo)會(huì)引導(dǎo)我們的員工朝著我們期望的阿爾法狼精神發(fā)展。
在研發(fā)崗的日常管理上,我們?yōu)榇蠖鄶?shù)的崗位分配A/B兩個(gè)角色,一方面是相互學(xué)習(xí),另一方面也是相互監(jiān)督。以這種方式進(jìn)行管理,可以在很大程度上提高代碼質(zhì)量,降低重大bug的幾率。另外,我們也鼓勵(lì)主動(dòng)學(xué)習(xí)。所以每一個(gè)季度都會(huì)為每個(gè)研發(fā)人員設(shè)定一個(gè)為期一周左右的研究課題。員工完成課題后,需要撰寫(xiě)研究報(bào)告,并在團(tuán)隊(duì)內(nèi)部對(duì)報(bào)告進(jìn)行演講。不僅提高了研發(fā)人員的專業(yè)技能,也提高了他們的演講能力。
至于績(jī)效考核,由于我們采用了職能線和項(xiàng)目組相結(jié)合的管理方式,所以每個(gè)人的考核也會(huì)有兩個(gè)不同的指標(biāo)。在職能線上,團(tuán)隊(duì)主管會(huì)考核下屬的專業(yè)技能和規(guī)范落實(shí)情況;在項(xiàng)目組內(nèi),項(xiàng)目經(jīng)理會(huì)考核組員對(duì)的業(yè)務(wù)完成情況和貢獻(xiàn)程度。
轉(zhuǎn)載本文請(qǐng)注明出處,技術(shù)原創(chuàng)及架構(gòu)實(shí)踐文章,歡迎通過(guò)公眾號(hào)菜單「聯(lián)系我們」進(jìn)行投稿。
高可用架構(gòu)
改變互聯(lián)網(wǎng)的構(gòu)建方式
長(zhǎng)按二維碼 關(guān)注「高可用架構(gòu)」公眾號(hào)