群组功能

群组功能概述

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

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

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

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

/**
 *  群名称
 */
@property (nullable,nonatomic,copy)               NSString *teamName;

/**
 *  群头像
 */
@property (nullable,nonatomic,copy)               NSString *avatarUrl;

/**
 *  群缩略头像
 *  @discussion 仅适用于使用云信上传服务进行上传的资源,否则无效。
 */
@property (nullable,nonatomic,copy)               NSString *thumbAvatarUrl;

/**
 *  群类型
 */
@property (nonatomic,assign,readonly)    NIMTeamType type;

/**
 *  群拥有者ID
 *  @discussion 普通群拥有者就是群创建者,但是高级群可以进行拥有信息的转让
 */
@property (nullable,nonatomic,copy,readonly)      NSString *owner;

/**
 *  群介绍
 */
@property (nullable,nonatomic,copy)              NSString *intro;

/**
 *  群公告
 */
@property (nullable,nonatomic,copy)              NSString *announcement;

/**
 *  群成员人数
 *  @discussion 这个值表示是上次登录后同步下来群成员数据,并不实时变化,必要时需要调用fetchTeamInfo:completion:进行刷新
 */
@property (nonatomic,assign,readonly)   NSInteger memberNumber;

/**
 *  群等级
 *  @discussion 目前群人数主要是限制群人数上限
 */
@property (nonatomic,assign,readonly)    NSInteger level;

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

/**
 *  群验证方式
 *  @discussion 只有高级群有效
 */
@property (nonatomic,assign)   NIMTeamJoinMode joinMode;

/**
 *  群邀请权限
 *  @discussion 只有高级群,超大群有效
 */
@property (nonatomic,assign)    NIMTeamInviteMode inviteMode;

/**
 *  被邀请模式
 *  @discussion 只有高级群,超大群有效
 */
@property (nonatomic,assign)    NIMTeamBeInviteMode beInviteMode;

/**
 *  修改群信息权限
 *  @discussion 只有高级群有效
 */
@property (nonatomic,assign)    NIMTeamUpdateInfoMode updateInfoMode;

/**
 *  修改群客户端自定义字段权限
 *  @discussion 只有高级群有效
 */
@property (nonatomic,assign)    NIMTeamUpdateClientCustomMode updateClientCustomMode;


/**
 *  群服务端自定义信息
 *  @discussion 应用方可以自行拓展这个字段做个性化配置,客户端不可以修改这个字段
 */
@property (nullable,nonatomic,copy,readonly)      NSString *serverCustomInfo;


/**
 *  群客户端自定义信息
 *  @discussion 应用方可以自行拓展这个字段做个性化配置,客户端可以修改这个字段
 */
@property (nullable,nonatomic,copy,readonly)     NSString *clientCustomInfo;


/**
 *  群消息通知状态
 *  @discussion 这个设置影响群消息的 APNS 推送
 */
@property (nonatomic,assign,readonly)   NIMTeamNotifyState notifyStateForNewMsg;


/**
 *  群组是否正在全员禁言
 *  @discussion 只有高级群、超大群有效
 */
- (BOOL)inAllMuteMode;

@end

创建群组

@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

获取群组

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

从本地获取所有群组

原型

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

从本地获取指定群组

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

从云端获取指定群组

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

参数列表

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

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

解散群组

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

参数列表

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

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

群成员管理

入群操作

申请加入群组

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

@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 给申请者。

邀请加入群组

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

@end

参数列表

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

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

验证入群邀请

被人邀请进群后,会收到一条系统通知 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

查询群成员入群邀请人

/**
 *  获取群成员邀请人Accid 
 *  @param teamId      群组ID
 *  @param memberIDs   查询的成员ID,数目不允许大于200
 *  @param completion  完成后的回调
 */
- (void)fetchInviterAccids:(NSString *)teamID
         withTargetMembers:(NSArray<NSString *> *)memberIDs
                completion:(nullable NIMTeamFetchInviterAccidsHandler)completion;

