1.單聊
單聊是最基本的聊天界面,提供文字、表情、語音片段、圖片、實時音視頻等多種輸入內(nèi)容,解決 App 內(nèi)用戶的溝通瓶頸。會話關(guān)系由融云負責(zé)建立并保持,退出聊天界面或者離線后可以收到推送通知。
前提條件:
- RongIM.init(this),接口已經(jīng)執(zhí)行。
- RongIM.connect(....),接口已經(jīng)執(zhí)行且 onSuccess() 被回調(diào)。
- 會話 Activity 已經(jīng)在 AndroidManifest.xml 文件中,配置了對應(yīng)的 intent-filter,詳見配置說明文檔。
打開單聊窗口:
/**
* 啟動單聊界面。
*
* @param context 應(yīng)用上下文。
* @param targetUserId 要與之聊天的用戶 Id。
* @param title 聊天的標(biāo)題,開發(fā)者需要在聊天界面通過 intent.getData().getQueryParameter("title")
* 獲取該值, 再手動設(shè)置為聊天界面的標(biāo)題。
*/
RongIM.getInstance().startPrivateChat(getActivity(), "9527", "標(biāo)題");
API 文檔鏈接:RongIM.getInstance().startPrivateChat
常見問題:
群組
群組業(yè)務(wù)的描述,請參見新手指南中的說明。
群組信息與群成員信息是由 App 自己提供并進行維護管理,融云只是同步群組關(guān)系數(shù)據(jù),并不保存群組的具體信息,融云會根據(jù)開發(fā)者同步的群組數(shù)據(jù),計算群組的成員信息并群發(fā)消息。所以,當(dāng)界面組件創(chuàng)建會話需要顯示群組信息時,需要向 App 獲取。App 需要設(shè)置一個群組信息提供者給 IMKit,以便 IMKit 讀取好友關(guān)系。
只有您使用融云 IMKit 提供的群組功能時,才需要設(shè)置群組信息提供者。如果您沒有使用群組功能,則不需要設(shè)置群組信息提供者。提供的群組功能如下:
前提條件:
- RongIM.init(this),接口已經(jīng)執(zhí)行。
- RongIM.connect(....),接口已經(jīng)執(zhí)行且 onSuccess() 被回調(diào)。
- 會話 Activity 已經(jīng)在 AndroidManifest.xml 文件中,配置了對應(yīng)的 intent-filter,詳見配置說明文檔。
啟動群組聊天界面:
/**
* 啟動群組聊天界面。
*
* @param context 應(yīng)用上下文。
* @param targetGroupId 要聊天的群組 Id。
* @param title 聊天的標(biāo)題,開發(fā)者可以在聊天界面通過 intent.getData().getQueryParameter("title") 獲取該值, 再手動設(shè)置為標(biāo)題。
*/
RongIM.getInstance().startGroupChat(getActivity(), "9527", "標(biāo)題");
API 文檔鏈接:RongIM.getInstance().startGroupChat
客戶端的所有群組操作都需要請求您的 App Server, 您的 App Server 可以根據(jù)自己的邏輯進行管理和控制,然后通過 Server API 接口進行群組操作,并將結(jié)果返回給客戶端。
以下展示了客戶端進行群組操作的流程:
創(chuàng)建群組

加入群組

退出群組

解散群組

設(shè)置群組信息

獲取群組成員列表

獲取群組列表

