IMKit

IMKit是云上曲率针对IM(即时通讯)场景,结合基础功能提供即时通讯界面库。如果您使用RTM服务来进行IM(即时通讯)业务的开发,可以直接使用IMKit中的相关功能,,快速上线IM业务。

本文介绍RTM高级功能中的IMKit,您可以了解IMKit的使用方法等内容。

功能简介

在需要使用到IM(即时通讯)的场景中, IMKit可为场景提供会话列表、会话界面、消息发送等功能。

功能 描述
会话列表 IMKit提供聚合所有会话页面
会话界面 IMKit提供会话界面的集成
会话功能 IMKit提供基础的会话功能

功能详情

导入

版本支持

  • IMKit 最低支持 Android 7.0(api24)

使用权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

集成依赖

  • 引入 fpnn-imlib-sdk module
  • 引入 fpnn-imkit-sdk module
IMKit集成依赖

IMKit 使用 Gradle 进行依赖管理和安装,已添加的三方依赖如下:

implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
implementation 'com.google.android.flexbox:flexbox:3.0.0'
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
implementation 'com.github.chrisbanes:PhotoView:2.3.0'

初始化

初始化准备

云上曲率IMKit使用前,需要开发者创建 实时信令 项目,并获取 项目PID接入点(endpoint)。 您可以从官网登录 控制台,创建 实时信令 项目。

初始化

使用 ChatManager.getInstance().init() 方法进行初始化。

调用方法

ChatManager.getInstance().init(this.getApplicationContext(), uid, pid,endPoint);

参数说明

参数 类型 说明
getApplicationContext Context 应用上下文
uid long 要登录的用户id
pid long 项目id
endPoint string 客户端SDK接入点

IMKit 的核心类ChatManager

连接

获取Token

开发者需要集成 RTM服务端SDK,使得业务服务器与RTM服务器通信,获取Token。具体参考通过业务服务端获取Token

如果你没有业务服务器,可以登录控制台,通过 “接口工具” 来获取。

登录

使用 ChatManager.getInstance().loginIM() 方法进行登录。

调用方法


ChatManager.getInstance().loginIM(token, new ILoginCallback() {
    @Override
    public void loginSuccess() {

    }

    @Override
    public void loginFailed(String error) {

    }
});

参数说明

参数 类型 说明
token - 业务服务器获取的token
ILoginCallback - 登录回调

退出

调用方法

ChatManager.getInstance().bye();

连接状态监听

通过监听客户端的连接状态,进行不同的后续业务处理,并可以在客户端页面上给出提示。以下事件监听可以根据实际业务需求进行自定义设置。

  • 使用 addOnConnectCloseListener 监听连接是否关闭

调用示例

ChatManager.getInstance().addOnConnectCloseListener(this);
  • 使用 removeOnConnectCloseListener 移除对应监听,关闭页面时使用

调用示例

ChatManager.getInstance().removeOnConnectCloseListener(this);
  • 使用 addOnReloginCompletedListener 监听重连状态

调用示例

ChatManager.getInstance().addOnReloginCompletedListener(this);
  • 使用 remveOnReloginCompletedListener 移除重连状态监听,关闭页面时使用

调用示例

ChatManager.getInstance().removeOnReloginCompletedListener(this);
  • 使用 addOnKickoutListenerListener 监听用户被踢下线事件

调用示例

ChatManager.getInstance().addOnKickoutListenerListener(this);
  • 使用 remveOnReloginCompletedListener 移除用户被踢下线事件监听,关闭页面时使用

调用示例

ChatManager.getInstance().removeOnKickoutListenerListener(this);

建议在应用生命周期内设置。

会话列表页面

集成会话列表

IMKit 默认提供基于 Activity 类实现的会话列表页面。

  • 页面支持一个标题栏和一个会话列表。当需要跳转到会话列表时,会跳转到默认的会话列表 Activity
  • 类名为 ConversationListActivity

当登录成功后,会启动会话列表页面。

调用示例

RouteManager.routeConversationListActivity(this);

参数说明

参数 类型 说明
this context 应用上下文
ILoginCallback - 登录回调

页面参考

会话列表

事件监听

获取会话列表数据

