Skip to main content

聊天室排序優先

影響聊天列表的聊天室排序特徵有/無未讀數、At、置頂、我的最愛、草稿與發送失敗…等,梳理出以下邏輯

有未讀聊天室

  1. 置頂
  2. 我的最愛
  3. 有人@我
  4. 物件聊天室
  5. 有發送失敗
  6. 有草稿
  7. 其餘按交互時間排序

無未讀聊天室

  1. 置頂
  2. 有發送失敗
  3. 有草稿
  4. 其餘按交互時間排序

交互時間

在排序聊天室時,不全是使用最新訊息的發送時間,因有時用戶間的交互不一定是有發生互相發送訊息的行為,而是從列表點擊用戶之類的操作,這種不是發送訊息的特定行為,以交互時間來記錄。

更新交互時間的時機

  • 收到新訊息 (等於sendTime)
  • 發送新訊息 (等於sendTime)
  • 從聯絡人列表點夥伴進到好友聊天室
  • 從聯絡人列表點社團進到社團聊天室
  • 從聯絡人列表點服務號進到服務號聊天室
  • 將未讀訊息已讀的時後
  • 刪除訊息 (更新為當前最後一則訊息的sendTime) 交互時間是純本地時間,不跟其它設備同步

實作邏輯

  • 設定聊天室依特徵值的權重分數
    • 未讀聊天室 → 128
    • 商務號聊天室"N" → 64
    • 置頂 → 32
    • 我的最愛 → 16
    • 有人@我 (只有未讀) → 8
    • 物件聊天室 (只有未讀) → 4
    • 有發送失敗 → 2
    • 有草稿 → 1
    • 其它 (包含已讀) → 0
  1. 遍歷所有聊天室,依權重加總
  2. 取出聊天室要參與排序的時間
    1. 有未讀的聊天室,取最後一則訊息的sendTime
    2. 無未讀的聊天室,最後一則訊息的sendTime和交互時間,兩者取最晚時間
    3. 使用3. 的時間由 晚→早 進行排序
    4. 將4. 的結果再以權重 大→小 排序,即可得到正確結果