聊天室
聊天室業(yè)務(wù)的描述,請參見新手指南中的說明。
聊天室與群組最大的不同在于,聊天室的消息沒有 Push 通知,也沒有成員的概念。想?yún)⑴c聊天室聊天,接收聊天室消息,加入聊天室即可;不參與聊天室聊天,不接收消息,退出聊天室即可。IMKit 組件中已經(jīng)內(nèi)置了加入和退出聊天室的接口調(diào)用,您直接啟動即可:
前提條件:
- RongIM.init(this),接口已經(jīng)執(zhí)行。
- RongIM.connect(....),接口已經(jīng)執(zhí)行且 onSuccess() 被回調(diào)。
- 會話 Activity 已經(jīng)在 AndroidManifest.xml 文件中,配置了對應(yīng)的 intent-filter,詳見配置說明文檔。
啟動聊天室界面:
/**
* <p>啟動聊天室會話。</p>
* <p>設(shè)置參數(shù) createIfNotExist 為 true,對應(yīng)到 kit 中調(diào)用的接口是
* {@link RongIMClient#joinChatRoom(String, int, RongIMClient.OperationCallback)}.
* 如果聊天室不存在,則自動創(chuàng)建并加入,如果回調(diào)失敗,則彈出 warning。</p>
* <p>設(shè)置參數(shù) createIfNotExist 為 false,對應(yīng)到 kit 中調(diào)用的接口是
* {@link RongIMClient#joinExistChatRoom(String, int, RongIMClient.OperationCallback)}.
* 如果聊天室不存在,則返回錯誤 {@link io.rong.imlib.RongIMClient.ErrorCode#RC_CHATROOM_NOT_EXIST},并且會話界面會彈出 warning.
* </p>
*
* @param context 應(yīng)用上下文。
* @param chatRoomId 聊天室 id。
* @param createIfNotExist 如果聊天室不存在,是否創(chuàng)建。
*/
public void startChatRoomChat(Context context, String chatRoomId, boolean createIfNotExist);
加入聊天室
加入聊天室,如果聊天室不存在,則創(chuàng)建聊天室并加入;如果已經(jīng)存在,則直接加入。
/**
* 加入聊天室。
* <p>如果聊天室不存在,sdk 會創(chuàng)建聊天室并加入,如果已存在,則直接加入</p>
* <p>加入聊天室時,可以選擇拉取聊天室消息數(shù)目。</p>
*
* @param chatroomId 聊天室 Id。
* @param defMessageCount 進入聊天室拉取消息數(shù)目,-1 時不拉取任何消息,0 時拉取 10 條消息,最多只能拉取 50 條。
* @param callback 狀態(tài)回調(diào)。
*/
public void joinChatRoom(final String chatroomId, final int defMessageCount, final RongIMClient.OperationCallback callback)
加入已經(jīng)存在的聊天室
/**
* 加入已存在的聊天室。
* <p>如果聊天室不存在,則加入失敗</p>
* <p>加入聊天室時,可以選擇拉取聊天室消息數(shù)目。</p>
*
* @param chatroomId 聊天室 Id。
* @param defMessageCount 進入聊天室拉取消息數(shù)目,-1 時不拉取任何消息,0 時拉取 10 條消息,最多只能拉取 50 條。
* @param callback 狀態(tài)回調(diào)。
*/
public void joinExistChatRoom(final String chatroomId, final int defMessageCount, final RongIMClient.OperationCallback callback)
聊天室拉取消息數(shù)設(shè)置:
進入聊天室時默認(rèn)拉取消息數(shù)為 10 條,根據(jù)需求可通過配置文件修改拉取消息條數(shù),建議拉取消息數(shù)不超過 50 條,請在 res/values/rc_config.xml 文件中修改,為 -1 表示不獲取任何歷史消息,0 表示不特殊設(shè)置而使用 SDK 默認(rèn)的設(shè)置(默認(rèn)為獲取10條),最大值為50。 xml 文件如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="rc_chatroom_first_pull_message_count">10</integer>
</resources>
如您在使用 IMLib 開發(fā)時注意,因聊天室沒有成員關(guān)系,需要在每次顯示聊天室聊天界面之前,執(zhí)行加入聊天室的操作,并在退出聊天室聊天界面之后執(zhí)行退出聊天室的操作。否則,您的 App 將消耗不必要的流量(不退出聊天室將會持續(xù)接收來自該聊天室的消息)。
系統(tǒng)會話
前提條件:
- RongIM.init(this),接口已經(jīng)執(zhí)行。
- RongIM.connect(....),接口已經(jīng)執(zhí)行且 onSuccess() 被回調(diào)。
- 會話 Activity 已經(jīng)在 AndroidManifest.xml 文件中,配置了對應(yīng)的 intent-filter,詳見配置說明文檔。
打開系統(tǒng)會話聊天界面:
/**
* 啟動系統(tǒng)會話聊天界面。
*
* @param context 應(yīng)用上下文。
* @param conversationType 開啟會話類型。
* @param targetId 目標(biāo) Id;
* @param title 聊天的標(biāo)題,開發(fā)者可以在聊天界面通過 intent.getData().getQueryParameter("title") 獲取該值, 再手動設(shè)置為標(biāo)題。
*/
RongIM.getInstance().startConversation(getActivity(), Conversation.ConversationType.SYSTEM, "9527", "標(biāo)題");
API 文檔鏈接:RongIM.getInstance().startConversation
系統(tǒng)會話消息由應(yīng)用服務(wù)端發(fā)送,客戶端只能接收消息,不能進行回復(fù)。
客服
詳細請參見客服集成文檔。
公眾號
融云公眾服務(wù)是為應(yīng)用開發(fā)者和公眾帳號運營者提供的連接服務(wù)產(chǎn)品,通過融云公眾服務(wù),App 可以具備為自己的用戶提供公眾帳號服務(wù)的能力和資源。
公眾服務(wù)包括:應(yīng)用公眾服務(wù)和公眾服務(wù)平臺。
應(yīng)用公眾服務(wù):是為應(yīng)用開發(fā)者提供的 App 內(nèi)建公眾服務(wù)能力,通過在融云開發(fā)者站點創(chuàng)建 App 公眾號,實現(xiàn)應(yīng)用內(nèi)的公眾服務(wù)。
公眾服務(wù)平臺:是在應(yīng)用開發(fā)者和公眾帳號運營者之間建立的對接平臺,應(yīng)用開發(fā)者可以通過平臺引入公眾服務(wù)資源,幫助 App 快速覆蓋用戶需求,公眾帳號持有者通過平臺可以有機會向所有集成融云 SDK 的 App 提供服務(wù),進而獲得更加精準(zhǔn)更加豐富的受眾渠道。
開發(fā)者可在 融云開發(fā)者平臺 的公眾服務(wù)模塊中,通過添加公眾服務(wù)或應(yīng)用公眾服務(wù)中的公眾號到自己的應(yīng)用中。
IMKit 組件中已經(jīng)內(nèi)置了訂閱和取消訂閱公眾號的接口調(diào)用,您直接啟動即可:
前提條件:
- RongIM.init(this),接口已經(jīng)執(zhí)行。
- RongIM.connect(....),接口已經(jīng)執(zhí)行且 onSuccess() 被回調(diào)。
- 會話 Activity 已經(jīng)在 AndroidManifest.xml 文件中,配置了對應(yīng)的 intent-filter,詳見配置說明文檔。
打開應(yīng)用公眾服務(wù)會話界面:
/**
* 啟動應(yīng)用公眾服務(wù)會話界面。
*
* @param context 應(yīng)用上下文。
* @param conversationType 開啟會話類型。
* @param targetId 目標(biāo) Id。
* @param title 聊天的標(biāo)題,開發(fā)者可以在聊天界面通過 intent.getData().getQueryParameter("title") 獲取該值, 再手動設(shè)置為標(biāo)題。
*/
RongIM.getInstance().startConversation(getActivity(), Conversation.ConversationType.APP_PUBLIC_SERVICE, "9527", "公眾帳號標(biāo)題");
API 文檔鏈接:RongIM.getInstance().startConversation
打開公眾服務(wù)號會話界面:
/**
* 啟動公眾服務(wù)號會話界面。
*
* @param context 應(yīng)用上下文。
* @param conversationType 開啟會話類型。
* @param targetId 目標(biāo) Id。
* @param title 聊天的標(biāo)題,開發(fā)者可以在聊天界面通過 intent.getData().getQueryParameter("title") 獲取該值, 再手動設(shè)置為標(biāo)題。
*/
RongIM.getInstance().startConversation(getActivity(), Conversation.ConversationType.PUBLIC_SERVICE, "9527", "公眾帳號標(biāo)題");
API 文檔鏈接:RongIM.getInstance().startConversation
打開應(yīng)用公眾服務(wù)信息界面:
/**
* 啟動應(yīng)用公眾服務(wù)信息界面。
*
* @param context 應(yīng)用上下文。
* @param conversationType 會話類型。
* @param targetId 目標(biāo) Id。
*/
RongIM.getInstance().startPublicServiceProfile(getActivity(), Conversation.ConversationType.APP_PUBLIC_SERVICE, "9527");
API 文檔鏈接:RongIM.getInstance().startPublicServiceProfile
打開公共服務(wù)號信息界面:
/**
* 啟動公共服務(wù)號信息界面。
*
* @param context 應(yīng)用上下文。
* @param conversationType 會話類型。
* @param targetId 目標(biāo) Id。
*/
RongIM.getInstance().startPublicServiceProfile(getActivity(), Conversation.ConversationType.PUBLIC_SERVICE, "9527");
API 文檔鏈接:RongIM.getInstance().startPublicServiceProfile
搜索公眾號
通過 searchPublicService 或 searchPublicServiceByType 方法搜索已經(jīng)添加的公眾號列表,可以按關(guān)鍵字精確匹配或模糊匹配方式進行搜索。
/**
* 搜索全部公眾服務(wù)。
*
* @param searchType 搜索類型枚舉。
* @param keywords 搜索關(guān)鍵字。
*/
RongIM.getInstance().searchPublicService(RongIMClient.SearchType.EXACT, keywords, new RongIMClient.SearchPublicServiceCallback() {
@Override
public void onError(RongIMClient.ErrorCode e) {
//錯誤回調(diào)處理
}
@Override
public void onSuccess(PublicServiceProfileList publicServiceProfileList) {
//成功回調(diào)處理
}
});
/**
* 按公眾服務(wù)類型搜索公眾服務(wù)。
*
* @param conversationType 會話類型。
* @param searchType 搜索類型枚舉。
* @param keywords 搜索關(guān)鍵字。
*/
RongIM.getInstance().searchPublicServicebyType(Conversation.PublicServiceType.PUBLIC_SERVICE, RongIMClient.SearchType.EXACT, keywords, new RongIMClient.SearchPublicServiceCallback() {
@Override
public void onError(RongIMClient.ErrorCode e) {
//錯誤回調(diào)處理
}
@Override
public void onSuccess(PublicServiceProfileList publicServiceProfileList) {
//成功回調(diào)處理
}
});
獲取己關(guān)注公共賬號列表:
在應(yīng)用中需要展示已關(guān)注公共賬號列表時,可通過 getPublicServiceList 方法獲取己關(guān)注公共賬號列表信息。
RongIM.getInstance().getPublicServiceList(new RongIMClient.SearchPublicServiceCallback() {
@Override
public void onSuccess(PublicServiceProfileList publicServiceProfileList) {
//成功回調(diào)處理
}
@Override
public void onError(RongIMClient.ErrorCode e) {
//錯誤回調(diào)處理
}
});
獲取某公眾號信息
/**
* 按公眾服務(wù)類型搜索公眾服務(wù)。
*
* @param publicServiceType 公眾服務(wù)類型。
* @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) {
//錯誤回調(diào)處理
}
});
草稿管理
保存草稿至某一會話
/**
* 根據(jù)消息類型,targetId 保存某一會話的文字消息草稿。用于暫存用戶輸入但未發(fā)送的消息。
*
* @param conversationType 會話類型。
* @param targetId 目標(biāo) Id。根據(jù)不同的 conversationType,可能是用戶 Id、群組 Id 或聊天室 Id。
* @param content 草稿的文字內(nèi)容。
* @param callback 是否保存成功的回調(diào)。
*/
public void saveTextMessageDraft(Conversation.ConversationType conversationType, String targetId, final String content, final ResultCallback<Boolean> callback)
獲取某會話里的草稿信息
/**
* 根據(jù)消息類型,targetId 獲取某一會話的文字消息草稿。用于獲取用戶輸入但未發(fā)送的暫存消息。
*
* @param conversationType 會話類型。
* @param targetId 目標(biāo) Id。根據(jù)不同的 conversationType,可能是用戶 Id、群組 Id 或聊天室 Id。
* @param callback 獲取草稿文字內(nèi)容的回調(diào)。
*/
public void getTextMessageDraft(final Conversation.ConversationType conversationType, final String targetId, final ResultCallback<String> callback)
注:這些草稿信息僅存儲于本地數(shù)據(jù)庫中,不會上傳服務(wù)器。