参数列表

参数 类型 说明
teamId NSString 群组 ID
memberIDs NSArray 查询的群成员ID
completion NIMTeamFetchInviterAccidsHandler 完成后的回调

踢人出群

@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)quitTeam:(NSString *)teamId
      completion:(NIMTeamHandler)completion
@end      

参数列表

参数 类型 说明
teamId NSString 群组 ID
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会把数据缓存在本地。

获取群组成员列表

@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 teamId     群组ID
 *  @param completion 完成后的回调
 */
- (void)fetchTeamMembersFromServer:(NSString *)teamId 
                        completion:(nullable NIMTeamMemberHandler)completion
@end              

通过网络请求获取群成员列表,不同于fetchTeamMembers:completion这个接口是个必然带网络请求的异步操作(增量请求) 同时这个接口会去请求本地没有缓存的群用户的资料信息,但不会触发 - (void)onUserInfoChanged: 回调。

获取指定群组成员

SDK 支持获取指定某个群成员对象:

@protocol NIMTeamManager <NSObject>
/**
 *  获取单个群成员信息。返回本地缓存的群成员信息,如果本地没有相应数据则返回 nil。
 *
 *  @param userId     群成员的id
 *  @param teamId     群组id
 */
- (nullable NIMTeamMember *)teamMember:(NSString *)userId 
                                inTeam:(NSString *)teamId
@end              

修改群成员资料

修改群成员昵称

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

判断自己是否在群里

@protocol NIMTeamManager <NSObject>
/**
 *  自己是否在该群
 *
 */
- (BOOL)isMyTeam:(NSString *)teamId
@end                

群主转让

@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 完成后的回调

添加管理员

@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 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 完成后的回调

群整体禁言

禁言全体普通成员

/**
 *  禁言群全体成员
 *
 *  @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: 回调。

通过NIMTeam- (BOOL)inAllMuteMode的方法来判断。

通过NIMTeamMember- (BOOL)isMuted的方法来判断。

注意:当被整体禁言后,但未被 禁言指定成员 方法禁言过,则 NIMTeamMember-(BOOL)isMuted 仍为 NO。

群资料管理

编辑群组资料

修改群名称

@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 完成后的回调

修改群自定义属性

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 完成后的回调

监听群组变化

@protocol NIMTeamManagerDelegate <NSObject>
/**
 *  群组更新回调
 *
 *  @param team 更新的群组
 */
- (void)onTeamUpdated:(NIMTeam *)team
@end
@protocol NIMTeamManagerDelegate <NSObject>
/**
 *  群组增加回调
 *
 *  @param team 更新的群组
 */
- (void)onTeamAdded:(NIMTeam *)team;
@end
@protocol NIMTeamManagerDelegate <NSObject>
/**
 *  群组移除回调
 *
 *  @param team 更新的群组
 */
- (void)onTeamRemoved:(NIMTeam *)team;
@end

群组通知消息

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

目前支持触发群通知消息的事件有:

NIMTeamOperationType枚举 事件说明
NIMTeamOperationTypeInvite 邀请成员入群(无需被邀请人同意的模式)
NIMTeamOperationTypeAcceptInvitation 接受邀请后入群(需要被邀请人同意的模式)
NIMTeamOperationTypeKick 被踢出群
NIMTeamOperationTypeLeave 退出群
NIMTeamOperationTypeUpdate 群信息资料更新
NIMTeamOperationTypeDismiss 解散群
NIMTeamOperationTypeApplyPass 申请加入群成功
NIMTeamOperationTypeTransferOwner 转让群主
NIMTeamOperationTypeAddManager 添加管理员
NIMTeamOperationTypeRemoveManager 移除管理员
NIMTeamOperationTypeMute 群内禁言/解禁

群组通知解析步骤:

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

值得一提的是:针对群更新通知 NIMTeamOperationTypeUpdate,需要判断 NIMUpdateTeamInfoAttachment 内的具体内容,来判断具体更新的是哪个群信息,可参见Demo的解析:

