群组功能


群组功能概述

群组功能对应的管理类为 NIMTeamManagerNIMTeamManager 提供了普通群 (Normal) 以及高级群 (Advanced) 两种形式的群聊功能。高级群拥有更多的权限操作,两种群聊形式在共有操作上保持了接口一致。推荐 APP 开发时只选择一种群类型进行开发。普通群和高级群在原则上是不能互相转换的,他们的群类型在创建时就已经确定。在 SDK 2.4.0 版本后,高级群可以拥有普通群的全部功能,推荐使用高级群进行开发。

开发手册中所提及的普通群都等同于 Demo 中的讨论组。普通群没有权限操作,适用于快速创建多人会话的场景。每个普通群只有一个管理员。管理员可以对群进行增减员操作,普通成员只能对群进行增员操作。在添加新成员的时候,并不需要经过对方同意。

高级群在权限上有更多的限制,权限分为群主、管理员、以及群成员。

获取群组

NIM SDK 在程序启动时会对本地群信息进行同步,所以只需要调用本地缓存接口获取群就可以了。 SDK 提供了批量获取自己的群接口、以及根据单个群 id 查询的接口。同样 SDK 也提供了远程获取群信息的接口。

本地获取

本地获取所有群组

原型

@protocol NIMTeamManager <NSObject>
/**
 *  获取所有群组
 *
 *  @return 返回所有群组
 */
- (nullable NSArray<NIMTeam *> *)allMyTeams;
@end

本地根据群 Id 获取群组

@protocol NIMTeamManager <NSObject>
/**
 *  根据群组ID获取具体的群组信息
 *
 *  @param teamId 群组ID
 *
 *  @return 群组信息
 */
- (nullable NIMTeam *)teamById:(NSString *)teamId;
@end

参数列表

参数 类型 说明
teamId NSString 群组 ID

由于同步策略只会同步自己所在的群。对于和登录用户无关的群,需要调用远程接口进行获取

@protocol NIMTeamManagerDelegate <NSObject>
/**
 *  获取群信息
 *
 *  @param teamId      群组ID
 *  @param completion  完成后的回调
 */
- (void)fetchTeamInfo:(NSString *)teamId
           completion:(nullable NIMTeamFetchInfoHandler)completion;
@end

参数列表

参数 类型 说明
teamId NSString 群组 ID
completion NIMTeamFetchInfoHandler 请求完成回调

如果获取的群是属于自己的群的话,则会更新本地缓存的群数据。

创建群组

@protocol NIMTeamManager <NSObject>
/**
 *  创建群组
 *
 *  @param option     创建群选项
 *  @param users      用户ID列表
 *  @param completion 完成后的回调
 */
- (void)createTeam:(NIMCreateTeamOption *)option
              users:(NSArray<NSString *> *)users
         completion:(nullable NIMTeamCreateHandler)completion
@end

option 提供以参数信息

参数 类型 说明
name NSString 群名
type NIMTeamType 群类型
intro NSString 群简介
announcement NSString 群公告
clientCustomInfo NSString 客户端自定义信息
postscript NSString 邀请他人的附言,高级群有效,普通群无需附言
joinMode NIMTeamJoinMode 群验证模式。高级群有效,默认为 NIMTeamJoinModeNoAuth
inviteMode NIMTeamInviteMode 群邀请权限,只有高级群有效,默认为 NIMTeamInviteModeManager
beInviteMode NIMTeamBeInviteMode 被邀请模式,只有高级群有效,默认为 NIMTeamBeInviteModeNeedAuth
updateInfoMode NIMTeamUpdateInfoMode 修改群信息权限,只有高级群有效,默认为 NIMTeamUpdateInfoModeManager
updateClientCustomMode NIMTeamUpdateClientCustomMode 修改群客户端自定义字段权限。只有高级群有效,默认为 NIMTeamUpdateClientCustomModeManager

加入群组

用户可以通过被动接受邀请和主动加入两种方式进入群组。

邀请用户入群

