集成环信看了很多文档,还是不会,从官网下载的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方法里设置客服默认的头像和昵称,当客服会话后,环信移动客服打开客户端显示昵称和头像第二步可以获取到客服自己的头像和昵称。
原文地址:
http://blog.csdn.net/gggccy/article/details/52195568
安卓交流群 : 595856941