融云基础功能

2021-06-11  本文已影响0人  苏墨白梦觉泪满青衫湿

1.单聊
单聊是最基本的聊天界面,提供文字、表情、语音片段、图片、实时音视频等多种输入内容,解决 App 内用户的沟通瓶颈。会话关系由融云负责建立并保持,退出聊天界面或者离线后可以收到推送通知。
前提条件:

  1. RongIM.init(this),接口已经执行。
  2. RongIM.connect(....),接口已经执行且 onSuccess() 被回调。
  3. 会话 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 提供的群组功能时,才需要设置群组信息提供者。如果您没有使用群组功能,则不需要设置群组信息提供者。提供的群组功能如下:

前提条件:

  1. RongIM.init(this),接口已经执行。
  2. RongIM.connect(....),接口已经执行且 onSuccess() 被回调。
  3. 会话 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

获取群组列表

image.png

聊天室

聊天室业务的描述,请参见新手指南中的说明。

聊天室与群组最大的不同在于,聊天室的消息没有 Push 通知,也没有成员的概念。想参与聊天室聊天,接收聊天室消息,加入聊天室即可;不参与聊天室聊天,不接收消息,退出聊天室即可。IMKit 组件中已经内置了加入和退出聊天室的接口调用,您直接启动即可:

前提条件:

  1. RongIM.init(this),接口已经执行。
  2. RongIM.connect(....),接口已经执行且 onSuccess() 被回调。
  3. 会话 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 将消耗不必要的流量(不退出聊天室将会持续接收来自该聊天室的消息)。

系统会话

前提条件:

  1. RongIM.init(this),接口已经执行。
  2. RongIM.connect(....),接口已经执行且 onSuccess() 被回调。
  3. 会话 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 组件中已经内置了订阅和取消订阅公众号的接口调用,您直接启动即可:

前提条件:

  1. RongIM.init(this),接口已经执行。
  2. RongIM.connect(....),接口已经执行且 onSuccess() 被回调。
  3. 会话 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

搜索公众号

通过 searchPublicServicesearchPublicServiceByType 方法搜索已经添加的公众号列表,可以按关键字精确匹配或模糊匹配方式进行搜索。

/**
 * 搜索全部公众服务。
 *
 * @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)

注:这些草稿信息仅存储于本地数据库中,不会上传服务器。

上一篇下一篇

猜你喜欢

热点阅读