@protocol NIMTeamManager <NSObject>
/**
 *  邀请用户入群
 *
 *  @param users       用户 ID 列表
 *  @param teamId      群组 ID
 *  @param postscript  邀请附言
 *  @param completion  完成后的回调
 */
- (void)addUsers:(NSArray<NSString *>  *)users
          toTeam:(NSString *)teamId
      postscript:(NSString *)postscript
      completion:(nullable NIMTeamMemberHandler)completion;

@end

参数列表

参数 类型 说明
users NSArray 用户 ID 列表
teamId NSString 群组 ID
postscript NSString 邀请附言
completion NIMTeamMemberHandler 完成后的回调

请求完成后,如果是普通群,被邀请者将直接入群;如果是高级群,云信服务器会下发一条系统消息到目标用户,目标用户可以选择同意或者拒绝入群。

目标用户通过注册 NIMSystemNotificationManager 的监听

//注册
- (void)addListener
{
...
[[NIMSDK sharedSDK].systemNotificationManager addDelegate:self];
...
}

//监听
- (void)onReceiveSystemNotification:(NIMSystemNotification *)notification
{
   //balabala
}

会收到一条系统通知 NIMSystemNotification, 其类型属性 typeNIMSystemNotificationTypeTeamInvite。在通知中,可以获取如下信息

参数列表

参数 类型 说明
sourceID NSString 邀请人 ID
targetID NSString 邀请进入的群组 ID
postscript NSString 邀请附言

同意群邀请(仅限高级群)

@protocol NIMTeamManager <NSObject>
/**
 *  接受入群邀请
 *
 *  @param teamId     群组 ID
 *  @param invitorId  邀请者 ID
 *  @param completion 完成后的回调
 */
- (void)acceptInviteWithTeam:(NSString*)teamId
                   invitorId:(NSString*)invitorId
                  completion:(NIMTeamHandler)completion
@end

参数列表

参数 类型 说明
teamId NSString 群组 ID
invitorId NSString 邀请者 ID
completion NIMTeamHandler 完成后的回调

同意群邀请后,会自动加入进群组,并在群组中产生一条群通知消息

群通知消息解析过程示例

    //通过回调收到 NIMMessage,变量名为 message    
    NIMNotificationObject *object = message.messageObject;
    if (message.messageType == NIMMessageTypeNotification && object.notificationType == NIMNotificationTypeTeam)
    {
        //群通知消息解析
        NIMTeamNotificationContent *content = (NIMTeamNotificationContent*)object.content;

        //对群通知的具体内容 NIMTeamNotificationContent 进行业务
        ...
    }

拒绝群邀请(仅限高级群)

/**
 *  拒绝入群邀请
 *
 *  @param teamId       群组ID
 *  @param invitorId    邀请者ID
 *  @param rejectReason 拒绝原因
 *  @param completion   完成后的回调
 */
- (void)rejectInviteWithTeam:(NSString*)teamId
                   invitorId:(NSString*)invitorId
                rejectReason:(NSString*)rejectReason
                  completion:(NIMTeamHandler)completion

参数列表

参数 类型 说明
teamId NSString 群组 ID
invitorId NSString 邀请者 ID
rejectReason NSString 拒绝原因
completion NIMTeamHandler 完成后的回调

拒绝群邀请后,邀请人会收到一条系统通知 NIMSystemNotification, type 值为 NIMSystemNotificationTypeTeamApplyReject

主动申请入群(仅限高级群)

@protocol NIMTeamManager <NSObject>
/**
 *  群申请
 *
 *  @param teamId     群组 ID
 *  @param message    申请消息
 *  @param completion 完成后的回调
 */
- (void)applyToTeam:(NSString *)teamId
            message:(NSString *)message
         completion:(NIMTeamApplyHandler)block
@end

参数列表

参数 类型 说明
teamId NSString 群组 ID
message NSString 申请消息
completion NIMTeamApplyHandler 完成后的回调

