干貨 | 攜程酒店小程序開發(fā)背后的“黑科技”
發(fā)布時間:2023-05-12閱讀次數(shù):2922
首先看一下項目背景。小程序的概念是微信發(fā)明的,2016年左右內(nèi)測,17年不溫不火,18年忽然火爆起來。
當(dāng)年小龍給出的定義是:用完即走。這個理想很好,但一直沒辦法實現(xiàn),因各大互聯(lián)網(wǎng)都希望用戶留下來,而不希望用戶流失。所以18年小程序進(jìn)行了大量的改進(jìn),都與“用完即走”的理念背道而馳。微信也不再提用完即走,還加了一句:“走了還會回來”。
通常我們會用小程序和app做比較,其實小程序更像H5。尤其是出了webview之后,很多公司甚至直接用webview來做全流程,這種情況下,小程序就淪為了一個空殼。
小程序和H5進(jìn)行對比,就會發(fā)現(xiàn)小程序支持的功能更少。很多H5的風(fēng)騷玩法,在小程序上都不能實現(xiàn)。反過來說,小程序又?jǐn)U充了一些對硬件的訪問,但是不是特別多,最典型的就是截屏的callback,這個在H5是不存在的。
發(fā)布的時候因為是新平臺,大家都不愿意投入,甚至多次傳出了“小程序要死了”的論調(diào)。這點(diǎn)和silverlight很像,區(qū)別是小程序現(xiàn)在活的很好,而且有越來越好的趨勢。當(dāng)然了這是現(xiàn)狀。當(dāng)時還是做的很艱辛的,各方面都不愿意投入資源來做。加上很多人擔(dān)心小程序會吸血app,更加恐慌這項新技術(shù)。
因此,攜程這邊自然而然形成了一個獨(dú)特的開發(fā)模式。
第一個就是,產(chǎn)品與開發(fā)一起提需求。
對于普通的業(yè)務(wù)來說,通常產(chǎn)品會比較強(qiáng)勢.小程序這里完全不同。小程序有兩個問題:第一,競品未必做的比我們好。第二,競品可能有一些私有api,我們完全不能模仿。出于一些眾所周知的原因,有些小程序天生是有一點(diǎn)特權(quán)的。
此外,微信小程序發(fā)展速度非??欤碌腶pi出來了,開發(fā)比產(chǎn)品更加敏感,因此雙方要進(jìn)行合作,一起提需求。這也體現(xiàn)了“人人都是產(chǎn)品經(jīng)理”,開發(fā)也可以參與到產(chǎn)品設(shè)計中。
保持簡單。這是微信倡導(dǎo)的。微信有個大殺招,限制size。不知道有多少人是老的小程序開發(fā)人員,最早的小程序size限制是1M,攜程當(dāng)時在1M的限制內(nèi),上了好幾個BU的業(yè)務(wù)。
主要人員來自H5開發(fā)轉(zhuǎn)行。這個非常好理解。小程序雖然叫“程序”,寫法和一些應(yīng)用程序完全不同,卻和H5沒啥區(qū)別。很多mvvm框架寫法和小程序是一樣的,基本上沒什么學(xué)習(xí)成本。
超越敏捷的速度開發(fā)。這個是被逼的。一個起步項目,沒有太多節(jié)奏可言,搶一點(diǎn)是一點(diǎn)。舉個例子:如果在上高地,你會按照先打奶和DPS后打肉的順序嚴(yán)格執(zhí)行嗎?不會的,你會根據(jù)情況不斷調(diào)整,能占便宜的時候就打最近的,僅此而已。節(jié)奏完全是亂的。
有個游戲叫“混亂之治”,以前很不理解這個游戲的名字,覺得“混亂”是“混亂”,“治”是“治”。做了小程序之后則深有體會。
Webview登錄態(tài)問題。Webview是小程序里一個很奇葩的存在,可以理解成微信向現(xiàn)實主義的妥協(xié)。原本是“忽悠”H5開發(fā)上小程序這條船,結(jié)果卻在小程序里又開了webview,讓大家用H5做開發(fā)。因此這里就涉及到登錄態(tài)同步的問題。
通常,webview是做促銷用的,很少用于主流程。原因是webview的靈活性。這個算優(yōu)點(diǎn)也算缺點(diǎn)。優(yōu)點(diǎn)是可以熱更新,缺點(diǎn)是過于靈活容易觸碰微信的底線。
微信給webview做了限制,必須全屏,不準(zhǔn)遮擋。有一些黑科技可以繞過這些限制,但這會導(dǎo)致微信的封殺,完全是得不償失的。我們通常用webview的靈活性,來做促銷頁面。眾所周知,促銷是最容易發(fā)生需求變更的。
Webview做促銷也需要登錄態(tài)??梢宰龅较騼?nèi)向外雙向打通,但是在促銷上,我們會進(jìn)行單項打通,也就是只允許小程序把登錄態(tài)無腦傳遞給webview,不允許反向傳。因為反向可能會污染登錄態(tài)。
圓形二維碼和普通二維碼的選擇。這里的圓形二維碼就是大家常見的,圓圓的那種小程序碼。這種是微信極力推薦的。我們會根據(jù)情況,進(jìn)行使用,而不是全盤使用。因為普通二維碼有更強(qiáng)的能力。
普通二維碼是方型二維碼,但是方型二維碼不全是普通二維碼,騰訊也提供了一個方型二維碼的能力。因為有數(shù)量限制我們一般不用。騰訊還支持用一個普通的url映射到小程序路徑??梢栽谛〕绦蚶飳憘€router,在官網(wǎng)設(shè)置一個綁定,把url映射成微信小程序的url。
這種做法會延伸出一個新的玩法,叫:通用二維碼。簡單的說就是,這個綁定關(guān)系,微信可以設(shè),支付寶也可以設(shè),百度也可以設(shè)。同一個二維碼,微信掃出來會進(jìn)入微信小程序,支付寶掃描可以進(jìn)入支付寶小程序,百度進(jìn)百度小程序。如果在其他平臺,不支持跳轉(zhuǎn),例如iphone的相機(jī),還可以正常打開H5頁面,因為url可以做302跳轉(zhuǎn)。這一點(diǎn)會很方便線下鋪設(shè)二維碼。
看似無用的api的使用方式。微信提供了很多有意思的api,如何用是看大家的創(chuàng)意。
比如好多小程序都會攔截截屏事件。用戶截屏說明用戶想分享東西,那么就在截屏的時候彈出分享按鈕,問用戶是否想分享。這是一個順其自然的操作方式,根本不需要教育用戶。
我們提前上線了埋點(diǎn),證明了截屏次數(shù)與訂單數(shù)成正比。說明截屏的人是有下單意愿的,他們截屏,是為了分享給朋友,詢問意見。那我們干脆直接把分享功能放進(jìn)去了。現(xiàn)在看來這個操作已經(jīng)是常規(guī)操作了,但當(dāng)時微信加這個api的時候,這個玩法還是很讓人叫好的。
下一個技術(shù)問題是推送和分享。這個可能會觸及到微信的底線,這里提示一點(diǎn):微信反對的是“惡意分享”,和“惡意推送”,而不是反對“分享”和“推送”,否則微信就不會提供這個能力了。這個大家可以想一想,兩者有多大的差別。
人員分配問題。
微信小程序現(xiàn)在實際上是拆分成兩個小團(tuán)隊在做的,一個小團(tuán)隊做關(guān)鍵集群的業(yè)務(wù),一個小團(tuán)隊做非關(guān)鍵集群的業(yè)務(wù)。關(guān)鍵集群,主要是主流程,下單。這個保持著非常傳統(tǒng)的scrum節(jié)奏,因為訂單是一個很嚴(yán)肅的事情,來不得半點(diǎn)玩笑。
還有一個小團(tuán)隊在做促銷相關(guān)的開發(fā)。目前外界對小程序的認(rèn)知還是:適合拉新。這一點(diǎn)雖然微信官方不認(rèn)可,但是私下大家的做法,還是很看中了微信流量的。因為促銷的變化性很大,而且非常容易惹事情,因此促銷是有自己的專用集群的。而且能用webview的地方,是絕對不用原生做開發(fā)的,因為原生代碼涉及到審核問題。雖然我們的審核速度還是很快的,但是畢竟是個很不可控的行為,促銷不喜歡這種不可控。
有些地方還是會用原生的,因為webview的能力有些不足。這個后面我們馬上會提到。
黑科技。
第一點(diǎn):沒有什么是一次跳轉(zhuǎn)不能搞定的。
這是我們在內(nèi)部群提到過的一句話。最初的出處是,有些團(tuán)隊需要用H5做頁面,但是又需要一些原生能力,例如分享。這一點(diǎn)是很多促銷所必需的能力。
這個需求的本質(zhì),其實是“偷權(quán)限”。在webview要操作的東西,如果操作不了,那么就進(jìn)行一次跳轉(zhuǎn),進(jìn)入原生頁面。在原生頁面可以擁有你所想要的所有權(quán)限。
例如,用戶想分享一個活動鏈接,點(diǎn)了一個div,我們不可能在div上面掛分享事件,微信沒有提供這個能力。那怎么辦呢?可以跳轉(zhuǎn)一個頁面,上面有兩個按鈕,一個叫“分享給朋友”,一個叫“分享到朋友圈”。
為什么不直接出兩個按鈕,非要點(diǎn)完了再進(jìn)行一次選擇呢?這不增加用戶費(fèi)力度嗎?原因就是:只有進(jìn)行一次跳轉(zhuǎn),才能偷到原生能力。而為了讓這次跳轉(zhuǎn)顯得順其自然,給用戶一個解釋,就不得不給出一個頁面,假裝在問:你是要分享給朋友呢,還是要分享到朋友圈呢?事實上,真正做的是通過這一次跳轉(zhuǎn),進(jìn)入原生頁面,使用原生能力。
而且,如果用戶操作回退,比如滑動回退,還能回到之前的頁面,一切看起來是順其自然的。這樣,在用戶基本上沒有感受到傷害的情況下,偷取了原生能力。
如果一次不行,那就兩次。這個主要涉及到登錄。例如,一個促銷頁面,點(diǎn)擊一個按鈕,需要檢查權(quán)限。那么最簡單的辦法就是跳轉(zhuǎn)到一個原生頁面,然后再跳回來。
這里有個問題,回退之后,登錄態(tài)發(fā)生了變化。要處理刷新問題。刷新往往是開發(fā)者最痛恨的操作,因為動不動就少刷一部分。促銷團(tuán)隊上線壓力很緊迫,開發(fā)時間遠(yuǎn)遠(yuǎn)比用戶體驗要寶貴。我們有時候就會直接犧牲用戶體驗,刷全頁,性能差就加服務(wù)器,簡單粗暴搞定。這個時候,有時候就不進(jìn)行回退了,直接再走一次前進(jìn)。
不要擔(dān)心層數(shù)問題,逼急了就relaunch。這個主要也是針對促銷來說的。主流程對層數(shù)是有嚴(yán)格要求的。但是促銷不一樣,層數(shù)用光了,需要跳轉(zhuǎn)導(dǎo)流的時候直接一個relaunch,抹掉歷史,就沒有層數(shù)問題了。促銷很多事情都是簡單粗暴,但是特別有效。
講了一大堆微信小程序的東西,其實我們還做了其他廠商的小程序。為了降低開發(fā)成本,有各種轉(zhuǎn)換工具,從微信小程序轉(zhuǎn)換到支付寶,百度,頭條甚至是H5。
各家小程序的api基本相同,有點(diǎn)像當(dāng)年javascript剛出來的時候的感覺,大家都相似,但是總是有點(diǎn)兼容性的差異。轉(zhuǎn)換工具只要解決這些差異即可。
最后一項,H5,可能有些和業(yè)界普遍的做法格格不入。業(yè)界普遍會使用H5轉(zhuǎn)微信小程序,但是總會有各種兼容性問題。我們看來,H5的功能是多于小程序的,也就是說H5是個全集,小程序相當(dāng)于一個子集,從全集轉(zhuǎn)子集,肯定會有各種不支持的東西出來。但是如果反過來想呢?從子集轉(zhuǎn)全集,先有小程序再轉(zhuǎn)H5,那么基本上不會碰到什么兼容問題。這個工具還在開發(fā)中,這條路應(yīng)該是一個比較平坦的路,能少很多坑。
以上就是攜程酒店開發(fā)小程序的一些經(jīng)驗。有一些是非技術(shù)的感想,甚至是吐槽,有一些是被逼無奈做出來的所謂的“黑科技”,希望能夠?qū)Υ蠹矣兴鶈l(fā)。
靈集科技打造本地生活類小程序
十種軟件開發(fā)模型整理
軟件開發(fā)公司的UI/UX設(shè)計師是什么?有啥區(qū)別?
云醫(yī)互聯(lián)SASS解決方案
九大類企業(yè)管理軟件助力企業(yè)數(shù)字化轉(zhuǎn)型
智慧醫(yī)療:創(chuàng)新驅(qū)動,引領(lǐng)醫(yī)療健康未來
企業(yè)為什么要做定制化的軟件,找哪家公司好?
內(nèi)蒙古網(wǎng)站建設(shè),打開大眾對您的“第一印象”
開發(fā)企業(yè)官網(wǎng)有什么作用?內(nèi)蒙古網(wǎng)站建設(shè)總結(jié)了兩點(diǎn)
全面分析小程序商城