融云基础功能

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)

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容