请求完成后,云信服务器会下发一条系统消息 NIMSystemNotification, type 值为 NIMSystemNotificationTypeTeamApply 给群管理员。

管理员可以选择通过或者拒绝申请。

通过申请(仅限高级群)

@protocol NIMTeamManager <NSObject>
/**
 *  通过群申请
 *
 *  @param teamId       群组ID
 *  @param userId       申请的用户 ID
 *  @param completion   完成后的回调
 */
- (void)passApplyToTeam:(NSString *)teamId
                 userId:(NSString *)userId
             completion:(NIMTeamApplyHandler)block
@end

参数列表

参数 类型 说明
teamId NSString 群组 ID
userId NSString 用户 ID
completion NIMTeamApplyHandler 完成后的回调

通过申请后,会自动加入进群组,并在群组中产生一条群通知消息 ( 和上述 同意群邀请 表现一致 )

拒绝申请(仅限高级群)

@protocol NIMTeamManager <NSObject>
/**
 *  拒绝群申请
 *
 *  @param teamId       群组ID
 *  @param userId       申请的用户ID
 *  @param rejectReason 拒绝理由
 *  @param completion   完成后的回调
 */
- (void)rejectApplyToTeam:(NSString *)teamId
                   userId:(NSString *)userId
             rejectReason:(NSString *)rejectReason
               completion:(NIMTeamHandler)block
@end

请求完成后,云信服务器会下发一条系统消息 NIMSystemNotification, type 值为 NIMSystemNotificationTypeTeamIviteReject 给申请者。

编辑群组资料

普通成员可以修改自己的群资料,管理员以上权限的群成员可以修改他人群资料以及群组信息。当修改完群组资料后,会收到一条类型为 群组资料变更 (NIMTeamNotificationContent) 的群组通知消息,具体可参考 群组通知

具体包括:

修改群成员昵称

@protocol NIMTeamManager <NSObject>
/**
 *  更新成员群昵称
 *
 *  @param userId       群成员ID
 *  @param newNick      新的群成员昵称
 *  @param teamId       群组ID
 *  @param completion   完成后的回调
 */
- (void)updateUserNick:(NSString *)userId
               newNick:(NSString *)newNick
                inTeam:(NSString *)teamId
            completion:(NIMTeamHandler)completion
@end

参数列表

参数 类型 说明
userId NSString 用户 ID
newNick NSString 新的群成员昵称
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

修改群名称

@protocol NIMTeamManager <NSObject>
/**
 *  更新群组名称
 *
 *  @param teamName   群组名称
 *  @param teamId     群组ID
 *  @param completion 完成后的回调
 */
- (void)updateTeamName:(NSString *)teamName
                teamId:(NSString *)teamId
            completion:(NIMTeamHandler)completion
@end

参数列表

参数 类型 说明
teamName NSString 群组名称
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

修改群头像

@protocol NIMTeamManager <NSObject>
/**
 *  更新群组头像
 *
 *  @param teamAvatarUrl 群组头像 Url
 *  @param teamId        群组ID
 *  @param completion    完成后的回调
 */
- (void)updateTeamAvatar:(NSString *)teamAvatarUrl
                  teamId:(NSString *)teamId
              completion:(NIMTeamHandler) completion
@end

参数列表

参数 类型 说明
teamAvatarUrl NSString 群组头像 Url
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

修改群介绍

@protocol NIMTeamManager <NSObject>
/**
 *  更新群介绍
 *
 *  @param intro       群介绍
 *  @param teamId      群组ID
 *  @param completion  完成后的回调
 */
- (void)updateTeamIntro:(NSString *)intro
                 teamId:(NSString *)teamId
             completion:(NIMTeamHandler)block
@end

参数列表

参数 类型 说明
intro NSString 群介绍
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

修改群公告

@protocol NIMTeamManager <NSObject>
/**
 *  更新群公告
 *
 *  @param announcement 群公告
 *  @param teamId       群组ID
 *  @param completion   完成后的回调
 */