case NIMTeamOperationTypeUpdate:
    {
        id attachment = [content attachment];
        if ([attachment isKindOfClass:[NIMUpdateTeamInfoAttachment class]]) {
            NIMUpdateTeamInfoAttachment *teamAttachment = (NIMUpdateTeamInfoAttachment *)attachment;
            formatedMessage = [NSString stringWithFormat:@"%@更新了%@信息".nim_localized,source,teamName];

            //如果只是单个项目项被修改则显示具体的修改项
            if ([teamAttachment.values count] == 1) {
                NIMTeamUpdateTag tag = [[[teamAttachment.values allKeys] firstObject] integerValue];
                switch (tag) {
                    case NIMTeamUpdateTagName:
                        formatedMessage = [NSString stringWithFormat:@"%@更新了%@名称".nim_localized,source,teamName];
                        break;
                    case NIMTeamUpdateTagIntro:
                        formatedMessage = [NSString stringWithFormat:@"%@更新了%@介绍".nim_localized,source,teamName];
                        break;
                    case NIMTeamUpdateTagAnouncement:
                        formatedMessage = [NSString stringWithFormat:@"%@更新了%@公告".nim_localized,source,teamName];
                        break;
                    case NIMTeamUpdateTagJoinMode:
                        formatedMessage = [NSString stringWithFormat:@"%@更新了%@验证方式".nim_localized,source,teamName];
                        break;
                    case NIMTeamUpdateTagAvatar:
                        formatedMessage = [NSString stringWithFormat:@"%@更新了%@头像".nim_localized,source,teamName];
                        break;
                    case NIMTeamUpdateTagInviteMode:
                        formatedMessage = [NSString stringWithFormat:@"%@更新了邀请他人权限".nim_localized,source];
                        break;
                    case NIMTeamUpdateTagBeInviteMode:
                        formatedMessage = [NSString stringWithFormat:@"%@更新了被邀请人身份验证权限".nim_localized,source];
                        break;
                    case NIMTeamUpdateTagUpdateInfoMode:
                        formatedMessage = [NSString stringWithFormat:@"%@更新了群资料修改权限".nim_localized,source];
                        break;
                    case NIMTeamUpdateTagMuteMode:{
                        NSString *muteState = teamAttachment.values.allValues.firstObject;
                        BOOL muted = [muteState isEqualToString:@"0"] ? NO : YES;
                        formatedMessage = muted? [NSString stringWithFormat:@"%@设置了群全体禁言".nim_localized,source]: [NSString stringWithFormat:@"%@取消了全体禁言".nim_localized,source];
                        break;
                    }
                    default:
                        break;

                }
            }
        }
        if (formatedMessage == nil){
            formatedMessage = [NSString stringWithFormat:@"%@更新了%@信息".nim_localized,source,teamName];
        }
    }
    break;

群消息免打扰

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 支持对根据关键字 检索群:

@protocol NIMTeamManager <NSObject>
/**
 *  检索群
 *
 *  @param option   检索选项
 *
 *  @param completion   完成后的回调
 */
- (void)searchTeamWithOption:(NIMTeamSearchOption *)option 
                  completion:(NIMTeamSearchHandler)completion;
@end

NIMTeamSearchOption 参数介绍:

类型 参数 说明
NIMTeamSearchContentOption searchContentOption 搜索文本的匹配区域
BOOL ignoreingCase 忽略大小写,默认:YES
NSString searchContent 搜索文本

NIMTeamSearchContentOption 枚举介绍:

typedef NS_OPTIONS(NSInteger, NIMTeamSearchContentOption ) {
   // 群名检索
   NIMTeamSearchContentOptiontName = 1 < < 0,
   // 群id检索
   NIMTeamSearchContentOptiontId = 1 < < 1,
   // 群名与群id均检索
   NIMTeamSearchContentOptionTeamAll = NIMTeamSearchContentOptiontName | NIMTeamSearchContentOptiontId,
};