今天突然好奇撤回功能是怎么實現(xiàn)的,因此查閱了一些資料。
其中,有一篇資料詳細(xì)的解說了微信撤回功能的實現(xiàn),在此復(fù)述一下。
微信的每一條消息,即我們所發(fā)出的消息中會自帶UniqueMsgID,據(jù)說這個消息ID是全球唯一的ID(全球唯一的消息ID其實不難哈,可以通過時間戳+發(fā)送者ID+接受者ID,由于發(fā)送者ID與接受者ID的長度也是不一致的,因此消息ID也是完全不一樣的,包括長度也有可能是不一樣的。以上純屬個人YY)。因此,發(fā)送消息實質(zhì)上會發(fā)送兩個內(nèi)容,即消息體+UniqueMsgID。用戶A發(fā)送了一條消息給用戶B,思慮一番感覺有不合適的地方,決定撤回消息,長按選擇撤回功能,撤回功能被觸發(fā),用戶A手機(jī)端給服務(wù)器發(fā)送了UniqueMsgID,服務(wù)器要對比一下時間戳,是不是超過了兩分鐘,超過了就不再轉(zhuǎn)發(fā)該指令,而是返回一條消息給用戶A;要是沒有超過兩分鐘,服務(wù)器轉(zhuǎn)發(fā)指令到用戶B手機(jī)端,比對了UniqueMsgID,獲取了要撤回的消息之后就實現(xiàn)撤回的效果...下面是一張盜來的圖...
說到這里,大致的邏輯已經(jīng)出來了,但是我似乎還有沒弄懂的地方hhh,用戶B手機(jī)端接收到了指令是如何執(zhí)行“撤回”效果的?在UI上對該消息進(jìn)行隱藏并且替換成“對方撤回了一條消息”嗎?emmm,明天問一下做開發(fā)的同事好了hhh。
我所看的文章后面還有提及,撤回的時間長度為啥是兩分鐘,我感覺分析得比較有道理,兩分鐘之內(nèi)尚未查看消息的可能性是比較大的,隨著時間長度的增加,消息被閱讀的可能性則更大,如果對方已經(jīng)看到了消息而自己還執(zhí)行了撤回操作,可能會尷尬...其實2分鐘之內(nèi),消息被閱讀的可能性也很大,這個時間長度的選取,是不是有大數(shù)據(jù)的功勞在呢...
關(guān)于撤回了消息還留下了痕跡,即:對方撤回了一條消息,有很多人好奇:既然都執(zhí)行了撤回,為什么不毫無痕跡的撤回還要留下這么一句話呢,有解讀說比起發(fā)送者,產(chǎn)品更注重閱讀者的用戶體驗~與此同時,撤回消息如果沒有痕跡的話,會破壞上下文的完整性,這個解讀我還是很贊同的。
用戶體驗的重要性已經(jīng)深入人心了,在此我只想說,用戶體驗至上的產(chǎn)品,請在給我來一打!對鵝廠的喜愛一天比一天嚴(yán)重。