- (void)updateTeamAnnouncement:(NSString *)announcement
                        teamId:(NSString *)teamId
                    completion:(NIMTeamHandler)completion
@end

参数列表

参数 类型 说明
announcement NSString 群公告
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

修改群验证方式

@protocol NIMTeamManager <NSObject>
/**
 *  更新群组验证方式
 *
 *  @param joinMode   验证方式
 *  @param teamId     群组ID
 *  @param completion 完成后的回调
 */
- (void)updateTeamJoinMode:(NIMTeamJoinMode)joinMode
                    teamId:(NSString *)teamId
                completion:(NIMTeamHandler)completion
@end

参数列表

参数 类型 说明
joinMode NIMTeamJoinMode 验证方式
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

修改被邀请人验证方式

@protocol NIMTeamManager <NSObject>
/**
 *  更新群组被邀请人验证方式
 *
 *  @param beInviteMode 邀请方式
 *  @param teamId       群组ID
 *  @param completion   完成后的回调
 */
- (void)updateTeamBeInviteMode:(NIMTeamBeInviteMode)beInviteMode
                        teamId:(NSString *)teamId
                    completion:(NIMTeamHandler)completion;
@enc

参数列表

参数 类型 说明
beInviteMode NIMTeamBeInviteMode 邀请方式
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

修改谁可以邀请其他人入群

@protocol NIMTeamManager <NSObject>
/**
 *  更新群组邀请他人方式
 *
 *  @param inviteMode  邀请方式
 *  @param teamId      群组ID
 *  @param completion  完成后的回调
 */
- (void)updateTeamInviteMode:(NIMTeamInviteMode)inviteMode
                      teamId:(NSString *)teamId
                  completion:(NIMTeamHandler)completion
@end

参数列表

参数 类型 说明
inviteMode NIMTeamInviteMode 邀请方式
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

修改谁可以修改群资料

@protocol NIMTeamManager <NSObject>
/**
 *  更改群组更新信息的权限
 *
 *  @param updateInfoMode 修改谁有权限更新群组信息
 *  @param teamId         群组ID
 *  @param completion     完成后的回调
 */
- (void)updateTeamUpdateInfoMode:(NIMTeamUpdateInfoMode)updateInfoMode
                          teamId:(NSString *)teamId
                      completion:(NIMTeamHandler)block
@end

参数列表

参数 类型 说明
updateInfoMode NIMTeamUpdateInfoMode 修改谁有权限更新群组信息
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

修改谁可以修改群自定义属性

@protocol NIMTeamManager <NSObject>
/**
 *  更改群组更新自定义字段的权限
 *
 *  @param clientCustomMode 修改谁有权限更新群组自定义字段
 *  @param teamId           群组ID
 *  @param completion       完成后的回调
 */
- (void)updateTeamUpdateClientCustomMode:(NIMTeamUpdateClientCustomMode)clientCustomMode
                                  teamId:(NSString *)teamId
                              completion:(NIMTeamHandler)block
@end

参数列表

参数 类型 说明
clientCustomMode NIMTeamUpdateClientCustomMode 修改谁有权限更新群组自定义字段
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

管理群组权限

高级群群主可以对群进行权限管理,权限管理包括:

提升管理员

@protocol NIMTeamManager <NSObject>
/**
 *  添加管理员
 *
 *  @param teamId      群组ID
 *  @param users       需要添加为管理员的用户ID列表
 *  @param completion  完成后的回调
 */
- (void)addManagersToTeam:(NSString *)teamId
                    users:(NSArray<NSString *>  *)users
               completion:(NIMTeamHandler)completion
@end

参数列表

参数 类型 说明
clientCustomMode NIMTeamUpdateClientCustomMode 修改谁有权限更新群组自定义字段
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

移除管理员

@protocol NIMTeamManager <NSObject>
/**
 *  移除管理员
 *
 *  @param teamId     群组 ID
 *  @param users      需要移除管理员的用户ID列表
 *  @param completion 完成后的回调
 */
