如何在App中實現IM功能之四建立穩健的訊息發送模組——箭扣科技Arrownock

來源:互聯網
上載者:User

標籤:箭扣科技 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.