標籤:android 使用者 如何
如何在App中實現IM功能之七快速實現聊天列表排序模組
一台裝置由於使用者的使用習慣差異,可能導致裝置的時間和實際收發訊息的時間不同,這裡與大家分享利用anIM收發訊息時,如何根據資料中的msgId和timestamp來進行排序。
實現邏輯
發訊息時,我們需要調用anIM的sendMessage方法(同類方法還有sendBinary, sendMessageToTopic等等),這個方法有一個返回資料為messageId,即當前這一條聊天訊息的唯一標識,我們需要將這個messageId儲存下來。
以iOS代碼為例:
//msgId是訊息的唯一標識 NSString *msgId = [anIM sendMessage:message customData:customData toClients:clientId needReceiveACK:YES];
調用完sendMessage方法後,SDK會統一回調messageSent方法,這個方法裡的輸入參數在Android SDK中是AnIMMessageSentCallbackData,裡麵包含兩個主要欄位分別為String類型的msgId和long型的timestame,而在iOS SDK中是NSString類型的msgId和NSNumber類型的timestamp。
(void)anIM:(AnIM *)anIM messageSent:(NSString *)messageId at:(NSNumber *)timestamp { //messageId即調用sendMessage等方法時返回的訊息唯一標識 //在這雷根據messageId進行訊息的判斷,然後儲存聊天訊息資料到本機資料庫 };
收訊息時,對不同類型的訊息,會執行不同的方法,不管是哪個方法,方法的輸入參數裡都會有2個和發訊息時同樣的欄位msgId和timestamp。
(void)anIM:(AnIM *)anIM didReceiveMessage:(NSString *)message customData:(NSDictionary *)customData from:(NSString *)from parties:(NSSet *)parties messageId:(NSString *)messageId at:(NSNumber *)timestamp { //messageId即對方發送訊息時的訊息唯一標識 }
timestamp是13位的時間戳記格式,都是從伺服器返回的,而不是裝置本地產生的,這樣就避免了因為使用者本身的使用習慣而導致收發訊息時的順序錯亂了。最後,根據timestamp欄位進行排序,但是別忘了介面顯示時需要轉換一下。
如何在App中實現IM功能系列文章:
之一離線訊息常見淺析
之二快速實現離線訊息模組
之三快速實現離線訊息推送模組
之四建立穩健的訊息發送模組
之五快速實現圖片接收和發送
之六快速實現群聊的進階功能
之七快速實現聊天列表排序模組
本文出自 “箭扣科技Arrownock” 部落格,轉載請與作者聯絡!
如何在App中實現IM功能之七快速實現聊天列表排序模組——箭扣科技Arrownock