- (void)removeManagersFromTeam:(NSString *)teamId
                         users:(NSArray<NSString *>  *)users
                    completion:(NIMTeamHandler)completion

@end

参数列表

参数 类型 说明
teamId NSString 群组 ID
users NSArray 需要移除管理员的用户 ID 列表
completion NIMTeamHandler 完成后的回调

转让群

@protocol NIMTeamManager <NSObject>
/**
 *  移交群主
 *
 *  @param teamId     群组 ID
 *  @param newOwnerId 新群主 ID
 *  @param isLeave    是否同时离开群组
 *  @param completion 完成后的回调
 */
- (void)transferManagerWithTeam:(NSString *)teamId
                     newOwnerId:(NSString *)newOwnerId
                        isLeave:(BOOL)isLeave
                     completion:(NIMTeamHandler)block
@end

参数列表

参数 类型 说明
teamId NSString 群组 ID
newOwnerId NSString 新群主 ID
isLeave BOOL 是否同时离开群组
completion NIMTeamHandler 完成后的回调

群组成员

群组成员信息不同于用户资料,主要是和群组关联的信息。同一个用户在不同群组中自己的群成员信息也不一样。群成员信息包括群昵称,进群时间,群成员类型等等。

原型

@interface NIMTeamMember : NSObject
/**
 *  群ID
 */
@property (nullable,nonatomic,copy,readonly)         NSString *teamId;

/**
 *  群成员ID
 */
@property (nullable,nonatomic,copy,readonly)         NSString *userId;

/**
 *  邀请者ID
 *  @dicusssion 此字段仅当该成员为自己时有效。不允许查看其他群成员的邀请者
 */
@property (nullable,nonatomic,copy,readonly)         NSString *invitor;

/**
 *  群成员类型
 */
@property (nonatomic,assign)                NIMTeamMemberType  type;


/**
 *  群昵称
 */
@property (nullable,nonatomic,copy)         NSString *nickname;


/**
 *  被禁言
 */
@property (nonatomic,assign,readonly)       BOOL isMuted;

/**
 *  进群时间
 */
@property (nonatomic,assign,readonly)       NSTimeInterval createTime;


/**
 *  新成员群自定义信息
 */
@property (nullable,nonatomic,copy)        NSString *customInfo;

@end

属性列表

参数 类型 说明
teamId NSString 群组ID
userId NSString 群成员 ID
invitor NSString 邀请者 ID,此字段仅当该成员为自己时有效。不允许查看其他群成员的邀请者
type NIMTeamMemberType 群成员类型
nickname NSString 群昵称
isMuted BOOL 是否被禁言
createTime NSTimeInterval 进群时间
customInfo NSString 新成员群自定义信息

对于群成员, SDK 不保证有本地数据,每次登录会同步所在群的群成员。对于同步或主动远程获取过的群成员,SDK会把数据缓存在本地。

当本地缓存群成员资料发生变动时,会通过 NIMTeamManagerDelegate 的回调通知上层,详见群组委托

获取群成员

@protocol NIMTeamManager <NSObject>
/**
 *  获取群组成员
 *
 *  @param teamId     群组ID
 *  @param completion 完成后的回调
 */
- (void)fetchTeamMembers:(NSString *)teamId
              completion:(NIMTeamMemberHandler)completion
@end

参数列表

参数 类型 说明
teamId NSString 群组 ID
completion NIMTeamMemberHandler 完成后的回调

绝大多数情况这个请求都是从本地读取缓存并同步返回,但是由于群成员信息量较大, SDK 采取的是登录后延迟拉取的策略。考虑到用户网络等问题, SDK 有可能没有及时缓存群成员信息,那么这个请求将是个带网络请求的异步操作(增量请求)。同时这个接口会去请求本地没有缓存的群用户的资料信息,但不会触发 - (void)onUserInfoChanged: 回调。

获取到的群成员只有云信服务器托管的群相关数据,需要开发者结合自己管理的用户数据进行界面显示。

修改自己的群成员自定义属性

