默認
發表評論 7
想開發IM:買成品怕坑?租第3方怕貴?找開源自已擼?盡量別走彎路了... 找站長給點建議
[已回復] 求教RainbowChat-Web中如何實現IM消息的“已讀”功能?
閱讀(715) | 評論(7 收藏 淘帖
知道對方是否閱讀,在消息對話框增加顯示已讀功能,有好得建議?

即時通訊網 - 即時通訊開發者社區! 來源: - 即時通訊開發者社區!

推薦方案
評論 7
這個把邏輯理一下,無非是兩件事情:
1)你界面上,該怎么介定哪條消息是被讀過了;
2)讀過的消息,你得通知對方“已讀”;

實現上,無非就是:
1)應該通過JS來判定消息在UI上的可見性,這個具體的實現,是純前端的事情,你去查一下資料,或找五些demo參考;
2)通知對方“已讀”,你就需要加一條“已讀”指令,以便及時通知對方。
簽名: 《主流移動端賬號登錄方式的原理及設計思路》http://www.uktmgv.tw/thread-2863-1-1.html
A發送者,B接收者,C服務端,
A發送兩條消息給B,而B沒有查看消息,B用戶首頁消息顯示好友A有兩條未讀的消息,如果B選中首頁消息的好友A未讀后對話消息顯示,是在點擊首頁消息好友A觸發通知對方A消息“已讀”。
B用戶如何去介定A發送這兩條消息被讀過(我意思如何拿到這兩消息的key,當光標主動移到這里的時候,還是B用戶主動點擊了這里(首頁消息好友item按鈕),那就假定他已經看到了之前未讀的消息,此時就發回執),加一條已讀指令,在rbchat_config.js那個模塊加下這條指令已讀指令,拿到這兩條消息msgid拼成json,去請求標記單聊消息已讀接口,返回歷史消息已讀狀態字段值改變,刷新歷史聊天記錄讓對方A聊天UI刷新。
引用:ATONY 發表于 2019-11-20 16:04
A發送者,B接收者,C服務端,
A發送兩條消息給B,而B沒有查看消息,B用戶首頁消息顯示好友A有兩條未讀的消息 ...

寫了這么大一片,總結一下,你的問題:是不是你不知道怎么知道(或讀取到)UI上顯示的哪條消息它對應的消息ID?
簽名: 《主流移動端賬號登錄方式的原理及設計思路》http://www.uktmgv.tw/thread-2863-1-1.html
選中后聊天對話如何取到未讀的消息的msgId,是根據光標光標主動移到消息還是點擊首頁消息的好友item觸發取到消息的msgid
所謂的消息已讀回執,就是雙方聊天時,如果對方看到了你新發的信息,這條消息在你這端就會標為“已讀”,否則將是“未讀”。
A發送一條消息給B,B接收了,如果B此時打開聊天主界面,查看了消息,B就再發一條“回執”(攜帶有B已讀的消息Id)給A,A這時根據“回執”中的消息Id,標注已讀。
那么根據整個功能流程,首先,增加一個狀態位的屬性toReadStatus,來區分消息是否被對方讀了;還需要增加一個屬性toReadMessageId,這個屬性主要用在“回執”當中,用來告訴對方,我讀了你的哪條消息,以便對方標注。
如果消息帶有toReadMessageId,那么它就不是一條消息,而是一條“回執”,而“回執”是不需要顯示在會話列表或聊天面板中的,因此,我們需要在接收消息的時候判斷一下,如果是“回執”,則不顯示也不存儲到數據中。
因此在發送回執的時候也要根據場景分成兩種情況,在會話列表中,我們肯定不能將消息狀態置為已讀,只有打開聊天主界面,并且此條消息在屏幕中時,才可以發送回執。因此,在我們打開主界面時,我們要判斷一下有哪些消息是處于未讀狀態并且是處于當前屏幕上的,將這些狀態的回執發給對方。  
引用:ATONY 發表于 2019-11-20 16:28
選中后聊天對話如何取到未讀的消息的msgId,是根據光標光標主動移到消息還是點擊首頁消息的好友item觸發取 ...

做這種功能,千萬別靠猜,或者自已在這里瞎想,最好的辦法就是找個主流的IM去研究一下它的實現思路,必竟人家是經過大量用戶驗證過的,不會有什么體驗問題。

你可以去看看釘釘、旺旺這些有已讀回執的im里,web端的實現思路,詳細地研究一下。
簽名: 《主流移動端賬號登錄方式的原理及設計思路》http://www.uktmgv.tw/thread-2863-1-1.html
要在node層加一條指令通知A,B收到A一條消息,B要通知消息已讀,在node如何加一條指令通知A的邏輯
打賞樓主 ×
使用微信打賞! 使用支付寶打賞!

返回頂部
曾氏料二肖中特