背景-為什么展示已讀未讀
部分即時(shí)通訊軟件會(huì)選擇展示給用戶已讀未讀, 主要是***快速感知對(duì)方的閱讀狀態(tài), 感覺(jué)到自己受重視, 方便做下一步操作***。
如果要帶點(diǎn)高度的講,滿足軟件所代表的關(guān)鍵用戶的訴求
什么場(chǎng)景下要展示已讀回執(zhí)
- toB的場(chǎng)景
如釘釘, 企業(yè)微信。已讀未讀, 是為了滿足企業(yè)運(yùn)作核心效率(即老板視角)的訴求, 已讀未讀, 有一種壓迫感,用戶A看了用戶B的消息, 是需要快速響應(yīng)的。 - 客服的場(chǎng)景。
電商客服, 售后服務(wù)。 已讀未讀。 是為了滿足消費(fèi)者的快速響應(yīng)的訴求, 已讀未讀, 也是有一種壓迫感, 客服看了用戶的反饋信息, 是需要快速給出響應(yīng)的。
既然有訴求, 開(kāi)發(fā)便需要設(shè)計(jì)和實(shí)現(xiàn)。在開(kāi)發(fā)之前, 需要定義清楚什么是已讀未讀?
什么是已讀未讀?
不同的產(chǎn)品形態(tài), 對(duì)于已讀未讀的定義是不同的。
- 用戶看到的最新消息以及以前的消息都算作已讀: 對(duì)于已讀未讀定義不嚴(yán)格時(shí),用戶看到最新的消息,便認(rèn)作歷史消息都當(dāng)做已讀。
- 用戶點(diǎn)擊的消息才算作已讀: 像一些通知類(lèi)的消息,用戶真正點(diǎn)擊了消息, 才當(dāng)做是已讀。
- 用戶看到的消息才算作已讀,沒(méi)有看到的不算已讀: 像釘釘這樣的產(chǎn)品, 消息真正曝光到用戶的屏幕上, 才算是已讀。
如何設(shè)計(jì)實(shí)現(xiàn)
針對(duì)定義的已讀未讀的三種定義, 實(shí)現(xiàn)起來(lái)整體可以分為兩類(lèi)。
- 會(huì)話級(jí)別的已讀未讀:用戶看到的最新消息以及以前的消息都算作已讀
- 消息級(jí)別的已讀未讀: 用戶點(diǎn)擊的消息才算作已讀 + 用戶看到的消息才算作已讀,沒(méi)有看到的不算已讀
實(shí)現(xiàn)會(huì)話級(jí)別的已讀未讀
上報(bào)時(shí)機(jī): 在消息上屏后, 檢查接收的最新消息的最新時(shí)間戳是否與已經(jīng)存儲(chǔ)的閱讀的時(shí)間戳的關(guān)系即可。如果大于, 更新屏幕上的消息的狀態(tài)為已讀。并且同步到server, 否則,不做調(diào)整。
上報(bào)存儲(chǔ):由于已讀只是一個(gè)時(shí)間戳, 并且是跟用戶+會(huì)話, 一一對(duì)應(yīng), 因而消息的已讀未讀, 存儲(chǔ)在會(huì)話中即可。 每個(gè)用戶的每個(gè)會(huì)話有自己的已讀的時(shí)間戳。
更新消息已讀狀態(tài)的方案
針對(duì)會(huì)話級(jí)別的已讀更新消息的方案, 簡(jiǎn)單做的話, 可以直接單會(huì)話完整信息的更新(即此會(huì)話的完整模型信息更新, 如會(huì)話的title, lastMsg, 已讀的position等完整信息, 推拉均可)的topic, 而復(fù)雜做, 可以將會(huì)話更新的topic進(jìn)行二級(jí)細(xì)分,如僅拉取/推送會(huì)話的已讀情況。 非高并發(fā),大容量的case下,建議直接采用單會(huì)話的完整信息的推送/拉取。
server側(cè)的存儲(chǔ): server側(cè), 單聊的case由于同一個(gè)會(huì)話, 兩人記錄的均是對(duì)方的消息的最新時(shí)間戳, 因而是不一致的。 需要存儲(chǔ)到兩人私有信息中。 群聊的case下, 同單聊, 記錄最新的接收消息的時(shí)間戳也是可以的, 記錄到個(gè)人的會(huì)話的收件箱中。
實(shí)現(xiàn)消息級(jí)別的已讀未讀
消息級(jí)別根據(jù)上文, 存在兩種情況, “用戶點(diǎn)擊的消息才算作已讀” + “用戶看到的消息才算作已讀,沒(méi)有看到的不算已讀”
上報(bào)時(shí)機(jī): 消息曝光/消息點(diǎn)擊時(shí), 檢查消息的已讀未讀狀態(tài),針對(duì)未讀的消息, 上報(bào)給server即可。
上報(bào)存儲(chǔ): 由于是單條消息級(jí)別的, 消息是跟用戶+會(huì)話+消息, 一一對(duì)應(yīng)的, 因而每條消息的已讀未讀,存儲(chǔ)在用戶的單聊消息中即可。
更新消息已讀狀態(tài)的方案*
同會(huì)話級(jí)別的已讀未讀方案, 有消息完整內(nèi)容更新, 以及消息局部更新(即僅更新消息的已讀未讀)。
對(duì)于不復(fù)雜的業(yè)務(wù), 可以采用消息完整內(nèi)容更新。 但是對(duì)于復(fù)雜的業(yè)務(wù), 建議采用消息局部更新或者消息合并更新的策略。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-406695.html
***server側(cè)的存儲(chǔ)***由于消息已讀未讀,是一個(gè)公眾的狀態(tài), 因而是可以被大家都閱讀到的。 對(duì)于單聊, 記錄到公眾的消息中, 對(duì)于非單聊, 可以采用的會(huì)話中, 僅記錄消息的已讀任務(wù), 未讀人數(shù),而不記錄具體的人是那些,采用分表的方式, 單獨(dú)記錄到消息的已讀表中以及未讀表中。對(duì)于企業(yè)級(jí)的千人群, 萬(wàn)人群的特殊case, 還有特殊的優(yōu)化邏輯??梢詤⒖枷缕髽I(yè)微信的IM架構(gòu)設(shè)計(jì)揭秘:消息模型、萬(wàn)人群、已讀回執(zhí)、消息撤回等文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-406695.html
到了這里,關(guān)于IM即時(shí)通訊-6-已讀回執(zhí)的方案設(shè)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!