@protocol NIMTeamManager <NSObject>
/**
 *  更新成员群自定义属性
 *
 *  @param newInfo      新的自定义属性
 *  @param teamId       群组ID
 *  @param completion   完成后的回调
 */
- (void)updateMyCustomInfo:(NSString *)newInfo
                    inTeam:(NSString *)teamId
                completion:(NIMTeamHandler)completion
@end

参数列表

参数 类型 说明
newInfo NSString 新的自定义属性
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

修改后,其他在线用户自动同步获得修改后的属性。

用户退群

@protocol NIMTeamManager <NSObject>
/**
 *  退出群组
 *
 *  @param teamId     群组ID
 *  @param completion 完成后的回调
 */
- (void)quitTeam:(NSString *)teamId
      completion:(NIMTeamHandler)completion
@end

参数列表

参数 类型 说明
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

用户退群成功后,相关会话信息仍然会保留,但不再能接收关于此群的消息。

禁言用户

@protocol NIMTeamManager <NSObject>
/**
 *  群成员禁言
 *
 *  @param mute        是否禁言
 *  @param userId      用户ID
 *  @param teamId      群组ID
 *  @param completion  经验操作完成后的回调
 */
- (void)updateMuteState:(BOOL)mute
                 userId:(NSString *)userId
                 inTeam:(NSString *)teamId
             completion:(NIMTeamHandler)block
@end

禁言用户后,云信服务器会下发一条提示该用户被禁言的群组通知消息。

参数列表

参数 类型 说明
mute BOOL 是否禁言
userId NSString 用户 ID
teamId BOOL 群组 ID
completion NIMTeamHandler 完成后的回调

踢出用户

@protocol NIMTeamManager <NSObject>
/**
 *  从群组内移除成员
 *
 *  @param users       需要移除的用户ID列表
 *  @param teamId      群组ID
 *  @param completion  完成后的回调
 */
- (void)kickUsers:(NSArray<NSString *> *)users
         fromTeam:(NSString *)teamId
       completion:(NIMTeamHandler)completion
@end

被踢出的用户相关会话信息仍然会保留,但不再能接收关于此群的消息。

参数列表

参数 类型 说明
users NSArray 需要移除的用户ID列表
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

解散群

@protocol NIMTeamManager <NSObject>
/**
 *  解散群组
 *
 *  @param teamId      群组ID
 *  @param completion  完成后的回调
 */
- (void)dismissTeam:(NSString*)teamId
         completion:(NIMTeamHandler)block
@end

参数列表

参数 类型 说明
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

群解散后,所有群用户关于此群会话会被保留,但是不能能够在此群会话里收发消息。

群组委托

用户的群信息会在以下条件下更新:

这些操作成功后,云信服务器会推送一条群通知,同时触发 SDK 更新群信息的委托事件:

@protocol NIMTeamManagerDelegate <NSObject>
/**
 *  群组更新回调
 *
 *  @param team 更新的群组
 */
- (void)onTeamUpdated:(NIMTeam *)team
@end

用户的群信息会在以下条件下移除:

这些操作成功后,云信服务器同样会推送一条群通知,同时触发 SDK 更新群信息的委托事件:

@protocol NIMTeamManagerDelegate <NSObject>
/**
 *  群组移除回调
 *
 *  @param team 被移除的群组
 */
- (void)onTeamRemoved:(NIMTeam *)team
@end

用户的群成员信息会在以下条件下更新

这些操作成功后,云信服务器同样会推送一条群通知,同时触发 SDK 更新群信息的委托事件:

@protocol NIMTeamManagerDelegate <NSObject>
/**
 *  群组成员变动回调,包括数量增减以及成员属性变动
 *
 *  @param team 变动的群组
 */
- (void)onTeamMemberChanged:(NIMTeam *)team;
@end

群组通知

群组通知是一种消息类型 ( NIMMessageTypeNotification ) ,用户在创建群或者进入群成功之后,任何关于群的变动,云信服务器都会下发一条群通知消息。群通知消息和其他消息一样,可从 NIMConversationManager 提供的消息查询接口中获取。

