融云基础功能
1.单聊
单聊是最基本的聊天界面,提供文字、表情、语音片段、图片、实时音视频等多种输入内容,解决 App 内用户的沟通瓶颈。会话关系由融云负责建立并保持,退出聊天界面或者离线后可以收到推送通知。
前提条件:
- RongIM.init(this),接口已经执行。
- RongIM.connect(....),接口已经执行且 onSuccess() 被回调。
- 会话 Activity 已经在 AndroidManifest.xml 文件中,配置了对应的 intent-filter,详见配置说明文档。
打开单聊窗口:
/**
* 启动单聊界面。
*
* @param context 应用上下文。
* @param targetUserId 要与之聊天的用户 Id。
* @param title 聊天的标题,开发者需要在聊天界面通过 intent.getData().getQueryParameter("title")
* 获取该值, 再手动设置为聊天界面的标题。
*/
RongIM.getInstance().startPrivateChat(getActivity(), "9527", "标题");
API 文档链接:RongIM.getInstance().startPrivateChat
常见问题:
群组
群组业务的描述,请参见新手指南中的说明。
群组信息与群成员信息是由 App 自己提供并进行维护管理,融云只是同步群组关系数据,并不保存群组的具体信息,融云会根据开发者同步的群组数据,计算群组的成员信息并群发消息。所以,当界面组件创建会话需要显示群组信息时,需要向 App 获取。App 需要设置一个群组信息提供者给 IMKit,以便 IMKit 读取好友关系。
只有您使用融云 IMKit 提供的群组功能时,才需要设置群组信息提供者。如果您没有使用群组功能,则不需要设置群组信息提供者。提供的群组功能如下:
前提条件:
- RongIM.init(this),接口已经执行。
- RongIM.connect(....),接口已经执行且 onSuccess() 被回调。
- 会话 Activity 已经在 AndroidManifest.xml 文件中,配置了对应的 intent-filter,详见配置说明文档。
启动群组聊天界面:
/**
* 启动群组聊天界面。
*
* @param context 应用上下文。
* @param targetGroupId 要聊天的群组 Id。
* @param title 聊天的标题,开发者可以在聊天界面通过 intent.getData().getQueryParameter("title") 获取该值, 再手动设置为标题。
*/
RongIM.getInstance().startGroupChat(getActivity(), "9527", "标题");
API 文档链接:RongIM.getInstance().startGroupChat
客户端的所有群组操作都需要请求您的 App Server, 您的 App Server 可以根据自己的逻辑进行管理和控制,然后通过 Server API 接口进行群组操作,并将结果返回给客户端。
详请见 Server API 群组服务接口。
以下展示了客户端进行群组操作的流程:
创建群组
加入群组 image.png
退出群组
image.png解散群组
image.png设置群组信息
image.png获取群组成员列表
image.png获取群组列表
image.png聊天室
聊天室业务的描述,请参见新手指南中的说明。
聊天室与群组最大的不同在于,聊天室的消息没有 Push 通知,也没有成员的概念。想参与聊天室聊天,接收聊天室消息,加入聊天室即可;不参与聊天室聊天,不接收消息,退出聊天室即可。IMKit 组件中已经内置了加入和退出聊天室的接口调用,您直接启动即可:
前提条件:
- RongIM.init(this),接口已经执行。
- RongIM.connect(....),接口已经执行且 onSuccess() 被回调。
- 会话 Activity 已经在 AndroidManifest.xml 文件中,配置了对应的 intent-filter,详见配置说明文档。
启动聊天室界面:
/**
* <p>启动聊天室会话。</p>
* <p>设置参数 createIfNotExist 为 true,对应到 kit 中调用的接口是
* {@link RongIMClient#joinChatRoom(String, int, RongIMClient.OperationCallback)}.
* 如果聊天室不存在,则自动创建并加入,如果回调失败,则弹出 warning。</p>
* <p>设置参数 createIfNotExist 为 false,对应到 kit 中调用的接口是
* {@link RongIMClient#joinExistChatRoom(String, int, RongIMClient.OperationCallback)}.
* 如果聊天室不存在,则返回错误 {@link io.rong.imlib.RongIMClient.ErrorCode#RC_CHATROOM_NOT_EXIST},并且会话界面会弹出 warning.
* </p>
*
* @param context 应用上下文。
* @param chatRoomId 聊天室 id。
* @param createIfNotExist 如果聊天室不存在,是否创建。
*/
public void startChatRoomChat(Context context, String chatRoomId, boolean createIfNotExist);
加入聊天室
加入聊天室,如果聊天室不存在,则创建聊天室并加入;如果已经存在,则直接加入。
/**
* 加入聊天室。
* <p>如果聊天室不存在,sdk 会创建聊天室并加入,如果已存在,则直接加入</p>
* <p>加入聊天室时,可以选择拉取聊天室消息数目。</p>
*
* @param chatroomId 聊天室 Id。
* @param defMessageCount 进入聊天室拉取消息数目,-1 时不拉取任何消息,0 时拉取 10 条消息,最多只能拉取 50 条。
* @param callback 状态回调。
*/
public void joinChatRoom(final String chatroomId, final int defMessageCount, final RongIMClient.OperationCallback callback)
加入已经存在的聊天室
/**
* 加入已存在的聊天室。
* <p>如果聊天室不存在,则加入失败</p>
* <p>加入聊天室时,可以选择拉取聊天室消息数目。</p>
*
* @param chatroomId 聊天室 Id。
* @param defMessageCount 进入聊天室拉取消息数目,-1 时不拉取任何消息,0 时拉取 10 条消息,最多只能拉取 50 条。
* @param callback 状态回调。
*/
public void joinExistChatRoom(final String chatroomId, final int defMessageCount, final RongIMClient.OperationCallback callback)
聊天室拉取消息数设置:
进入聊天室时默认拉取消息数为 10 条,根据需求可通过配置文件修改拉取消息条数,建议拉取消息数不超过 50 条,请在 res/values/rc_config.xml 文件中修改,为 -1 表示不获取任何历史消息,0 表示不特殊设置而使用 SDK 默认的设置(默认为获取10条),最大值为50。 xml 文件如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="rc_chatroom_first_pull_message_count">10</integer>
</resources>
如您在使用 IMLib 开发时注意,因聊天室没有成员关系,需要在每次显示聊天室聊天界面之前,执行加入聊天室的操作,并在退出聊天室聊天界面之后执行退出聊天室的操作。否则,您的 App 将消耗不必要的流量(不退出聊天室将会持续接收来自该聊天室的消息)。
系统会话
前提条件:
- RongIM.init(this),接口已经执行。
- RongIM.connect(....),接口已经执行且 onSuccess() 被回调。
- 会话 Activity 已经在 AndroidManifest.xml 文件中,配置了对应的 intent-filter,详见配置说明文档。
打开系统会话聊天界面:
/**
* 启动系统会话聊天界面。
*
* @param context 应用上下文。
* @param conversationType 开启会话类型。
* @param targetId 目标 Id;
* @param title 聊天的标题,开发者可以在聊天界面通过 intent.getData().getQueryParameter("title") 获取该值, 再手动设置为标题。
*/
RongIM.getInstance().startConversation(getActivity(), Conversation.ConversationType.SYSTEM, "9527", "标题");
API 文档链接:RongIM.getInstance().startConversation
系统会话消息由应用服务端发送,客户端只能接收消息,不能进行回复。
客服
详细请参见客服集成文档。
公众号
融云公众服务
是为应用开发者和公众帐号运营者提供的连接服务产品,通过融云公众服务,App 可以具备为自己的用户提供公众帐号服务的能力和资源。
公众服务包括
:应用公众服务
和公众服务平台
。
应用公众服务
:是为应用开发者提供的 App 内建公众服务能力,通过在融云开发者站点创建 App 公众号,实现应用内的公众服务。
公众服务平台
:是在应用开发者和公众帐号运营者之间建立的对接平台,应用开发者可以通过平台引入公众服务资源,帮助 App 快速覆盖用户需求,公众帐号持有者通过平台可以有机会向所有集成融云 SDK 的 App 提供服务,进而获得更加精准更加丰富的受众渠道。
开发者可在 融云开发者平台 的公众服务模块中,通过添加公众服务
或应用公众服务
中的公众号到自己的应用中。
IMKit
组件中已经内置了订阅和取消订阅公众号的接口调用,您直接启动即可:
前提条件:
- RongIM.init(this),接口已经执行。
- RongIM.connect(....),接口已经执行且 onSuccess() 被回调。
- 会话 Activity 已经在 AndroidManifest.xml 文件中,配置了对应的 intent-filter,详见配置说明文档。
打开应用公众服务会话界面:
/**
* 启动应用公众服务会话界面。
*
* @param context 应用上下文。
* @param conversationType 开启会话类型。
* @param targetId 目标 Id。
* @param title 聊天的标题,开发者可以在聊天界面通过 intent.getData().getQueryParameter("title") 获取该值, 再手动设置为标题。
*/
RongIM.getInstance().startConversation(getActivity(), Conversation.ConversationType.APP_PUBLIC_SERVICE, "9527", "公众帐号标题");
API 文档链接:RongIM.getInstance().startConversation
打开公众服务号会话界面:
/**
* 启动公众服务号会话界面。
*
* @param context 应用上下文。
* @param conversationType 开启会话类型。
* @param targetId 目标 Id。
* @param title 聊天的标题,开发者可以在聊天界面通过 intent.getData().getQueryParameter("title") 获取该值, 再手动设置为标题。
*/
RongIM.getInstance().startConversation(getActivity(), Conversation.ConversationType.PUBLIC_SERVICE, "9527", "公众帐号标题");
API 文档链接:RongIM.getInstance().startConversation
打开应用公众服务信息界面:
/**
* 启动应用公众服务信息界面。
*
* @param context 应用上下文。
* @param conversationType 会话类型。
* @param targetId 目标 Id。
*/
RongIM.getInstance().startPublicServiceProfile(getActivity(), Conversation.ConversationType.APP_PUBLIC_SERVICE, "9527");
API 文档链接:RongIM.getInstance().startPublicServiceProfile
打开公共服务号信息界面:
/**
* 启动公共服务号信息界面。
*
* @param context 应用上下文。
* @param conversationType 会话类型。
* @param targetId 目标 Id。
*/
RongIM.getInstance().startPublicServiceProfile(getActivity(), Conversation.ConversationType.PUBLIC_SERVICE, "9527");
API 文档链接:RongIM.getInstance().startPublicServiceProfile
搜索公众号
通过 searchPublicService
或 searchPublicServiceByType
方法搜索已经添加的公众号列表,可以按关键字精确匹配或模糊匹配方式进行搜索。
/**
* 搜索全部公众服务。
*
* @param searchType 搜索类型枚举。
* @param keywords 搜索关键字。
*/
RongIM.getInstance().searchPublicService(RongIMClient.SearchType.EXACT, keywords, new RongIMClient.SearchPublicServiceCallback() {
@Override
public void onError(RongIMClient.ErrorCode e) {
//错误回调处理
}
@Override
public void onSuccess(PublicServiceProfileList publicServiceProfileList) {
//成功回调处理
}
});
/**
* 按公众服务类型搜索公众服务。
*
* @param conversationType 会话类型。
* @param searchType 搜索类型枚举。
* @param keywords 搜索关键字。
*/
RongIM.getInstance().searchPublicServicebyType(Conversation.PublicServiceType.PUBLIC_SERVICE, RongIMClient.SearchType.EXACT, keywords, new RongIMClient.SearchPublicServiceCallback() {
@Override
public void onError(RongIMClient.ErrorCode e) {
//错误回调处理
}
@Override
public void onSuccess(PublicServiceProfileList publicServiceProfileList) {
//成功回调处理
}
});
获取己关注公共账号列表:
在应用中需要展示已关注公共账号列表时,可通过 getPublicServiceList 方法获取己关注公共账号列表信息。
RongIM.getInstance().getPublicServiceList(new RongIMClient.SearchPublicServiceCallback() {
@Override
public void onSuccess(PublicServiceProfileList publicServiceProfileList) {
//成功回调处理
}
@Override
public void onError(RongIMClient.ErrorCode e) {
//错误回调处理
}
});
获取某公众号信息
/**
* 按公众服务类型搜索公众服务。
*
* @param publicServiceType 公众服务类型。
* @param publicServiceId 公众号 Id。
*/
RongIM.getInstance().getPublicServiceProfile(Conversation.PublicServiceType.PUBLIC_SERVICE, publicServiceId, new RongIMClient.ResultCallback<PublicServiceProfile>() {
@Override
public void onSuccess(PublicServiceProfile profile) {
//成功后返回公众号信息
}
@Override
public void onError(RongIMClient.ErrorCode e) {
//错误回调处理
}
});
草稿管理
保存草稿至某一会话
/**
* 根据消息类型,targetId 保存某一会话的文字消息草稿。用于暂存用户输入但未发送的消息。
*
* @param conversationType 会话类型。
* @param targetId 目标 Id。根据不同的 conversationType,可能是用户 Id、群组 Id 或聊天室 Id。
* @param content 草稿的文字内容。
* @param callback 是否保存成功的回调。
*/
public void saveTextMessageDraft(Conversation.ConversationType conversationType, String targetId, final String content, final ResultCallback<Boolean> callback)
获取某会话里的草稿信息
/**
* 根据消息类型,targetId 获取某一会话的文字消息草稿。用于获取用户输入但未发送的暂存消息。
*
* @param conversationType 会话类型。
* @param targetId 目标 Id。根据不同的 conversationType,可能是用户 Id、群组 Id 或聊天室 Id。
* @param callback 获取草稿文字内容的回调。
*/
public void getTextMessageDraft(final Conversation.ConversationType conversationType, final String targetId, final ResultCallback<String> callback)
注:这些草稿信息仅存储于本地数据库中,不会上传服务器。