1. 程式人生 > >Android使用EaseUI整合環信3.0 設定頭像和使用者名稱 三

Android使用EaseUI整合環信3.0 設定頭像和使用者名稱 三

整合環信看了很多文件,還是不會,從官網下載的demo,也不會用,後來才發現應該下載官網的sdk,裡面有個examples的資料夾,使用studio直接開啟裡面的ChatDemoUI3.0,就是一個可以執行的demo.執行的時候會報一個異常

Error:Execution failed for task ':transformClassesWithJarMergingForDebug'.
> com.Android.build.api.transform.TransformException: Java.util.zip.ZipException: duplicate entry: android/support/multidex/MultiDex
$V14.class

ChatDemoUI3.0的build檔案有個依賴v7包的,我對照以前可以執行的專案發現,刪除v7 的這一行,就可以了,可以執行起來.下面的整合大部分是仿照demo做的.

(原來只要刪除這個v7包就能執行起來,其他的都不需要)

dependencies {
    compile project(':redpacketlibrary')
    compile project(':EaseUI')
    compile fileTree(include: '*.jar', exclude: 'android-support-multidex.jar', dir
: 'libs') //考慮到在eclipse中,直接使用原始碼 // compile ('com.anthonycr.grant:permissions:1.0'){ // exclude module: 'support-v4' // } compile 'com.android.support:appcompat-v7:23.4.0' }

首先在環信官網下載sdk
解壓後examples內的easeUI依賴到專案中,(easeUi包含simpledemo如果不需要可以刪除)
根據examples內的ChatDemoUi將需要的檔案考到自己的專案中
記得改清單檔案的appkey以及ParseManager的parseAppId和ParseClientKey

第一步:ChatFragment

@Override
public void onSetMessageAttributes(EMMessage message) {
    //設定訊息擴充套件屬性
    message.setAttribute("name", MyApplication.myPreferences.getNickname());
    message.setAttribute("picturl",MyApplication.myPreferences.getImgurl());
}

第二步:DemoHelper類registerEventListener()方法

public void onMessageReceived(List<EMMessage> messages) {
    for (EMMessage message : messages) {
        EMLog.d(TAG, "onMessageReceived id : " + message.getMsgId());
        //接收處理擴充套件訊息
        String em_name=message.getStringAttribute("name","");
        String em_picturl=message.getStringAttribute("picturl","");
    //下面是環信客服的擴充套件訊息,本身可以使用和上方一樣的方法(擴充套件引數不同),但是不知道為什麼取不到值,因此先取weichat,自己解析擴充套件訊息
        String hxIdFrom = message.getFrom();
        EaseUser easeUser = new EaseUser(hxIdFrom);
        if(null==picturl||picturl.length()==0){
            try {
                JSONObject jsonObject = message.getJSONObjectAttribute("weichat");
                JSONObject jsonObject1=jsonObject.getJSONObject("agent");
                easeUser.setAvatar("http:"+jsonObject1.getString("avatar"));
                easeUser.setNick(jsonObject1.getString("userNickname"));
            } catch (HyphenateException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }else {
            easeUser.setAvatar(picturl);
            easeUser.setNick(name);
        }
        // 存入記憶體
        getContactList();
        contactList.put(hxIdFrom, easeUser);
        // 存入db
        UserDao dao = new UserDao(MyApplication.getInstance());
        List<EaseUser> users = new ArrayList<>();
        users.add(easeUser);
        dao.saveContactList(users);
        getModel().setContactSynced(true);
        // 通知listeners聯絡人同步完畢
        notifyContactsSyncListener(true);
        //應用在後臺,不需要重新整理UI,通知欄提示新訊息
        if(!easeUI.hasForegroundActivies()){
            getNotifier().onNewMsg(message);
        }
    }
}

第三步:DemoHelper類

private EaseUser getUserInfo(String username){
        //獲取user資訊,demo是從記憶體的好友列表裡獲取,
        //實際開發中,可能還需要從伺服器獲取使用者資訊,
        //從伺服器獲取的資料,最好快取起來,避免頻繁的網路請求
        EaseUser user = null;
        //設定自己的頭像
        if(username.equals(EMClient.getInstance().getCurrentUser())){
            user=new EaseUser(username);
            user.setAvatar(Conn.IMGURL+MyApplication.myPreferences.getImgurl());
            return user;
        }else {
//設定別人的頭像
        if (contactList != null && contactList.containsKey(username)) {

        } else { // 如果記憶體中沒有,則將本地資料庫中的取出到記憶體中。
            getContactList();
        }
        user = getContactList().get(username);
        if(user == null){
            user = new EaseUser(username);
        } else {
            if(TextUtils.isEmpty(user.getNick())){ // 如果名字為空,則顯示環訊號碼
                user.setNick(user.getUsername());
            }
        }
        return user;
    }
    }

第四步:本人的好友列表時自己伺服器的,會話列表是環信的,如果和對方聊天但對方沒有回答時要顯示對方的頭像和暱稱還是DemoHelperl類asyncFetchContactsFromServer()方法

userlist.put(info.friendBean.get(i).id,user);

第五步:會話列表顯示客服的頭像和暱稱,好友列表內有客服的聯絡方式,伺服器內是沒有客服的頭像和暱稱的。EaseUi裡有EaseConversationAdapter類呼叫了EaseUserUtils類,在setUserAvatar和setUserNick方法裡設定客服預設的頭像和暱稱,當客服會話後,環信移動客服開啟客戶端顯示暱稱和頭像第二步可以獲取到客服自己的頭像和暱稱。

安卓交流群 : 595856941