public class TIMConversation
extends java.lang.Object
限定符和类型 | 方法和说明 |
---|---|
void |
deleteLocalMessage(TIMCallBack callback)
删除当前会话的本地历史消息
|
void |
deleteMessages(java.util.List<TIMMessage> messages,
TIMCallBack callBack)
删除当前会话的本地及漫游消息
该接口会删除本地历史的同时也会把漫游消息即保存在服务器上的消息也删除,卸载重装后无法再拉取到。
|
void |
findMessages(java.util.List<TIMMessageLocator> locators,
TIMValueCallBack<java.util.List<TIMMessage>> cb)
根据提供的消息定位符查找相应消息
|
TIMMessageDraft |
getDraft()
获取未编辑完的草稿消息
|
java.util.List<TIMGroupAtInfo> |
getGroupAtInfoList() |
java.lang.String |
getGroupName()
获取群名称
获取群名称,只有群会话有效。
|
TIMMessage |
getLastMsg()
获取当前会话的最后一条消息
可用于“装饰”会话列表,目前大多数 App 的会话列表中都会显示该会话的最后一条消息
|
void |
getLocalMessage(int count,
TIMMessage lastMsg,
TIMValueCallBack<java.util.List<TIMMessage>> callback)
从本地数据库中获取历史消息
如果客户网络异常或登录失败,可以通过该接口获取本地存储的历史消息,调用方法和 getMessage() 一致
注意:AVChatRoom,BChatRoom 消息数量很大,出于程序性能的考虑,默认不存本地,不能通过这个接口拉取到对应群消息
|
void |
getMessage(int count,
TIMMessage lastMsg,
TIMValueCallBack<java.util.List<TIMMessage>> callback)
从云端拉取历史消息
如果用户的网络正常且登录成功,可以通过该接口拉取历史消息,该接口会返回云端存储的历史消息(最多存储7天)。
|
java.lang.String |
getPeer()
获取会话 ID
C2C:对方账号;Group:群组Id。
|
TIMConversationType |
getType()
获取会话类型
|
long |
getUnreadMessageNum()
获取会话的未读消息计数
1.
|
boolean |
hasDraft()
当前会话是否存在草稿
|
int |
importMsg(java.util.List<TIMMessage> msgs)
将消息导入本地数据库
|
void |
revokeMessage(TIMMessage msg,
TIMCallBack cb)
撤回一条已发送的消息(消息发送后)
1.
|
int |
saveMessage(TIMMessage msg,
java.lang.String sender,
boolean isReaded)
向本地消息列表中添加一条消息,但并不将其发送出去。
|
void |
sendMessage(TIMMessage msg,
TIMValueCallBack<TIMMessage> callback)
发送消息
TIMMessage 由多个 TIMElem 组成,一个 TIMElem 可以是一串文本,也可以是一张图片。
|
void |
sendOnlineMessage(TIMMessage msg,
TIMValueCallBack<TIMMessage> callback)
发送在线消息(无痕消息)
“在线消息”,也可以称为是“无痕消息”。
|
void |
setDraft(TIMMessageDraft draft)
添加未编辑完的草稿消息
在发送消息时,常常会遇到尚未编辑完毕就要切换到其它聊天窗口的情况,这些未编辑完的消息就可以通过 setDraft() 接口存储到草稿箱中。
|
void |
setReadMessage(TIMMessage msg,
TIMCallBack callback)
标记消息为已读状态
该接口会标记当前消息以及之前的所有消息为已读状态,标记消息为已读状态会有两个作用:
1. |
public void sendMessage(@NonNull TIMMessage msg, TIMValueCallBack<TIMMessage> callback)
TIMMessage 由多个 TIMElem 组成,一个 TIMElem 可以是一串文本,也可以是一张图片。 虽然说每一条消息都可以包含多个 TIMElem,但这个并不常用,通常您只需要在一个 TIMMessage 塞入一个 TIMElem 即可。
详情请参考官网文档 https://cloud.tencent.com/document/product/269/9232
msg
- 消息callback
- 回调public void sendOnlineMessage(@NonNull TIMMessage msg, TIMValueCallBack<TIMMessage> callback)
“在线消息”,也可以称为是“无痕消息”。跟普通消息的区别在于:在线消息不会被云服务存储,也不会存储于本地数据库中。 如果接收者在线,可以收到消息,但如果接收者离线,重新上线后也不能通过 getMessage() 接口从历史消息里查到它们。
该类型消息比较适合用作发送广播通知等不重要的提示消息。
1. 在线消息不会被计入未读计数
2. 暂不支持在 AVChatRoom 和 BChatRoom 中发送。
msg
- 消息callback
- 回调public void getMessage(int count, TIMMessage lastMsg, TIMValueCallBack<java.util.List<TIMMessage>> callback)
如果用户的网络正常且登录成功,可以通过该接口拉取历史消息,该接口会返回云端存储的历史消息(最多存储7天)。
1. 单聊和群聊消息会在云端免费存储7天,如果希望存储更长时间,可前往 ([IM 控制台](https://console.cloud.tencent.com/avc) -> 功能配置 -> 消息 ->消息漫游时长)进行购买, 具体资费请参考 [价格说明](https://cloud.tencent.com/document/product/269/11673)。
2. 对于图片、语音等资源类消息,获取到的消息体只会包含描述信息,需要通过额外的接口下载数据, 详情请参考 [消息收发](https://cloud.tencent.com/document/product/269/9232)中的 "消息解析" 部分文档。
count
- 从最后一条消息往前的消息数lastMsg
- 已取得的最后一条消息callback
- 回调, 参数中返回获取的消息列表public void getLocalMessage(int count, TIMMessage lastMsg, TIMValueCallBack<java.util.List<TIMMessage>> callback)
如果客户网络异常或登录失败,可以通过该接口获取本地存储的历史消息,调用方法和 getMessage() 一致
注意:AVChatRoom,BChatRoom 消息数量很大,出于程序性能的考虑,默认不存本地,不能通过这个接口拉取到对应群消息
count
- 从最后一条消息往前的消息条数lastMsg
- 已获取的最后一条消息, 为null时表示最新一条消息callback
- 回调, 参数中返回获取的消息列表public TIMMessage getLastMsg()
可用于“装饰”会话列表,目前大多数 App 的会话列表中都会显示该会话的最后一条消息
public java.util.List<TIMGroupAtInfo> getGroupAtInfoList()
public void setReadMessage(TIMMessage msg, TIMCallBack callback)
该接口会标记当前消息以及之前的所有消息为已读状态,标记消息为已读状态会有两个作用:
1. 已经被标记为已读的消息不会重复提醒,下次登录或者换一台终端设备登录 IM 时,都不会再次收到该消息的未读提醒。
2. 如果发送者通过 TIMUserConfig -> enableReadReceipt 开启了 “被阅回执”,接收者在标记已读状态时,发送者会收到“被阅提醒”。
注意: 该接口尚不支持标记单独一条消息,只能标记一批。即标记当前一条消息,之前的消息也会全被标记为已读状态。
msg
- 最后一条已读的消息, 传null表示将当前会话的所有消息标记为已读callback
- 回调public long getUnreadMessageNum()
1. 同一个终端登录,在未卸载 APP 的情况下,您可以通过当前接口获取的未读消息的个数。
2. 如果希望换一台终端也能取到同样的未读计数提醒,或者卸载 APP 再重装,未读计数提醒还能保留卸载前的状态,
就需要设置 TIMUserConfig 的 disableAutoReport 为 YES,这样可以开启多终端同步未读提醒。
详情参考 [未读消息计数](https://cloud.tencent.com/document/product/269/9226)
public void revokeMessage(@NonNull TIMMessage msg, TIMCallBack cb)
1. 消息撤回的有效时间为2分钟,即消息发出2分钟后不能再撤回。
2. 仅支持 C2C 会话和 GROUP 会话中发送的消息,无法撤销 OnlineMessage,也无法撤销 AVChatRoom 和 BChatRoom 中的消息。
3. 您需要在 TIMUserConfig -> TIMMessageRevokeListener 监听 onRevokeMessage() 消息撤回回调,
如果消息撤回成功,消息的接收方会收到一次 onRevokeMessage:(TIMMessageLocator*) 回调,TIMMessageLocator 相当于一条消息的定位标志。
您可以在已收到的历史消息里进行遍历,通过 TIMMessage 中的 checkEquals() 接口进行比对,以便定位到该条消息。
msg
- 需要撤回的消息cb
- 回调public void deleteLocalMessage(TIMCallBack callback)
callback
- 回调public void deleteMessages(java.util.List<TIMMessage> messages, TIMCallBack callBack)
该接口会删除本地历史的同时也会把漫游消息即保存在服务器上的消息也删除,卸载重装后无法再拉取到。需要注意的是:
一次最多只能删除 30 条消息
一秒钟最多只能调用一次
如果该账号在其他设备上拉取过这些消息,那么调用该接口删除后,这些消息仍然会保存在那些设备上,即删除消息不支持多端同步。
public TIMConversationType getType()
public java.lang.String getPeer()
C2C:对方账号;Group:群组Id。
对同一个单聊或则群聊会话,getReceiver 获取的会话 ID 都是固定的,C2C 获取的是对方账号,Group 获取的是群组 Id。
public java.lang.String getGroupName()
获取群名称,只有群会话有效。
public TIMMessageDraft getDraft()
public void setDraft(TIMMessageDraft draft)
在发送消息时,常常会遇到尚未编辑完毕就要切换到其它聊天窗口的情况,这些未编辑完的消息就可以通过 setDraft() 接口存储到草稿箱中。 草稿信息会存本地数据库,重新登录后依然可以获取。
draft
- 草稿内容, 为 null 则表示取消草稿public boolean hasDraft()
public int saveMessage(@NonNull TIMMessage msg, @NonNull java.lang.String sender, boolean isReaded)
该接口主要用于满足向聊天会话中插入一些提示性消息的需求,比如“您已经退出该群”,这类消息有展示 在聊天消息区的需求,但并没有发送给其他人的必要。 所以 saveMessage() 相当于一个被禁用了网络发送能力的 sendMessage() 接口。
msg
- 消息体sender
- 发送方isReaded
- 是否已读,如果发送方是自己,默认已读public int importMsg(@NonNull java.util.List<TIMMessage> msgs)
msgs
- 待导入消息列表,消息必须处理导入状态public void findMessages(@NonNull java.util.List<TIMMessageLocator> locators, TIMValueCallBack<java.util.List<TIMMessage>> cb)
locators
- 消息定位符cb
- 回调,返回查找到的消息