環信2.x升級3.0變更介紹

SDK 2.x至3.0升級指南linux

使用升級替換腳本api


可使用SDK中的自動替換腳本替換大部分原有API的變更, 有部分須要手動更新的請見下面的說明。架構


./replace.sh your_source_folderui

注意對象


該腳本能夠容許在linux,mac及cygwin環境下並須要可執行權限開發

若是在mac下,須要用戶用brew或其餘方式安裝gsedget

API大體變更介紹it


3.0中的核心類爲EMClient類,經過emclient類能夠獲取到chatmanager、groupmanager、contactmanager、chatroommanager等manager對象,此外和這些manager不太相關的方法基本EMClient類裏面,如登陸、設置鏈接監聽等方法。message裏的成員變量的獲取都變成getXXX獲取io


從2.x升級到3.0,大部分的變更只須要改變api名稱就能夠了,可是少部分地方由於架構等緣由須要一些稍複雜的改動。 這裏先列出api大概的變更列表:ast


消息接發對於之前經過conversation.addConversation()方法,而後在adapter中發送消息的開發者來講變更稍微有點大,這裏再單獨列出來修改方法: 首先把conversation.addMessage(message)刪除掉,而後調用sendmessage方法,在messageadapter顯示消息的地方,再也不調用sendmessage方法,adapter裏只是根據消息的狀態顯示相應的ui便可,經過調用message.setMessageStatusCallback(messageReceiveCallback),監聽消息是否發送成功等,這裏以發送文字消息做爲示例、

protected void sendMessage(EMMessage message){

      if(chatFragmentListener != null){

          //設置擴展屬性

          chatFragmentListener.onSetMessageAttributes(message);

      }

      // 若是是羣聊,設置chattype,默認是單聊

      if (chatType == EaseConstant.CHATTYPE_GROUP){

          message.setChatType(ChatType.GroupChat);

      }else if(chatType == EaseConstant.CHATTYPE_CHATROOM){

          message.setChatType(ChatType.ChatRoom);

      }

      //發送消息

      EMClient.getInstance().chatManager().sendMessage(message);

      //刷新ui

      messageList.refreshSelectLast();

  }

在顯示消息的adpater中,根據消息狀態顯示相應ui便可


protected void handleTextMessage() {

      if (message.direct() == EMMessage.Direct.SEND) {

          setMessageSendCallback();

          switch (message.status()) {

          case CREATE: 

              progressBar.setVisibility(View.GONE);

              statusView.setVisibility(View.VISIBLE);

              break;

          case SUCCESS: // 發送成功

              progressBar.setVisibility(View.GONE);

              statusView.setVisibility(View.GONE);

              break;

          case FAIL: // 發送失敗

              progressBar.setVisibility(View.GONE);

              statusView.setVisibility(View.VISIBLE);

              break;

          case INPROGRESS: // 發送中

              progressBar.setVisibility(View.VISIBLE);

              statusView.setVisibility(View.GONE);

              break;

          default:

             break;

          }

      }else{

          if(!message.isAcked() && message.getChatType() == ChatType.Chat){

              try {

                  EMClient.getInstance().chatManager().ackMessageRead(message.getFrom(), message.getMsgId());

              } catch (HyphenateException e) {

                  e.printStackTrace();

              }

          }

      }

  }

相關文章
相關標籤/搜索