聊天室排序優先
影響聊天列表的聊天室排序特徵有/無未讀數、At、置頂、我的最愛、草稿與發送失敗…等,梳理出以下邏輯
有未讀聊天室
- 置頂
- 我的最愛
- 有人@我
- 物件聊天室
- 有發送失敗
- 有草稿
- 其餘按交互時間排序
無未讀聊天室
- 置頂
- 有發送失敗
- 有草稿
- 其餘按交互時間排序
交互時間
在排序聊天室時,不全是使用最新訊息的發送時間,因有時用戶間的交互不一定是有發生互相發送訊息的行為,而是從列表點擊用戶之類的操作,這種不是發送訊息的特定行為,以交互時間來記錄。
更新交互時間的時機
- 收到新訊息 (等於sendTime)
- 發送新訊息 (等於sendTime)
- 從聯絡人列表點夥伴進到好友聊天室
- 從聯絡人列表點社團進到社團聊天室
- 從聯絡人列表點服務號進到服務號聊天室
- 將未讀訊息已讀的時後
- 刪除訊息 (更新為當前最後一則訊息的sendTime) 交互時間是純本地時間,不跟其它設備同步
實作邏輯
- 設定聊天室依特徵值的權重分數
- 未讀聊天室 → 128
- 商務號聊天室"N" → 64
- 置頂 → 32
- 我的最愛 → 16
- 有人@我 (只有未讀) → 8
- 物件聊天室 (只有未讀) → 4
- 有發送失敗 → 2
- 有草稿 → 1
- 其它 (包含已讀) → 0
- 遍歷所有聊天室,依權重加總
- 取出聊天室要參與排序的時間
- 有未讀的聊天室,取最後一則訊息的sendTime
- 無未讀的聊天室,最後一則訊息的sendTime和交互時間,兩者取最晚時間
- 使用3. 的時間由 晚→早 進行排序
- 將4. 的結果再以權重 大→小 排序,即可得到正確結果