IM实战:Android接入环信 IM SDK

本次学习目标:

  1. 注册环信;
  2. Android端集成环信 IM SDK;
  3. 实现注册-登录-发送消息-会话列表等;

一、环信IM

       什么是环信IM

环信IM是一款即时通讯产品,为开发者提供基于移动互联网的即时通讯能力,如单聊、群聊、发语音、发图片、发位置等,让开发者摆脱繁重的移动IM通讯底层开发,24小时即可让App拥有内置IM能力

      环信IM可以实现什么?

实现了个人与个人,群组,聊天室发消息,发语音,发图片,发位置等功能,提供了一套供开发者拿来即用的EaseIMKit的ui库;

二、 环信IM实现通讯的基本流程

  1. 环信账号

  • a、找到环信im官网,注册一个管理者账号 ,注册地址:https://console.easemob.com/user/register
  • b、注册成功以后,点击右上角登录 > 登录即时通讯云 ,进入console后台
  • c、在环信通讯云控制台创建Appkey;

IM实战:Android接入环信 IM SDK_第1张图片

2、Android端接入环信SDK

选择如下任意一种方式将环信即时通讯 IM SDK 集成到你的项目中(以下集成方式只需选择一种,同时使用多种集成方式可能会报错):

方法一:

该方法仅适用于 v3.8.2 或以上版本。

1.在项目的 build.gradle 中添加 mavenCentral()仓库。

buildscript {
    repositories {
        ...
        mavenCentral()
    }
    ...
}

allprojects {
    repositories {
        ...
        mavenCentral()
    }
}

2.在 module 的 build.gradle 中添加如下依赖:

dependencies {
    ...
    // x.y.z 请填写具体版本号,如:3.9.4。
    // 可通过 SDK 发版说明获得最新版本号。
    implementation 'io.hyphenate:hyphenate-chat:x.x.x'
}

方法二:

手动复制 SDK 文件

打开 SDK 下载页面,获取最新版的环信即时通讯 IM Android SDK,然后解压。

IM实战:Android接入环信 IM SDK_第2张图片

将 SDK 包内 libs 路径下的如下文件,拷贝到你的项目路径下:

IM实战:Android接入环信 IM SDK_第3张图片

3、Android端注册与登录

(1)在主进程中进行初始化:

EMOptions options = new EMOptions();
options.setAppKey("Your appkey");
......// 其他 EMOptions 配置。
EMClient.getInstance().init(context, options);

(2)创建账号

此方法为同步方法,会阻塞当前线程;

此方法只有在开放注册模式下,才能调用。如果此方法报错,请检查下环信管理后台是否是开放注册模式;

// 注册失败会抛出 HyphenateException。
// 同步方法,会阻塞当前线程。
EMClient.getInstance().createAccount(mAccount, mPassword);

(3)登录账号

EMClient.getInstance().login(mAccount, mPassword, new EMCallBack() {
    // 登录成功回调
    @Override 
    public void onSuccess() {

    }

    // 登录失败回调,包含错误信息
    @Override 
    public void onError(final int code, final String error) {
    
    }
    
    @Override 
    public void onProgress(int i, String s) {
        
    }

});

4、Android端添加好友获取好友列表

(1)添加好友:

// 同步方法,会阻塞当前线程。异步方法为 asyncAddContact(String, String, EMCallBack)。
EMClient.getInstance().contactManager().addContact(toAddUsername, reason);

(2)获取好友列表:

// 从服务器获取好友列表。
// 同步方法,会阻塞当前线程。异步方法为 asyncGetAllContactsFromServer(EMValueCallBack)。
List usernames = EMClient.getInstance().contactManager().getAllContactsFromServer();
// 从本地数据库获取好友列表。
List usernames = EMClient.getInstance().contactManager().getContactsFromLocal();

5、Android端实现发送文本消息

发送一条单聊消息

// `content` 为要发送的文本内容,`toChatUsername` 为对方的账号。
EMMessage message = EMMessage.createTxtSendMessage(content, toChatUsername);
// 发送消息
EMClient.getInstance().chatManager().sendMessage(message);

6、Android端实现接收消息

你可以用注册监听 EMMessageListener 接收消息。

该 EMMessageListener 可以多次添加,请记得在不需要的时候移除 listener,

如在activity 的 onDestroy() 时。

在新消息到来时,你会收到 onMessageReceived 的回调,消息接收时可能是一条,

也可能是多条。你可以在该回调里遍历消息队列,解析并显示收到的消息。

EMMessageListener msgListener = new EMMessageListener() {

   // 收到消息,遍历消息队列,解析和显示。
   @Override
   public void onMessageReceived(List messages) {

   }
};
// 注册消息监听
EMClient.getInstance().chatManager().addMessageListener(msgListener);
// 解注册消息监听
EMClient.getInstance().chatManager().removeMessageListener(msgListener);

7、EaseIMKit 创建聊天列表页面

EaseIMKit 提供了 EaseChatFragment,添加到 Activity 中并传递相应的参数即可用。

必须向 EaseChatFragment 传递的参数为:

conversationId——会话 ID,单聊时指对方 ID,群聊和聊天室时指群和聊天室 ID;

chatType——聊天类型,整型,分别为单聊(1)、群聊(2)和聊天室(3);

可选传递参数为:

history_msg_id——消息 ID,用于查询历史记录时的定位消息 ID;

isRoaming——是否开启漫游,布尔类型,用于标记是否优先从服务器拉取消息。

@Override
protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main2)                     
       EaseChatFragment chatFragment = new EaseChatFragment();
       Bundle bundle = new Bundle();
       bundle.putString(EaseConstant.EXTRA_CONVERSATION_ID, "环信id");
       bundle.putInt(EaseConstant.EXTRA_CHAT_TYPE, 1);
       chatFragment.setArguments(bundle);
       getSupportFragmentManager().beginTransaction().replace(R.id.container,chatFragment,"chat").commit();                 
}

8、EaseIMKit 创建会话列表页面

EaseIMKit 提供了 EaseConversationListFragment,需要将其或者其子类添加到

Activity 中。开发者需要对刷新事件(新消息,删除消息,删除会话等)进行处理。

1.加载会话:

public void loadDefaultData() {
      presenter.loadData();
}

2.设置数据

 public void setData(List data) {
       presenter.sortData(data);
}

3.删除会话

@Override
public void deleteConversation(int position, EaseConversationInfo info) {
      presenter.deleteConversation(position, info);
}

9、EaseIMKit 添加联系人页面

EaseIMKit 提供了 EaseContactListFragment,添加其及其子类到 Activity 中。开发者需要对刷新事件(添加联系人,删除联系人等)进行处理

1.设置数据

public void setData(List data) {
      presenter.sortData(data);
}

到这里我们已经完成了Android端SDK集成,并实现了IM基本功能相信以各位小伙伴的能力接着的优化完全不是问题,当然也说不定有些奇葩问题搞不定,建议可以去环信官网联系官方技术支持,快速帮你解决遇到的问题~~

环信官网:https://www.easemob.com/

注册环信账号:注册环信即时通讯云

Android端SDK下载:https://www.easemob.com/download/im

问题交流:https://www.imgeek.net/

你可能感兴趣的:(android,android,studio,gradle)