下面我就来分享一下如何简单快速的集成环信EaseUI以及我在集成中遇到的问题。
ps:想要快速方便的集成最好不要按照官方文档的要求来做,因为你会发现全是坑啊!!!无力吐槽……
<-------------------------------------------------华丽的分割线------------------------------------->
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="true"
/>
public class MyApp extends Application{
@Override
public void onCreate() {
super.onCreate();
EaseUI.getInstance().init(this, null);
EMClient.getInstance().setDebugMode(true);
}
}
登录注册界面(布局自己随意画就可以),下面是我写的Demo(注意环信的聊天必须登录,不然会发送消息失败)
注册的方法,这里需要注意的是这步是异步操作,所以我们需要把它写在子线程中
//注册的方法 异步
public void register(){
new Thread(new Runnable() {
@Override
public void run() {
try {
EMClient.getInstance().createAccount(nameEt.getText().toString().trim(), passwordEt.getText().toString().trim());
Log.e("MainActivity", "注册成功");
} catch (HyphenateException e) {
e.printStackTrace();
Log.e("MainActivity", "注册失败");
}
}
}).start();
}
``//登录的方法
public void login(){
EMClient.getInstance().login(nameEt.getText().toString().trim(), passwordEt.getText().toString().trim(), new EMCallBack() {
@Override
public void onSuccess() {
startActivity(new Intent(MainActivity.this,TalkActivity.class));
}
@Override
public void onError(int i, String s) {
}
@Override
public void onProgress(int i, String s) {
}
});
}
这个是退出的方法,哪里需要写哪里~~~
private void logout() {
EMClient.getInstance().logout(false, new EMCallBack() {
@Override
public void onSuccess() {
startActivity(new Intent(getContext(),MainActivity.class));
getActivity().finish();
}
@Override
public void onError(int i, String s) {
}
@Override
public void onProgress(int i, String s) {
}
});
}
//启动会话列表
EaseConversationListFragment conversationListFragment = new EaseConversationListFragment();
conversationListFragment.setConversationListItemClickListener(new EaseConversationListFragment.EaseConversationListItemClickListener() {
@Override
public void onListItemClicked(EMConversation conversation) {
Log.e("TalkActivity", EaseConstant.EXTRA_USER_ID +" "+ conversation.conversationId());
startActivity(new Intent(TalkActivity.this, ChatActivity.class).putExtra(EaseConstant.EXTRA_USER_ID, conversation.conversationId()));
}
});
官方文档给出的是conversation.getUserName(),但是不知道我的为什么没有这个方法,后来研究发现返回的就是这个conversationId,所以直接填入就可以了
这里还要说一下的是:不是非要跳转到activity界面,因为easeui’的聊天界面就是EaseChatFragment,需要什么时候启动,只需要传入固定参数就可以了(这块好久才弄明白…)
ChatActivity:
public class ChatActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
EaseChatFragment chatFragment = new EaseChatFragment();
//传入参数
chatFragment.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().add(R.id.container, chatFragment).commit();
}
}
跳转到联系人界面(坑来了~~~~)
//直接启动联系人列表
contactListFragment = new EaseContactListFragment();
//需要设置联系人列表才能启动fragment
new Thread(new Runnable() {
@Override
public void run() {
contactListFragment.setContactsMap(getContacts());
}
}).start();
你会发现这样写完并没有显示联系人,这是因为我们需要再添加好友申请后的回调中再设置一遍联系人并且刷新一下 ps:这是个巨坑~~~当时集成的时候已然崩溃!!!
在其下方添加如下代码:
EMClient.getInstance().contactManager().setContactListener(new EMContactListener() {
@Override
public void onContactAdded(String s) {
Log.e("TalkActivity", s);
new Thread(new Runnable() {
@Override
public void run() {
contactListFragment.setContactsMap(getContacts());
contactListFragment.refresh();
}
}).start();
}
@Override
public void onContactDeleted(String s) {
}
@Override
public void onContactInvited(String s, String s1) {
}
@Override
public void onFriendRequestAccepted(String s) {
}
@Override
public void onFriendRequestDeclined(String s) {
}
});
}
/**
* 获取联系人
*
* @return
*/
private Map getContacts() {
Map map = new HashMap<>();
try {
List userNames = EMClient.getInstance().contactManager().getAllContactsFromServer();
// KLog.e("......有几个好友:" + userNames.size());
for (String userId : userNames) {
// KLog.e("好友列表中有 : " + userId);
map.put(userId, new EaseUser(userId));
}
} catch (HyphenateException e) {
e.printStackTrace();
}
return map;
}
到这里我们就可以实现简单的即时通讯功能了~~~如果还有什么需求只需要自己添加就可以了。
运行一下:
注意:
1,百度地图会和easeui冲突
2,发送定位或者打开大图的时候程序会崩掉,这是因为我们没有在Manifest文件中注册easeui中的两个Activity。
初次接触IM,希望大家包涵~
后续会写出自定义消息扩展(类似发名片的功能)