|
我研究了微信的121處離線交互邏輯……时间:2017-09-06 作者:站長(zhǎng)之家【原创】 阅读 我們一直在說,一個(gè)優(yōu)秀的產(chǎn)品經(jīng)理,需要保有強(qiáng)烈的探索欲望和好奇心。我們也一直在說,做產(chǎn)品,有時(shí)候相比于關(guān)注融資、模式和行業(yè)趨勢(shì),不如更多關(guān)注一些更具體的產(chǎn)品設(shè)計(jì)邏輯和實(shí)現(xiàn)邏輯。 在如上兩方面,這篇文章的作者都做到了。 希望這篇文章可以帶給你一些啟發(fā),希望更多互聯(lián)網(wǎng)從業(yè)者們都可以更少談?wù)撘恍┖甏蟮娜谫Y和模式,更多關(guān)注一些實(shí)現(xiàn)和落地。 希望你喜歡。 筆者發(fā)現(xiàn)一個(gè)存在很久且很奇特的現(xiàn)象,我有一個(gè)微信群,群中明明只有 8 個(gè)人,但是群縮略圖上卻有 9 個(gè)人的頭像,且群內(nèi)成員有好幾個(gè)人換過頭像了,但是縮略圖還是老頭像。在下面左邊的群縮略圖中,第三排最右邊的用戶實(shí)際并不在群里,群縮略圖卻顯示了他的頭像。另外,群縮略圖中第二排最右邊的頭像對(duì)應(yīng)的用戶是我,雖然我后來換了頭像(下圖右邊的樣式),但是群縮略圖中并沒有發(fā)生相應(yīng)的改變: 也就是說群內(nèi)沒有的成員,縮略圖卻顯示了他的頭像,我換了頭像,群縮略圖卻沒有變化。于是我就感到奇怪了,難道是之前緩存好了就沒有再刷新過?微信的前端(簡(jiǎn)單來講,用戶能用到的部分叫前端)和后端(簡(jiǎn)單來講,用戶看不到的邏輯部分叫后端)的交互就這么奇葩? 身為產(chǎn)品狗的我立馬嗅到了一絲不可思議的信息:有可能微信前后端的交互邏輯還有更多奇葩的點(diǎn)。于是我開始著手研究微信前后端邏輯處理的問題,為了更好地還原并且驗(yàn)證這一命題,我花了一下午的時(shí)間在離線模式下使用微信。這樣的目的是希望將微信的前端和后端徹底隔離開,單獨(dú)看一下微信前端的表現(xiàn)。經(jīng)過一下午的研究,我用腦圖梳理了得出的成果,如下所示(由于微信有壓縮,可能顯示不清,需要原圖的朋友歡迎在后臺(tái)回復(fù)“0905”): 通過這張腦圖,我們可以看出在離線情況下,微信前端的表現(xiàn)點(diǎn)還是很多的,最少有 100 多條記錄。通過對(duì)這 100 多條記錄的體驗(yàn)和觀察,我發(fā)現(xiàn)微信做產(chǎn)品的一個(gè)原則:核心功能做到極致,輔助功能盡量做到降低成本。下面我們就詳細(xì)來看看微信是怎么實(shí)踐這個(gè)原則的。 如果每一條我們都來解讀一下,那么就可以寫一本書了,我也要累吐血。所以本文中,我只挑了幾個(gè)相對(duì)比較有意思且大家比較熟悉的功能模塊(下圖所示),給大家分享一下自己的觀察,以及對(duì)微信PM為什么這么做的分析和復(fù)盤,供大家參考,也歡迎拍磚。 PS:以下的分析均是根據(jù)IOS系統(tǒng)上測(cè)試的結(jié)果進(jìn)行的,安卓手機(jī)中部分結(jié)果可能會(huì)有差異,這里暫時(shí)不做考慮。 一、搜索 下圖為我在離線狀態(tài)下搜索關(guān)鍵詞“騰訊”獲取的第1、2、 3 屏的結(jié)果: 而當(dāng)我搜索“王”字的時(shí)候,則得到如下的信息: 通過上圖,我們可以看到從上到下依次是:最常使用、聯(lián)系人、群聊、功能、游戲、使用過的小程序、關(guān)注的公眾號(hào)、聊天記錄、收藏、搜一搜(點(diǎn)擊搜一搜不能打開頁面),且“最常使用”(王卡助手是小程序,王者集訓(xùn)營是服務(wù)號(hào))和“聯(lián)系人”排在“群聊”前面。 那么為什么會(huì)出現(xiàn)這樣的先后排列情況,且“最常使用”和“聯(lián)系人”排在最前面呢?對(duì)此我的分析是: 在離線狀態(tài)下可以搜索到內(nèi)容,說明這些內(nèi)容可以確定是前端緩存下來的。微信中的搜索使用場(chǎng)景是,當(dāng)我想找某一個(gè)內(nèi)容(如某個(gè)微信好友),但是可能因?yàn)樽约何⑿派蟽?nèi)容太多,出現(xiàn)怎么翻也找不到的情況,于是通過關(guān)鍵詞搜索,快速定位到我想找到的內(nèi)容。 至于“聯(lián)系人”、“小程序”以及“公眾號(hào)”這三個(gè)會(huì)優(yōu)于“聊天記錄”呈現(xiàn),是因?yàn)檫@三者的內(nèi)容量,和“聊天記錄”這樣的海量?jī)?nèi)容相比較,要少的多,所以用戶能記住這三個(gè)場(chǎng)景的頻次,以及據(jù)此去使用“搜索”這一功能的可能性,要遠(yuǎn)遠(yuǎn)大于使用“搜索”這一功能查找聊天記錄。而這三者與用戶的關(guān)聯(lián)程度又是依次減弱的,所以出現(xiàn)的順序會(huì)逐漸相對(duì)后置。 我們?cè)賮砜纯丛谏鲜鰣D片中,顯示在下部的“收藏”,對(duì)于用戶來講,其實(shí)每個(gè)人收藏的內(nèi)容量并不是很大,且大多數(shù)場(chǎng)景下用戶對(duì)于自己收藏的內(nèi)容沒有印象,因此依靠記憶去通過“搜索”這一功能來查找收藏的內(nèi)容的可能性是很低的,因此排在末置位。 綜上所述,聊天頁面的“搜索”功能的使用場(chǎng)景頻次由高到低是:微信好友、群聊好友、公眾號(hào)&小程序、聊天記錄、收藏。而由于用戶在搜索信息呈現(xiàn)的頁面下滑到“聊天記錄”這個(gè)功能且通過“搜索”來查找聊天記錄的場(chǎng)景比較少,頻次比較低,所以在“聊天記錄”這個(gè)功能之前,微信機(jī)智地插入了自己的廣告:功能、游戲。 二、發(fā)送消息這里涉及到“發(fā)送消息”的操作場(chǎng)景如下圖所示: 在離線狀態(tài)下,我們點(diǎn)擊上圖中的“視頻聊天”、“實(shí)時(shí)共享位置”、“語音輸入”時(shí),微信都會(huì)給出“網(wǎng)絡(luò)錯(cuò)誤”的提示,而點(diǎn)擊這個(gè)場(chǎng)景下的其他操作,并不會(huì)給出網(wǎng)絡(luò)錯(cuò)誤的提示: 為什么會(huì)出現(xiàn)上述的情況呢?對(duì)此,我的分析如下: “視頻聊天”和“實(shí)時(shí)定位”這兩個(gè)功能的使用,對(duì)網(wǎng)絡(luò)的穩(wěn)定性要求很高。相信大家用微信語音通話的時(shí)候,都有過這樣的體驗(yàn):聊著聊著對(duì)方?jīng)]聲音了,這就是網(wǎng)絡(luò)不穩(wěn)定造成的。所以,在離線情況下使用這兩個(gè)功能,微信會(huì)即時(shí)給出網(wǎng)絡(luò)方面的提示。 而“語音輸入”功能,則是因?yàn)橛脩魧?duì)著微信說話,微信將語音轉(zhuǎn)化成文字,屬于用戶與用戶強(qiáng)關(guān)系社交下的即時(shí)通訊輔助。這時(shí)候?qū)τ谟脩魜碇v,他希望可以即時(shí)被告知“語音輸入”功能是否能用,如果在用戶不明確網(wǎng)絡(luò)是否可行的前提下,用戶點(diǎn)擊了“語音輸入”,等用戶語音錄入完畢、希望傳達(dá)信息的時(shí)候,微信loading(加載)頁反饋需要等待,或者提示網(wǎng)絡(luò)不可用,這種體驗(yàn)對(duì)于用戶來說是很傷的。 所以,微信將這三個(gè)功能(視頻聊天、實(shí)時(shí)共享位置、語音輸入)設(shè)置成在用戶使用前就即時(shí)判斷是否有網(wǎng)。 而其他的功能(如發(fā)送圖片、個(gè)人名片),邏輯和用戶輸入文字發(fā)送消息出去是一致的,原因是用戶已經(jīng)習(xí)慣且接受了當(dāng)發(fā)送出去的內(nèi)容因?yàn)榫W(wǎng)絡(luò)的問題,對(duì)方收到消息會(huì)延遲或者收不到消息的情況。 此外需要注意的是,發(fā)紅包和轉(zhuǎn)賬因?yàn)樯婕暗接囝~或者從銀行卡支取錢,所以必須請(qǐng)求服務(wù)器才能完成。因此操作進(jìn)行到支付環(huán)節(jié)的時(shí)候,因?yàn)樾枰?qǐng)求服務(wù)器,導(dǎo)致這時(shí)候在離線情況下,流程將不能如常進(jìn)行下去。 那么這里面有一個(gè)問題:既然知道支付環(huán)節(jié)要聯(lián)網(wǎng)才能走完整個(gè)流程,為什么不在整個(gè)流程之初(點(diǎn)擊“紅包”、“轉(zhuǎn)賬”)的時(shí)候就直接出現(xiàn)“當(dāng)前網(wǎng)絡(luò)不可用”之類的彈屏提示呢? 對(duì)此,我是這么認(rèn)為的: 第一,如果用戶使用場(chǎng)景是一直處于離線狀態(tài),那么這個(gè)時(shí)候,用戶通常不會(huì)使用微信等APP; 第二,弱網(wǎng)環(huán)境或者網(wǎng)絡(luò)不穩(wěn)定的環(huán)境,要比離線環(huán)境的使用場(chǎng)景多,如果在流程之初(點(diǎn)擊“紅包”、“轉(zhuǎn)賬”),就需要請(qǐng)求服務(wù)器,告知“網(wǎng)絡(luò)不可用”,那么用戶很容易直接放棄該操作; 第三,這么做可以減少前端對(duì)服務(wù)器的請(qǐng)求次數(shù),對(duì)于月活近十億級(jí)用戶的微信來說,減少對(duì)服務(wù)器的一次請(qǐng)求,在服務(wù)器端的支出都有可能降低很多。我想這第三點(diǎn)也應(yīng)該是里面最重要的一點(diǎn)。 三、微信好友 對(duì)于微信的好友處理的相關(guān)操作,我發(fā)現(xiàn)微信的原則是:盡最大可能地減少對(duì)服務(wù)器的請(qǐng)求。這里面涉及到需要請(qǐng)求服務(wù)器的點(diǎn)有:保存標(biāo)簽、上傳圖片(新功能)、投訴、朋友圈權(quán)限設(shè)置、拉黑、刪除。其中保存標(biāo)簽和上傳圖片的處理邏輯和發(fā)紅包類似,到最后一步需要請(qǐng)求服務(wù)器的時(shí)候,才會(huì)發(fā)現(xiàn)沒辦法完成整個(gè)流程的操作。投訴是直接用的H5 頁面(像微信里面,需要加載的頁面,其加載進(jìn)度條在頂部的都屬于H5 頁面),是外部鏈接,所以需要有網(wǎng)絡(luò)才能打開。 另外,朋友圈權(quán)限設(shè)置、拉黑、刪除的操作,均可認(rèn)為是對(duì)好友和自己的權(quán)限設(shè)置,不讓他看我朋友圈和不看他朋友圈這兩個(gè)容易理解,但是拉黑、刪除我這樣的操作所產(chǎn)生的結(jié)果,容易讓人迷茫。不知道大家有沒有注意到,當(dāng)我們被對(duì)方刪除或者被拉黑的時(shí)候,我們是不知道的,只有在我們給對(duì)方發(fā)消息的時(shí)候,微信才會(huì)提示我們已被刪除或者已被拉黑。為此還有人在網(wǎng)上做了“怎樣看自己被多少好友刪除或拉黑”的教程,且用戶對(duì)于這方面的內(nèi)容關(guān)注度還挺高。 既然我們都不知道有沒有被對(duì)方刪除,那么我們完全可以理解為,對(duì)方對(duì)我們的消息做了權(quán)限設(shè)置。對(duì)此,我大膽猜想了當(dāng)我們發(fā)消息給對(duì)方的時(shí)候,微信的判斷機(jī)制,如下圖所示: 結(jié)合前面的情況以及流程的分析,我認(rèn)為在微信的服務(wù)器端,微信并沒有對(duì)用戶的聊天內(nèi)容進(jìn)行儲(chǔ)存,只是將其作為一個(gè)信息傳遞的通道。對(duì)此,我們可以這樣理解,我們發(fā)送的消息就像貨物一樣,被服務(wù)器由A站拉到B站然后卸載下來后,服務(wù)器就不管了,如果B站收了就收了,如果B站不收,也并不會(huì)把貨物(聊天內(nèi)容)讓服務(wù)器帶回去儲(chǔ)存在服務(wù)器或者返回給A站。 四、收藏 “收藏”這邊比較有意思的點(diǎn),是在離線狀態(tài)下可以新建收藏。但是“新建收藏”這個(gè)功能,我相信極少有人知道。 通過上圖的操作,我們可以看出,新建一個(gè)收藏,其實(shí)是需要跳轉(zhuǎn)六個(gè)頁面,相對(duì)來說操作還是比較繁瑣的,而且中間有很多步驟是需要探索才能完成。 對(duì)此,我認(rèn)為該功能應(yīng)該還是處于一個(gè)需求驗(yàn)證階段,目前流程做得復(fù)雜一些,是為了驗(yàn)證真正有需求的用戶有多少。既然處于驗(yàn)證階段,那么以后有可能被下架也有可能繼續(xù)優(yōu)化(之所以判斷該功能處于需求驗(yàn)證階段,而不是直接吐槽其流程繁瑣的原因是:我想微信的產(chǎn)品經(jīng)理,應(yīng)該比我水平高吧,我能看到這個(gè)流程繁瑣他們能不知道?)。 此外,微信中還有一個(gè)地方,其實(shí)也是有隱藏功能的,就是對(duì)微信好友進(jìn)行添加“描述——添加照片”的操作: 進(jìn)行這個(gè)操作的時(shí)候,如果沒網(wǎng),那么上傳圖片最后會(huì)卡住。如果這時(shí)候,打開網(wǎng)絡(luò),那么照片可以上傳成功,且立馬返回到之前的好友“詳細(xì)資料”頁: 通過這兩個(gè)隱藏功能點(diǎn)的觀察和操作,我們可以看出,雖然都是添加圖片的操作,但是邏輯卻完全不一樣。對(duì)微信好友進(jìn)行添加“描述——添加圖片”操作的時(shí)候,需要聯(lián)網(wǎng)才行,而添加“收藏”卻可以在離線狀態(tài)下,進(jìn)行錄音、添加位置、添加圖片的操作。(對(duì)于這背后的產(chǎn)品邏輯和出發(fā)點(diǎn),我還是有點(diǎn)費(fèi)解的。如果你有相關(guān)的想法,可以留言告訴我,十分感謝。) 五、設(shè)置 通過這張圖我們可以看到,涉及到賬號(hào)安全的功能模塊,在離線狀態(tài)下都是沒有辦法使用的,這是因?yàn)橘~號(hào)安全的相關(guān)處理,放在后端要比前端安全的多,所以不只是微信,其他平臺(tái)也是這樣,即選擇通過后臺(tái)來處理和賬號(hào)安全相關(guān)的問題,是比較普遍的做法。 “消息通知”和“隱私”這兩個(gè)模塊更像是對(duì)權(quán)限上的控制,離線狀態(tài)下可以隨意對(duì)其操作,避免了每次切換操作都需要請(qǐng)求服務(wù)器的情況,從而降低服務(wù)器壓力,減少在這方面的支出,這個(gè)機(jī)制對(duì)應(yīng)的原理和拉黑、刪除好友類似,前面已經(jīng)詳細(xì)分析過,這里就不多闡述了。 在“通用”模塊中,我們可以看到除了管理表情需要請(qǐng)求服務(wù)器,其他的功能都不需要請(qǐng)求服務(wù)器,這樣的設(shè)置大大降低了對(duì)服務(wù)器的請(qǐng)求。 值得一提的是,最近上線的“管理不常聯(lián)系人”的功能中的“半年內(nèi)無單聊”、“無共同小群”,是可以在離線狀態(tài)下正常使用的,而“半年內(nèi)沒有回復(fù)過他(她)的朋友圈” 的信息,需要聯(lián)網(wǎng)才能獲取到。這三個(gè)功能對(duì)應(yīng)的算法邏輯,是值得我們?nèi)ヌ骄康摹O旅嫖覀円粋(gè)一個(gè)來說。 1. “半年內(nèi)無單聊” 我們?cè)谇懊嫱茢噙^,微信的后臺(tái)服務(wù)器并沒有儲(chǔ)存我們的聊天記錄,那么據(jù)此推斷,“半年內(nèi)無單聊”這個(gè)功能在離線模式下可以使用也是成立的。在這里我們不妨思考一個(gè)問題:當(dāng)我找一個(gè)好友聊天后,然后主動(dòng)在聊天列表中刪除他,那么我搜索“半年內(nèi)無單聊”能搜到他嗎?對(duì)此我做了如下測(cè)試,測(cè)試結(jié)果顯示是可以搜索到的: 通過上述操作驗(yàn)證后,我認(rèn)為該功能的搜索算法是通過讀取微信本地聊天列表的內(nèi)容來進(jìn)行相關(guān)判斷的,如果不在聊天列表內(nèi),則直接判定為半年無單聊,如果在聊天列表內(nèi),則提取最近一條聊天記錄,判斷該內(nèi)容距離現(xiàn)在是否超過半年: 再來思考微信為什么這么做,我想原因就應(yīng)該是后臺(tái)并沒有儲(chǔ)存用戶的聊天記錄,所以才會(huì)有上面這個(gè)看上去有點(diǎn)奇葩的算法。這也可以清楚地解釋為什么我們?cè)诘谝淮问褂眠@個(gè)功能的時(shí)候,需要加載幾分鐘(手機(jī)處理數(shù)據(jù)的能力和服務(wù)器不是一個(gè)數(shù)量級(jí)的),而第二次則很快就能加載出來。 但是從某種程度上來講,這樣的算法又有自己的合理性,試想一下我都把一個(gè)人從聊天記錄刪除了,那么通常情況下是我不想聯(lián)系他了。對(duì)于他出現(xiàn)在我不常聯(lián)系的好友潛在名單里面,且這樣能夠被搜索出來,反而多了一層人性化的味道,而不是一味追求邏輯上的正確。 這一點(diǎn)對(duì)于我們做產(chǎn)品而言,其實(shí)是一個(gè)很大的啟發(fā)。一味追求邏輯正確是標(biāo)準(zhǔn)的技術(shù)思維,而一味追求用戶體驗(yàn),不考慮邏輯和技術(shù)又屬于空談。三節(jié)課聯(lián)合創(chuàng)始人后顯慧(Luke)老師說過這樣一句經(jīng)典的話“看啊,那就是一只走在科技和人文之間的一條狗”,在體驗(yàn)過微信這點(diǎn)的人性化操作后,我對(duì)此頗有感觸。 2. “無共同小群”、“半年內(nèi)朋友圈未回復(fù)” 對(duì)于“半年內(nèi)無單聊”,因?yàn)榍懊鎸?duì)“半年內(nèi)無單聊”進(jìn)行了邏輯的詳細(xì)分析,那么“無共同小群”的相應(yīng)邏輯,就更好理解一些:如果在聊天列表的群里面和在自己通訊錄里面的群聊列表里面,找不到該用戶,那么就會(huì)被篩選出來。 對(duì)于“半年內(nèi)朋友圈未回復(fù)”,則是因?yàn)榍岸瞬荒鼙WC儲(chǔ)存半年內(nèi)朋友圈的所有數(shù)據(jù),所以該功能需要請(qǐng)求服務(wù)器來判斷,判斷所依附的邏輯,正如該功能自己的文案所示:半年內(nèi)朋友圈未回復(fù)。 六、朋友圈 對(duì)于朋友圈,我們可以看到其核心功能,如發(fā)朋友圈、評(píng)論、回復(fù)、點(diǎn)贊、刪除都做了離線處理,且刷新的loading(加載)也做了最優(yōu)處理。 綜合來看,微信一共有三種loading(加載)機(jī)制:
而在朋友圈頁面中l(wèi)oading的加載機(jī)制即為第三種: 對(duì)此我的分析是,朋友圈在使用頻率上可以說僅次于即時(shí)通訊,一個(gè)小小的優(yōu)化影響到十億用戶的高頻使用,這時(shí)候弱網(wǎng)環(huán)境、斷網(wǎng)環(huán)境的容錯(cuò)性就變得尤為重要。對(duì)于這樣一個(gè)使用頻率較高的功能,當(dāng)用戶在行駛的地鐵上或者火車上等信號(hào)非常不穩(wěn)定的場(chǎng)景下,還可以進(jìn)行正常發(fā)朋友圈、點(diǎn)贊、評(píng)論、回復(fù)的操作體驗(yàn),這樣的設(shè)計(jì)就顯得格外重要了。 而且,朋友圈相對(duì)即時(shí)通訊,其實(shí)是屬于弱關(guān)系社交,天然的場(chǎng)景下是不需要對(duì)方馬上做出回復(fù)、點(diǎn)贊、評(píng)論等互動(dòng)。所以,這種邏輯可以說是保證在離線狀態(tài)下可以使用該功能,且互動(dòng)信息在有網(wǎng)環(huán)境下推送給對(duì)方這樣符合用戶使用場(chǎng)景的最優(yōu)解決方案了。雖然這一點(diǎn)技術(shù)上實(shí)現(xiàn)起來應(yīng)該是相當(dāng)困難的,但是一旦實(shí)現(xiàn)價(jià)值也是顯而易見的,通過微信朋友圈這個(gè)成功的產(chǎn)品就能明顯看出來。 七、總結(jié) 通過對(duì)離線版微信一些常見的功能以及對(duì)應(yīng)操作的分析,我發(fā)現(xiàn)微信對(duì)于前后端交互處理的原則有以下幾點(diǎn):
另外,在這整個(gè)過程中,作為一枚產(chǎn)品狗,我得到了如下的一些啟發(fā),且這些信息可以應(yīng)用到我的工作中,希望也可以對(duì)你有幫助:
|