群组通知内容 NIMTeamNotificationContent 的字段说明:

群消息推送设置

SDK 提供了修改群消息通知的接口,上层可以通过设置这个选项以影响群消息的通知行为。当设置 notify 为 NIMTeamNotifyStateNone 时,群内消息将不会有 APNS 通知;当 notify 为 NIMTeamNotifyStateOnlyManager 时,只有管理员的群消息通知。 当然上层也可以使用这一属性来决定收到在线消息时的 APP 表现 (是否响铃等)。

@protocol NIMTeamManager <NSObject>
/**
 *  修改群通知状态
 *
 *  @param notify       通知状态
 *  @param teamId       群组ID
 *  @param completion   完成后的回调
 */
- (void)updateNotifyState:(NIMTeamNotifyState)state
                   inTeam:(NSString *)teamId
               completion:(nullable NIMTeamHandler)completion;
@end

参数列表

参数 类型 说明
notify NIMTeamNotifyState 通知状态
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

NIMTeamNotifyState 枚举列表

说明
NIMTeamNotifyStateAll 接受任何群消息通知
NIMTeamNotifyStateNone 不接受任何群消息通知
NIMTeamNotifyStateOnlyManager 只接受管理员的群消息通知

查询接口

@protocol NIMTeamManager <NSObject>
/**
 *  群通知状态
 *
 *  @param teamId 群Id
 *
 *  @return 群通知状态
 */
- (NIMTeamNotifyState)notifyStateForNewMsg:(NSString *)teamId;
@end

群禁言

群组允许管理员将部分成员禁言,或者全体禁言。禁言属于高级功能,需要调用云信服务器接口,客户端 SDK 提供禁言单个成员、禁言全体普通成员以及查询禁言状态功能。

/**
 *  群成员禁言
 *
 *  @param mute        是否禁言
 *  @param userId      用户ID
 *  @param teamId      群组ID
 *  @param completion  经验操作完成后的回调
 *  @discussion   操作成功后,云信服务器会下发禁言的群通知消息
 */
- (void)updateMuteState:(BOOL)mute
                 userId:(NSString *)userId
                 inTeam:(NSString *)teamId
             completion:(nullable NIMTeamHandler)completion;

参数列表

参数 类型 说明
mute BOOL 是否禁言
userId NSString 成员 ID
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

该接口用于操作对于单个成员的禁言、解禁,只有高级群的群主和管理员有这个权限,并且群组可以禁言管理员。

/**
 *  禁言群全体成员
 *
 *  @param mute        是否禁言
 *  @param teamId      群组ID
 *  @param completion  经验操作完成后的回调
 *  @discussion   操作成功后,云信服务器会下发禁言的群通知消息
 */
- (void)updateMuteState:(BOOL)mute
                inTeam:(NSString *)teamId
            completion:(nullable NIMTeamHandler)completion;
参数 类型 说明
mute BOOL 是否禁言
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

该接口用于操作对于整个群的普通成员的禁言、解禁,只有高级群的群主有这个权限。

@protocol NIMTeamManager <NSObject>
/**
 *  获取群内被禁言的成员列表
 *
 *  @param teamId     群组ID
 *  @param completion 完成后的回调
 */
- (void)fetchTeamMutedMembers:(NSString *)teamId
                    completion:(nullable NIMTeamMemberHandler)completion;
@end

参数列表

参数 类型 说明
teamId BOOL 群组 ID
completion NIMTeamHandler 完成后的回调

绝大多数情况这个请求都是从本地读取缓存并同步返回,但是由于群成员信息量较大, SDK 采取的是登录后延迟拉取的策略。

考虑到用户网络等问题, SDK 有可能没有及时缓存群成员信息,那么这个请求将是个带网络请求的异步操作(增量请求)。

同时这个接口会去请求本地没有缓存的群用户的资料信息,但不会触发 - (void)onUserInfoChanged: 回调。

