跳到主要内容

多端同步免打扰/置顶

SDK 提供了会话状态(置顶或免打扰)同步机制,通过设置会话状态同步监听器,当在其它端修改会话状态时,可在本端实时监听到会话状态的改变。

实现此功能需要遵守 RCConversationStatusChangeDelegate 协议。

设置代理委托

[[RCIMClient sharedRCIMClient] setRCConversationStatusChangeDelegate:self];

代理方法

@protocol RCConversationStatusChangeDelegate <NSObject>

/**
IMLib 会话状态同步的回调

@param conversationStatusInfos 改变过的会话状态的数组
*/
- (void)conversationStatusDidChange:(NSArray<RCConversationStatusInfo *> *)conversationStatusInfos;

@end

RCConversationStatusInfo 说明

参数类型说明
conversationTypeRCConversationType会话类型
targetIdNSString会话 ID
channelIdNSString所属会话的业务标识
conversationStatusTypeRCConversationStatusType会话状态改变的类型(RCConversationStatusType_Mute = 1//免打扰; RCConversationStatusType_Top = 2//置顶)
conversationStatusvalueint会话状态改变的值,详见 conversationStatusvalue 说明
notificationLevelRCPushNotificationLevel会话免打扰类型,详见 RCPushNotificationLevel 说明
  • conversationStatusvalue 说明

    • 如果 conversationStatusType == RCConversationStatusType_Mute,conversationStatusvalue = 1 是提醒,conversationStatusvalue = 0 是免打扰。

    • 如果 conversationStatusType == RCConversationStatusType_Top,conversationStatusvalue = 0 是不置顶,conversationStatusvalue = 1 是置顶。

  • RCPushNotificationLevel 说明

    当 conversationStatusType = RCConversationStatusType_Mute 时,notificationLevel 值为有效值。

    typedef NS_ENUM(NSInteger, RCPushNotificationLevel) {
    /*!
    全部消息通知(接收全部消息通知 -- 显示指定关闭免打扰功能)
    @discussion 超级群设置全部消息通知时
    @ 消息一定收到推送通知
    普通消息的推送频率受到超级群服务端默认推送频率设置的影响,无法做到所有普通消息都通知
    */
    RCPushNotificationLevelAllMessage = -1,
    /*!
    未设置(向上查询群或者APP级别设置),存量数据中0表示未设置
    */
    RCPushNotificationLevelDefault = 0,
    /*!
    群聊,超级群 @所有人 或者 @成员列表有自己 时通知;单聊代表消息不通知
    */
    RCPushNotificationLevelMention = 1,
    /*!
    群聊,超级群 @成员列表有自己时通知,@所有人不通知;单聊代表消息不通知
    */
    RCPushNotificationLevelMentionUsers = 2,
    /*!
    群聊,超级群 @所有人通知,其他情况都不通知;单聊代表消息不通知
    */
    RCPushNotificationLevelMentionAll = 4,
    /*!
    消息通知被屏蔽,即不接收消息通知
    */
    RCPushNotificationLevelBlocked = 5,
    };

示例代码

- (void)conversationStatusDidChange:(NSArray<RCConversationStatusInfo  *> *)conversationStatusInfos {

for (RCConversationStatusInfo *statusInfo in conversationStatusInfos) {
/*!
如果 conversationStatusType = RCConversationStatusType_Mute,conversationStatusvalue = 1 是提醒,conversationStatusvalue = 0 是免打扰。
*/
if (RCConversationStatusType_Mute == statusInfo.conversationStatusType) {
int blockStatus = statusInfo.conversationStatusvalue;//1 是提醒,0 是免打扰
}
/*!
如果 conversationStatusType = RCConversationStatusType_Top,conversationStatusvalue = 0 是不置顶,conversationStatusvalue = 1 是置顶。
*/
else if (RCConversationStatusType_Top == statusInfo.conversationStatusType) {
BOOL isTop = (statusInfo.conversationStatusvalue == 1);//0 是不置顶, 1 是置顶
}
}
}