IMKit 可以使用 getConversationList 来获取会话列表的数据。

调用示例

ChatManager.getInstance().client.getConversationList(null);

会话页面

集成会话界面

IMKit 默认提供基于 Activity 类实现的会话页面。

  • 页面包含标题栏、消息列表和输入区域。在会话列表页面点击任一会话时,会跳转到相对应的会话页面,应用层无需处理。
  • 也可以从其它 Activity 跳转到会话页面。
  • 类名为 ConversationActivity

调用示例

P2P会话页面

RouteManager.routeConversationActivity(this,uid,IMStruct.ConversationType.P2P)

参数说明

参数 类型 说明
this context 应用上下文
uid long 用户id
conversationType ConversationType 会话类型

页面参考

P2P会话

配置会话界面

  • 下拉获取会话历史数据

调用示例

public MutableLiveData<List<IMStruct.HistoryTable>> conversationLiveData(Conversation conversation);
  • 更新新消息

调用示例

public MutableLiveData<List<IMStruct.HistoryTable>> loadNewConversation(Conversation conversation);

发送消息

  • 发送文字消息

调用示例

private void sendText(String data);

参数说明

参数 类型 说明
data string 发送的内容
  • 发送图片消息

调用示例

private void sendImage(String path);

参数说明

参数 类型 说明
path string 图片保存路径
  • 发送离线语音

调用示例

private void sendAudio(String audioPath, int duration, File file);

参数说明

参数 类型 说明
audioPath string 音频保存路径
duration int 音频时长
file File 音频文件

接收消息监听

会话页面中,已经默认添加了 接收消息清空历史 的监听,应用层无需处理。 如果需要使用自定义页面,则可使用以下消息监听:

  • 监听IM收到的消息,包括P2P消息和群组消息。

调用示例

ChatManager.getInstance().addOnReceiveMessageListener(this)
  • 关闭页面时需要移除对应监听
ChatManager.getInstance().removeOnReceiveMessageListener(this)

接收系统消息监听

如果需要使用自定义页面,则可以使用此方法来监听IM收到的系统消息。

  • 监听接收到的系统消息

调用示例

ChatManager.getInstance().addOnReceiveSysNotificationListener(this);
  • 关闭页面时需要移除对应监听

调用示例

ChatManager.getInstance().removeOnReceiveSysNotificationListener(this);

会话功能相关

删除会话

IMKit 支持删除会话列表单个会话的功能。当调用删除会话方法时,会同时触发会话列表页面的刷新动作。

调用示例

ChatManager.getInstance().delConversation(IMStruct.ConversationType.intToEnum(conversationInfo.conversationType), conversationInfo.conversationId);

刷新会话列表页面,需要提前调用 OnConversationItemClickListener 接口实现item事件点击的监听。

设置未读或者已读

IMKit 支持在会话列表页面设置单个会话为已读或者未读状态的功能。当调用此方法时,会同时触发会话列表页面的刷新动作。

调用示例

ChatManager.getInstance().setUnread(conversationInfo);

刷新会话列表页面,需要提前调用 OnConversationItemClickListener 接口实现item事件点击的监听。

设置会话置顶

IMKit 支持设置会话列表页面单个会话置顶的功能。当调用此方法时,会同时触发会话列表页面的刷新动作。

调用示例

ChatManager.getInstance().setTopChat(isTop, conversationType, conversationId, position);

参数说明

参数 类型 说明
isTop Boolean 是否置顶
conversationType ConversationType 会话类型,群组或者p2p
conversationId long 群组id或者用户id
position int 要置顶的item位置

刷新会话列表页面,需要提前调用 OnConversationItemClickListener 接口实现item事件点击的监听。

设置草稿

IMKit 支持设置会话列表页面单个会话待发送的消息为草稿状态的功能。当调用此方法时,会同时触发会话列表页面的刷新动作。 调用示例

ChatManager.getInstance().setConversationDraft(conversation.getConversationType(), conversation.getTargetId(), draft);

参数说明

参数 类型 说明
conversationType ConversationType 会话类型,群组或者p2p
targetId - 群组id或者用户id
draft string 草稿内容

刷新会话列表页面,需要提前调用 OnConversationItemClickListener 接口实现item事件点击的监听。