如果群处于全体禁言状态,则禁言用户列表无效。

@interface NIMTeam : NSObject
/**
 *  群组是否正在全员禁言
 *  @discussion 只有高级群有效
 */
- (BOOL)inAllMuteMode;
@end

群组已读回执

/**
 *  其他群成员收到此消息是否需要发送已读回执
 *  @discussion 默认为NO,设置成 YES 之后所有群回执相关操作才会生效
 */
@property (nonatomic,assign) BOOL teamReceiptEnabled;
@protocol NIMChatManager <NSObject>
- (void)sendMessageReceipt:(NIMMessageReceipt *)receipt
                completion:(NIMSendMessageReceiptBlock)completion;
@end

参数列表

参数 类型 说明
receipt NIMMessageReceipt 消息回执
completion NIMSendMessageReceiptBlock 完成回调
@protocol NIMChatManagerDelegate <NSObject>
- (void)onRecvMessageReceipt:(NIMMessageReceipt *)receipt;
@end

参数列表

参数 类型 说明
receipt NIMMessageReceipt 消息回执

在发送端 NIMMessageReceipt 需要通过最后一条消息 NIMMessage 进行初始化并进行发送,而接收端可以通过 NIMMessageReceipt 中的 timestamp 来得知发送端当前已读时间戳。此功能仅在 P2P 消息中有效。重复发送和通过无效消息构造的已读回执都将被 SDK 忽略。

收到监听的 onRecvMessageReceipts: 回调刷新所查询的消息组

@protocol NIMChatManagerDelegate <NSObject>

/**
 *  刷新群组消息已读、未读数量
 *
 *  @param messages      要查询的消息集合
 *  @discussion          消息已读变化后,会通过 NIMChatManager 的代理 onRecvMessageReceipts: 回调给上层
 *                       刷新的消息必须为群组消息
 */
- (void)refreshTeamMessageReceipts:(NSArray<NIMMessage *> *)messages;

@end

参数列表

参数 类型 说明
message NSArray * 要查询的消息集合

包括已读人数的 id 和 未读人数的 id 列表。需要注意查询详情对象不会跟着回执人数变化而变化,如果要获取最新的详情,必须再次调用此接口。

@protocol NIMChatManagerDelegate <NSObject>

/**
 *  查询群组消息回执详情
 *
 *  @param NIMMessage    要查询的消息
 *  @discussion          详情包括已读人数的 id 列表和未读人数的 id 列表
 *                       查询详情对象不会跟着回执人数变化而变化,如果要获取最新的详情,必须再次调用此接口
 *
 */
- (void)queryMessageReceiptDetail:(NIMMessage *)message
                       completion:(NIMQueryReceiptDetailBlock)completion;

@end

参数列表

参数 类型 说明
message NIMMessage 要查询的消息
completion NIMQueryReceiptDetailBlock 查询群组消息回执详情回调

自定义拓展

SDK 提供了群信息的拓展接口,开发者可以自行定义内容。

@protocol NIMTeamManager <NSObject>
/**
 *  更新群自定义信息
 *
 *  @param info         群自定义信息
 *  @param teamId       群组ID
 *  @param completion   完成后的回调
 */
- (void)updateTeamCustomInfo:(NSString *)info
                      teamId:(NSString *)teamId
                  completion:(NIMTeamHandler)block
@end

参数列表

参数 类型 说明
info NSString 群自定义信息
teamId NSString 群组 ID
completion NIMTeamHandler 完成后的回调

修改后会触发群信息变更的回调,详见群组委托

开发者可以通过 NIMTeam 的两个属性读取拓展信息:

@interface NIMTeam : NSObject
/**
 *  群服务端自定义信息
 */
@property (nonatomic,copy,readonly)  NSString *serverCustomInfo;
@end
@interface NIMTeam : NSObject
/**
 *  群客户端自定义信息
 */
@property (nonatomic,copy,readonly)  NSString *clientCustomInfo;
@end