融云IM整理(2)API

融云IM整理(2)API

消息管理部分

与融云断链后 接收消息的广播

自定义广播接收器
当您的应用处于后台运行或者和融云服务器 disconnect() 的时候,如果收到消息,融云 SDK 会以通知形式提醒您。所以您还需要自定义一个继承融云 PushMessageReceiver 的广播接收器,用来接收提醒通知。示例代码如图:

public class SealNotificationReceiver extends PushMessageReceiver {
    @Override
    public boolean onNotificationMessageArrived(Context context, PushNotificationMessage message) {
        return false; // 返回 false, 会弹出融云 SDK 默认通知; 返回 true, 融云 SDK 不会弹通知, 通知需要由您自定义。
    }

    @Override
    public boolean onNotificationMessageClicked(Context context, PushNotificationMessage message) {
        return false; // 返回 false, 会走融云 SDK 默认处理逻辑, 即点击该通知会打开会话列表或会话界面; 返回 true, 则由您自定义处理逻辑。
    }

}

插入消息 —— 可用于 (客服自动回复,红包领取提示 :XXX领取了你的红包)

insertMessage()
public void insertMessage(final Conversation.ConversationType type, final 

String targetId, final String senderUserId, final MessageContent content, final

long sentTime, final ResultCallback<Message> resultCallback

删除消息

clearMessages()
/**
 * 清空指定类型,targetId 的某一会话所有聊天消息记录。
 * @param conversationType 会话类型。不支持传入 ConversationType.CHATROOM。
 * @param targetId         目标 Id。根据不同的 conversationType,可能是用户 Id、群组 Id。
 * @param callback         清空是否成功的回调。
 */
public void clearMessages(final Conversation.ConversationType conversationType, final String targetId, final ResultCallback<Boolean> callback)

获取历史消息 (复写了很多的方法 处理各种场景)

getHistoryMessages()
  1. 获取某会话的本地历史消息记录,此接口可以通过指定最后一条消息和拉取条数来分段加载历史消息
    2.获取某一会话中特定类型消息的本地历史记录,比如可以通过此接口拉取会话中某一条消息之前的 10 条图片消息。
    3.获取会话中某条消息之前或者之后的 N 条特定类型消息的本地历史记录。比如,可以获取 messageId 为 22 的这条消息之前或者之后的 10 条图片消息。
    4.获取会话中指定消息之前 N 条 和之后 M 条的本地历史消息。

搜索消息

搜索符合消息的 会话列表
searchConversations()
搜索某个会话中 符合条件的消息
searchMessages()

监听接收所有消息

setOnReceiveMessageListener  
public static void setOnReceiveMessageListener(final OnReceiveMessageListener listener)

更改 消息 未读已读状态

clearMessagesUnreadStatus()

1.将会话中某个时间之前的消息由未读状态改为已读状态。

2.将某个会话中的所有消息设为已读。

3.根据 messageId 设置消息的各种状态,比如已读,已收听,已下载等。

实例:

// 更新内存中消息的已读状态
message.getReceivedStatus().setRead();
// 更新数据库中消息的状态
RongIMClient.getInstance().setMessageReceivedStatus(message.getMessageId(), message.getReceivedStatus(), null);

会话管理部分

获取会话

获取某个指定会话

根据类型和targeID

getConversation()

获取用户的所有本地会话列表 (私聊,群组,系统会话)

getConversationList( ResultCallback<List> callback )

获取某几种会话类型的会话列表

getConversationList(final ResultCallback<List> callback, final Conversation.ConversationType… conversationTypes)

分页拉取 本地会话列表

getConversationListByPage()

删除会话

removeConversation()

会话提醒状态 (提醒,或者免打扰)
    enum ConversationNotificationStatus {
    DO_NOT_DISTURB(0), // 会话免打扰状态
    NOTIFY(1); // 会话提醒状态
  }

setConversationNotificationStatus() //设置会话状态
getConversationNotificationStatus() //获取会话状态

会话草稿管理 (只在本地)

saveTextMessageDraft() //保存草稿
getTextMessageDraft() //过去草稿

会话置顶

setConversationToTop()

获取所有会话 未读消息总数

getTotalUnreadCount(final ResultCallback callback)

获取指定的某一条会话的未读消息数

getUnreadCount(final Conversation.ConversationType conversationType, final String targetId, final ResultCallback callback)

获取某几个会话 未读消息

getTotalUnreadCount(final ResultCallback callback, final Conversation… conversations)

获取一种 或 几种类型的会话未读消息数

getUnreadCount(final ResultCallback callback, final Conversation.ConversationType… conversationTypes)

黑名单

添加到黑名单

addToBlacklist()

从黑名单中移除

removeFromBlacklist()

查询用户是否在黑名单中

getBlacklistStatus()

	/**
 * 是否在黑名单中状态。
 */
public enum BlacklistStatus {

    /**
     * 在黑名单中。
     */
    IN_BLACK_LIST(0),

    /**
     * 不在黑名单中。
     */
    NOT_IN_BLACK_LIST(1);
  }
获取黑名单列表

getBlacklist()

消息体内 携带用户信息(以便快捷的实现用户信息)

String targetId = "1111";
TextMessage textMessage = TextMessage.obtain("test");

//设置用户信息方法一: 只在文本消息内设置携带的用户信息。其它类型的消息也可以用同样的方法单独设置。
textMessage.setUserInfo(getCurrentUserInfo());
// 构造 Message 对象
Message message = Message.obtain(targetId, Conversation.ConversationType.PRIVATE, textMessage);

// 设置用户信息方法二: 通过调用 MessageContent 的 setUserInfo() 方法, 设置所有类型的消息都携带用户信息。
message.getContent().setUserInfo(getCurrentUserInfo());
// 发送消息
RongIMClient.getInstance().sendMessage(message, null, null, new IRongCallback.ISendMessageCallback() {
    @Override
    public void onAttached(Message message) {

    }
    @Override
    public void onSuccess(Message message) {

    }
    @Override
    public void onError(Message message, RongIMClient.ErrorCode errorCode) {

    }
});

高级功能

消息撤回

recallMessage(final Message message, final RongIMClient.ResultCallback callback)

消息阅读回执

发送消息阅读回执

sendReadReceiptMessage() //单聊时发送回执

sendReadReceiptRequest() //群组时发送回执

接收消息监听
/**
 * 设置消息回执监听器
 * @param listener 消息回执监听器
 */
RongIMClient.setReadReceiptListener(new RongIMClient.ReadReceiptListener() {
   @Override
   public void onReadReceiptReceived(final Message message) {

	   /* if (mConversation != null && mConversation.getTargetId().equals(message.getTargetId()) && mConversation.getConversationType() == message.getConversationType()) {
	
	        ReadReceiptMessage content = (ReadReceiptMessage) message.getContent();
	        //获取发送时间戳
	        long ntfTime = content.getLastMessageSendTime();
	        //自行进行UI处理,把会话中发送时间戳之前的所有已发送消息状态置为已读 */
	

          //可以做 单聊时 修改成已读等 操作。
   }

   @Override
   public void onMessageReceiptRequest(Conversation.ConversationType type, String targetId, String messageUId) {
          //可以做 群聊时 的单聊已读效果
   }

   @Override
   public void onMessageReceiptResponse(Conversation.ConversationType type, String targetId, String messageUId, HashMap<String, Long> respondUserIdList) {

		  //可以做 群聊时  比如:企微 查看有谁看过我发的消息了这样的效果。 

   }
});

多端同步阅读状态

场景:电脑 、手机同时登陆,电脑上阅读完了,手机上的未读数也要清除。

/**
 * 同步阅读状态监听
 * 多端登录,收到其它端清除某一会话未读数通知的时候,回调 onSyncMessageReadStatus
 */
public interface SyncConversationReadStatusListener {
    void onSyncConversationReadStatus(Conversation.ConversationType type, String targetId);
}

RongIMClient.getInstance().setSyncConversationReadStatusListener(new RongIMClient.SyncConversationReadStatusListener() {
    @Override
    public void onSyncConversationReadStatus(Conversation.ConversationType type, String targetId) {
        //重新获取会话的未读数,并且显示到界面上
    }
});

输入状态提醒 (如:正在输入、正在讲话、正在拍摄等)

发送状态 (6秒钟只会 发送一次)
RongIMClient.getInstance().sendTypingStatus(mCurrentConversation.getConversationType(),
  mCurrentConversation.getTargetId(), objectName);
监听
RongIMClient.setTypingStatusListener(new RongIMClient.TypingStatusListener() {
@Override
public void onTypingStatusChanged(Conversation.ConversationType type, String targetId, Collection<TypingStatus> typingStatusSet) {
    //当输入状态的会话类型和targetID与当前会话一致时,才需要显示
    if (type.equals(mConversationType) && targetId.equals(mTargetId)) {
        //count表示当前会话中正在输入的用户数量,目前只支持单聊,所以判断大于0就可以给予显示了
        int count = typingStatusSet.size();
        if (count > 0) {
            Iterator iterator = typingStatusSet.iterator();
            TypingStatus status = (TypingStatus) iterator.next();
            String objectName = status.getTypingContentType();

            MessageTag textTag = TextMessage.class.getAnnotation(MessageTag.class);
            MessageTag voiceTag = VoiceMessage.class.getAnnotation(MessageTag.class);
            //匹配对方正在输入的是文本消息还是语音消息
            if (objectName.equals(textTag.value())) {
                //显示“对方正在输入”
                mHandler.sendEmptyMessage(SET_TEXT_TYPING_TITLE);
            } else if (objectName.equals(voiceTag.value())) {
                //显示"对方正在讲话"
                mHandler.sendEmptyMessage(SET_VOICE_TYPING_TITLE);
            }
        } else {
            //当前会话没有用户正在输入,标题栏仍显示原来标题
            mHandler.sendEmptyMessage(SET_TARGETID_TITLE);
        }
    }
 }
});

PS: 关于创建关系得 功能,实现都是在后台

在这里整理里我们项目中所需要的 API ,后续有时间在继续会完善。
发布了26 篇原创文章 · 获赞 6 · 访问量 7791

猜你喜欢

转载自blog.csdn.net/weixin_37558974/article/details/86605397