標籤:箭扣科技 arrownock im 即時通訊
如何在App中實現IM功能之四建立穩健的訊息發送模組
anIM聊天是以心跳的方式保持裝置和伺服器之間的線上串連,有時候會因為網路或其他原因導致串連中斷,則在該裝置登入的使用者在伺服器端會自動下線。那麼此時發送訊息的話,伺服器會返回使用者已經下線的異常,導致訊息無法發送成功。
為了避免這個問題的發生,我們可以在代碼中使用一些技巧來解決。
1. 設定變數
設定一個全域變數isFromSendMsg為false。 private boolean isFromSendMsg = false;
2. 判斷使用者是否線上
當點擊介面的發送訊息按鈕時,首先判斷使用者是否線上。如果線上,則直接發送訊息。如果不線上,則先登入再發送訊息。
//如果使用者離線則先登入再發訊息 if (anIM.getCurrentStatus() == AnIMStatus.OFFLINE) { refreshUIView(); // 先重新整理介面 //登入 anIM.connect(clientId); //將全域變數設定為true,意味著登入後馬上發送訊息,不走登入其他流程 isFromSendMsg = true; } else { anIM.sendMessage(clientIds,msg); } }
3. 登入判斷
登入的時候通過全域變數來判斷這次登入是否需要立即發送訊息。如果是,發送訊息前把全域變數改回去。
@Override public void statusUpdate(final AnIMStatusUpdateCallbackData data) { if (isFromSendMsg && data.getStatus() == AnIMStatus.ONLINE) { isFromSendMsg = false; anIM.sendMessage(clientIds, msg); } else { //正常的登入流程 } }
4. 介面處理的技巧
點擊發送訊息按鈕的時候,立即將資料存入資料庫,重新整理一次介面,用Loading動畫來表示。當發送訊息成功後,再修改一次資料,重新整理一次介面,去掉Loading動畫。
如何在App中實現IM功能系列文章:
之一離線訊息常見淺析
之二快速實現離線訊息模組
之三快速實現離線訊息推送模組
之四建立穩健的訊息發送模組
之五快速實現圖片接收和發送
之六快速實現群聊的進階功能
之七快速實現聊天列表排序模組
本文出自 “箭扣科技Arrownock” 部落格,轉載請與作者聯絡!
如何在App中實現IM功能之四建立穩健的訊息發送模組——箭扣科技Arrownock