IM 即时通讯
iOS
动态与公告
IM UIKit 更新日志
NIM SDK 开发版更新日志
NIM SDK 稳定版更新日志
产品介绍
简介
主要功能
产品优势
功能介绍
账号集成与登录
多端登录与互踢策略
基础消息功能
群组功能
聊天室功能
聊天室标签功能
圈组功能
质量数据监控台
海外数据中心
IM平滑迁移方案
接口及业务限制
体验 Demo
下载 SDK 与 Demo 源码
快速开始
跑通 IM Demo 源码
跑通圈组 Demo 源码
实现单聊消息收发(不含 UI)
实现圈组消息收发(不含 UI)
含 UI 集成
什么是 IM UIKit
IM UIKit 功能概览
快速集成 IM UIKit
组件导入
初始化与登录
界面跳转
自定义用户信息
全局配置
会话列表相关
集成会话列表界面
自定义会话列表 UI
会话列表 API 概览
会话消息相关
集成会话消息界面
实现地理位置消息功能
实现音视频通话
实现自定义消息收发
自定义会话消息 UI
会话消息 API 概览
通讯录相关
集成通讯录界面
自定义通讯录 UI
通讯录 API 概览
UIKit 功能实现方案
消息回复实现方案
IM UIKit API 概览
不含 UI 集成
集成 SDK
初始化
登录相关
登录 IM
多端登录与互踢
登出 IM
消息相关
消息概述
消息收发
自定义消息收发
消息配置选项
NOS 资源场景
广播消息收发
消息已读回执
消息撤回
消息重发与转发
消息更新
消息过滤
语音消息处理
本地消息插入
历史消息
最近会话
服务端会话服务
用户资料
用户关系
在线状态订阅
系统通知
离线推送
实现 APNs 离线推送
集成 APNs 推送服务
配置消息的推送属性
设置推送全局免打扰
设置多端推送策略
创建 p12 推送证书
创建 p8 密钥文件
群组功能
群组概述
群组管理
群成员管理
群消息管理
超大群功能
聊天室
圈组功能
圈组概述
登录管理
服务器相关
服务器概述
服务器管理
服务器成员管理
游客功能
服务器未读数管理
频道相关
频道概述
频道管理
频道黑白名单
实时互动频道
频道分组
频道分组黑白名单
频道未读数管理
搜索服务器与频道
身份组相关
身份组概述
身份组应用场景
服务器身份组
频道身份组
频道分组身份组
用户定制权限
自定义权限项
成员权限查询与判定
身份组相关查询
圈组订阅机制
圈组消息相关
图解圈组消息流转
圈组消息收发
圈组消息撤回
圈组消息更新
圈组消息删除
消息正在输入
会话消息回复(Thread)
圈组快捷评论
圈组消息缓存
圈组消息搜索
查询历史消息
查询@我的消息
圈组系统通知相关
圈组系统通知概述
圈组系统通知收发
圈组系统通知更新
圈组离线推送
圈组内容审核
圈组第三方回调
圈组相关抄送
圈组各端接口命名差异
反垃圾(内容审核)
聊天扩展
接入第三方机器人
其他
最佳实践
IM 登录最佳实践
聊天室重要消息投递
参考文档
iOS PushKit 配置
iOS苹果推送配置
API 参考
iOS SDK API
iOS SDK 状态码/错误码
IM 控制台指南
创建应用
注册 IM 账号
升级服务
开通聊天室功能
配置客户端应用标识
常见问题
FAQ
错题集
iOS 推送问题排查
服务协议

群组管理

更新时间: 2023/03/09 18:18:36

网易云信 NIM SDK 提供了高级群形式的群组功能,支持用户创建、加入、退出、转让、修改、查询、解散群组,拥有完善的管理功能。

SDK 的 NIMTeamManager 提供群组操作相关接口, NIMTeamManagerDelegate 提供群组相关回调接口,帮助您快速实现和使用群组的管理功能。

群组相关事件监听

在进行群组操作前,您可以提前注册监听群相关事件。监听后,在进行群组管理相关操作时,会收到对应的通知。

可以根据用户需求,监听以下事件回调。

通过调用 addDelegate: 方法添加群组相关事件的监听。

示例代码如下:

/// 自定义类实现 NIMTeamManagerDelegate 接口

/// 群组委托接口调用类声明
/// NIMTeamAdapter.h
@interface NIMTeamAdapter :NSObject<NIMTeamManagerDelegate>

@end

/// 群组委托接口调用类实现
/// NIMTeamAdapter.m
@implementation NIMTeamAdapter
/// 更改群组信息时的回调
- (void)onTeamUpdated:(NIMTeam *)team {
    NSLog(@"[On team updated, teamId: %@]", [team teamId]);
}
@end
...

/// main.m
/// 实例化接口调用的类
static NIMTeamAdapter *adpater;
adpater = [[NIMTeamAdapter alloc] init];
/// 添加群组委托
[[[NIMSDK sharedSDK] teamManager] addDelegate:adpater];
/// 更新群信息,触发委托
// [[[NIMSDK sharedSDK] teamManager] updateTeamName:@"TestDelegate"
//                                           teamId:@"6271272396"
//                                       completion:nil];

若想要取消监听,可调用removeDelegate: 方法移除监听。

实现流程

本章节通过群主、管理员、普通成员之间的交互为例,介绍群组管理的实现流程。

uml diagram

创建群组

通过调用createTeam:completion:方法创建群组,创建者即为该群群主。

原创建群接口createTeam:users:completion:已废弃。

参数 类型 说明
name NSString 群名
type NIMTeamType 群组类型默认为 NIMTeamTypeAdvanced,即高级群。高级群拥有完善的成员权限体系及管理功能。为避免产生问题,不建议使用其他取值。
avatarUrl NSString 群头像
intro NSString 群简介
announcement NSString 群公告
clientCustomInfo NSString 客户端自定义信息
postscript NSString 邀请他人的附言
joinMode NIMTeamJoinMode 群验证模式
NIMTeamJoinModeNoAuth:(默认)不需要验证,即允许所有人入群
NIMTeamJoinModeNeedAuth:加此群需要相关人员的验证
NIMTeamJoinModeRejectAll:不允许任何人加入 该参数只有在群类型为高级群时有效。
inviteMode NIMTeamInviteMode 群组邀请模式
NIMTeamInviteModeManager:(默认)管理员,仅限管理员可以邀请人进群
NIMTeamInviteModeAll:所有人,所有人都可以邀请人进群 该参数只有在群类型为高级群时有效。
beInviteMode NIMTeamBeInviteMode 被邀请模式
NIMTeamBeInviteModeNeedAuth:(默认)此群邀请某人,需要此人验证通过才能加入
NIMTeamBeInviteModeNoAuth:不需要验证
该参数只有在群类型为高级群时有效。
updateInfoMode NIMTeamUpdateInfoMode 群信息修改权限
NIMTeamUpdateInfoModeManager:(默认)管理员,仅限管理员可以修改群信息
NIMTeamUpdateInfoModeAll:所有人,所有人都可以修改 该参数只有在群类型为高级群时有效。
updateClientCustomMode NIMTeamUpdateClientCustomMode 客户端群信息自定义字段修改权限
NIMTeamUpdateClientCustomModeManager:(默认)管理员
NIMTeamUpdateClientCustomModeAll :所有人 该参数只有在群类型为高级群时有效。
maxMemberCountLimitation NSUInteger 群最大人数上限,默认 200 人
antispamBusinessId NSString 需要进行内容审核的业务ID
users NSArray<NSString *> 邀请用户列表

示例代码:

NIMCreateTeamExOption *option = [NIMCreateTeamExOption new];
[option setName:@"一个被创建的群聊"];
[option setType:NIMTeamTypeAdvanced];
[option setIntro:@"一个被创建的群聊的简介"];
/// users 用户Accid列表
[option setUsers:@[@"user01", @"user02"]];
/// completion 完成后的回调
NIMTeamCreateHandler completion = ^(NSError * __nullable error,
        NSString * __nullable teamId,
        NSArray<NSString *> * __nullable failedUserIds)
{
    if (error == nil) {
        /// 群组创建成功
        NSLog(@"[Create team succeeded, teamId: %@]", teamId);
        /// your code ...
    } else {
        /// 群组创建失败
        NSLog(@"[NSError message: %@]", error);
    }
};
/// 创建群组
[[[NIMSDK sharedSDK] teamManager] createTeam:option completion:completion];

加入群组

加入群组可以通过以下两种方式:

  • 用户接受邀请入群。
  • 用户主动申请入群。

邀请入群

邀请入群的权限可以通过 inviteMode 来定义,设为 NIMTeamInviteModeManager,那么仅限群主和管理员可以邀请人进群;设为 NIMTeamInviteModeAll ,那么群组内的所有人都可以邀请人进群。

通过调用 addUsers:toTeam:postscript:attach:completion: 方法邀请其他用户进入群组。

  • 若群组的被邀请模式 beInviteModeNIMTeamBeInviteModeNoAuth,那么无需验证,其他用户可直接加入群组。
  • 若群组的被邀请模式 beInviteModeNIMTeamBeInviteModeNeedAuth,那么需要被邀请用户同意才能加入群组。

如果在被邀请成员中存在成员拥有的群组数量已达上限,则会返回失败成员的账号列表。

参数说明:

参数 说明
teamId 群ID
users 邀请入群的用户账号列表
attach 自定义扩展字段,不需要的话设置为空 ,最长512字符
postscript 邀请附言,不需要的话设置为空
completion 完成后的回调
  • 发起邀请后,被邀请用户会收到 NIMSystemNotification 系统通知,其通知类型为NIMSystemNotificationTypeTeamInvite。在通知中可以获取邀请人 ID、邀请进入的群组 ID 以及邀请附言。
  • 被邀请用户可以调用 acceptInviteWithTeam 方法接受入群邀请,接受即入群。所有群成员会收到群组通知消息(消息类型为 NIMMessageTypeNotification),触发事件为 NIMTeamOperationTypeAcceptInvitation
  • 也可以调用 rejectInviteWithTeam 方法拒绝入群邀请。拒绝后,邀请者会收到 NIMSystemNotification 系统通知,其通知类型为 NIMSystemNotificationTypeTeamApplyReject

示例代码:

 /// users 待邀请入群用户Accid列表
    NSArray<NSString *> *users = [NSArray arrayWithObjects:@"ios01", @"ios02", nil];
    /// teamId 邀请进入的群组 ID
    NSString *teamId = @"6271272396";
    /// postscript 邀请附言,选填
    NSString *postscript = @"邀请你进入群聊";
    /// attach 扩展消息,选填
    NSString *attach = @"扩展消息";
    /// completion 完成后的回调
    NIMTeamMemberHandler completion = ^(NSError * __nullable error, NSArray<NIMTeamMember *> * __nullable members)
    {
        if (error == nil) {
            /// 邀请用户入群成功,members 为成功邀请的群成员列表
            NSLog(@"[Add %lu users to team: %@ succeed]", (unsigned long)[members count], teamId);
            /// your code ...
        } else {
            /// 邀请用户入群失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 邀请用户入群
    [[[NIMSDK sharedSDK] teamManager] addUsers:users
                                        toTeam:teamId
                                    postscript:postscript
                                        attach:attach
                                    completion:completion];

//接受入群邀请
    NSString *teamId = @"6271272396";
    /// invitorId 邀请者ID
    NSString *invitorId = @"ios02";
    /// completion 完成后的回调
    NIMTeamHandler completion = ^(NSError * __nullable error)
    {
        if (error == nil) {
            /// 接受入群邀请成功
            NSLog(@"[Accept invite of invitor: %@ in team: %@ succeed.]", invitorId, teamId);
            /// your code ...
        } else {
            /// 接受入群邀请失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 接受入群邀请
    [[[NIMSDK sharedSDK] teamManager] acceptInviteWithTeam:teamId
                                                 invitorId:invitorId
                                                completion:completion];


//拒绝入群邀请
    NSString *teamId = @"6271272396";
    /// invitorId 邀请者ID
    NSString *invitorId = @"ios02";
    /// rejectReason 拒绝原因
    NSString *rejectReason = @"不想加入该群";
    /// completion 完成后的回调
    NIMTeamHandler completion = ^(NSError * __nullable error)
    {
        if (error == nil) {
            /// 拒绝入群邀请成功
            NSLog(@"[Reject invite of invitor: %@ in team: %@ succeed.]", invitorId, teamId);
            /// your code ...
        } else {
            /// 拒绝入群邀请失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 拒绝入群邀请
    [[[NIMSDK sharedSDK] teamManager] rejectInviteWithTeam:teamId
                                                 invitorId:invitorId
                                              rejectReason:rejectReason
                                                completion:completion];

申请入群

通过调用 applyToTeam:message:completion: 方法申请加入群组。

  • 若群组的加入模式 joinModeNIMTeamJoinModeNoAuth,那么无需验证,其他用户可直接加入群组。
  • 若群组的加入模式 joinModeNIMTeamJoinModeNeedAuth,那么需要群主或者群管理员同意才能加入群组。
  • 若群组的加入模式 joinModeNIMTeamJoinModeRejectAll,那么该群组不接受入群申请,仅能通过邀请方式入群。

参数说明:

参数 说明
teamId 群ID
message 申请附言
completion 完成后的回调
  • 当用户发起入群申请后,该群群主和管理员会收到 NIMSystemNotification 系统通知,其通知类型为NIMSystemNotificationTypeTeamApply
  • 群主和群管理员可以调用 passApplyToTeam 方法接受入群申请,接受即入群。所有群成员会收到群组通知消息(消息类型为 NIMMessageTypeNotification),触发事件为 NIMTeamOperationTypeApplyPass
  • 群主和群管理员也可以调用 rejectApplyToTeam 方法拒绝入群申请。拒绝后,申请者会收到 NIMSystemNotification 系统通知,其通知类型为 NIMSystemNotificationTypeTeamIviteReject

示例代码:

    NSString *teamId = @"6271272396";
    /// message 申请时的附言
    NSString *message = @"我要申请加群";
    /// completion 完成后的回调
    NIMTeamApplyHandler completion = ^(NSError * __nullable error, NIMTeamApplyStatus applyStatus)
    {
        if (error == nil) {
            /// 群申请成功
            NSLog(@"[Apply to team: %@ succeed, apply status: %ld]", teamId,(long)applyStatus);
            /// your code ...
        } else {
            /// 群申请失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 群申请
    [[[NIMSDK sharedSDK] teamManager] applyToTeam:teamId
                                          message:message
                                       completion:completion];


  //同意入群申请
    NSString *teamId = @"6271272396";
    /// userId 申请人ID
    NSString *userId = @"ios02";
    /// completion 完成后的回调
    NIMTeamApplyHandler completion = ^(NSError * __nullable error, NIMTeamApplyStatus applyStatus)
    {
        if (error == nil) {
            /// 通过群申请成功
            NSLog(@"[Pass apply in team: %@ of user: %@ succeed, apply status: %ld]", teamId, userId, (long)applyStatus);
            /// your code ...
        } else {
            /// 通过群申请失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 通过群申请
    [[[NIMSDK sharedSDK] teamManager] passApplyToTeam:teamId
                                               userId:userId
                                           completion:completion];


  //拒绝入群申请
    NSString *teamId = @"6271272396";
    /// userId 申请人ID
    NSString *userId = @"ios02";
    /// rejectReason 拒绝申请理由
    NSString *rejectReason = @"拒绝用户入群";
    /// completion 完成后的回调
    NIMTeamHandler completion = ^(NSError * __nullable error)
    {
        if (error == nil) {
            /// 拒绝群申请成功
            NSLog(@"[Reject apply in team: %@ of user: %@ succeed]", teamId, userId);
            /// your code ...
        } else {
            /// 拒绝群申请失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 拒绝群申请
    [[[NIMSDK sharedSDK] teamManager] rejectApplyToTeam:teamId
                                                 userId:userId
                                           rejectReason:rejectReason
                                             completion:completion];

转让群组

只有群主才有转让群组的权限。

通过调用 transferManagerWithTeam:newOwnerId:isLeave:completion: 方法将群组转让给其他成员。

  • 转让群后, 群主身份转移,所有群成员会收到群组通知消息(消息类型为 NIMMessageTypeNotification),触发事件为 NIMTeamOperationTypeTransferOwner
  • 如果转让群的同时离开群, 那么相当于同时调用quitTeam主动退群。所有群成员会收到群组通知消息(消息类型为 NIMMessageTypeNotification),触发事件为 NIMTeamOperationTypeLeave`。
  • 用户退群成功后,相关会话信息仍然会保留,但不再能接收关于此群的消息。

参数说明:

参数 说明
teamId 群ID
newOwnerIdt 转让后的新群主账号
isLeave 转让群的同时是否退出该群
true:退出
false:不退出,身份变为普通群成员
completion 完成后的回调

示例代码:

NSString *teamId = @"6271272396";
    /// newOwnerId 新群主ID
    NSString *newOwnerId = @"ios02";
    /// 是否离开本群
    BOOL isLeave = YES;
    NIMTeamHandler completion = ^(NSError * __nullable error)
    {
        if (error == nil) {
            /// 转移群主成功
            NSLog(@"[Transfer manager to new owner: %@ succeed.]", newOwnerId);
            /// your code ...
        } else {
            /// 转移群主失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 转移群主
    [[[NIMSDK sharedSDK] teamManager] transferManagerWithTeam:teamId
                                                   newOwnerId:newOwnerId
                                                      isLeave:isLeave
                                                   completion:completion];

退出群组

退出群组可以通过以下两种方式:

  • 群主或群组管理员将用户踢出群组。
  • 用户主动退群。

踢人出群

  • 只有群主和管理员才能将成员踢出群组。
  • 管理员不能踢群主和其他管理员。

通过调用 kickUsers:fromTeam:completion: 方法将成员踢出群组。

  • 移除成员后,所有群成员会收到群组通知消息(消息类型为 NIMMessageTypeNotification),触发事件为 NIMTeamOperationTypeKick
  • 被踢出的用户相关会话信息仍然会保留,但不再能接收关于此群的消息。

参数说明:

参数 说明
teamId 群ID
users 被踢出的群成员账号列表
completion 完成后的回调

示例代码:

/// users 待踢出用户Accid列表
    NSArray<NSString *> *users = [NSArray arrayWithObjects:@"ios02", nil];
    /// teamId 踢出群组的群组 ID
    NSString *teamId = @"6271272396";
    /// completion 完成后的回调
    NIMTeamHandler completion = ^(NSError * __nullable error)
    {
        if (error == nil) {
            /// 踢人出群成功
            NSLog(@"[Kick users from team: %@ succeed]", teamId);
            /// your code ...
        } else {
            /// 踢人出群失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 踢出群组
    [[[NIMSDK sharedSDK] teamManager] kickUsers:users
                                       fromTeam:teamId
                                     completion:completion];

主动退群

通过调用 quitTeam:completion: 方法主动退出群组。

  • 除群主(需先转让群主)外,其他用户均可以直接主动退群。主动退群后, 所有群成员会收到群组通知消息(消息类型为 NIMMessageTypeNotification),触发事件为 NIMTeamOperationTypeLeave
  • 用户退群成功后,相关会话信息仍然会保留,但不再能接收关于此群的消息。

示例代码:

/// teamId 为想要退出的群组 ID
    NSString *teamId = @"6271272396";
    /// completion 完成后的回调
    NIMTeamHandler completion = ^(NSError * __nullable error)
    {
        if (error == nil) {
            /// 退出群组成功
            NSLog(@"[Quit team succeeded, teamId: %@]", teamId);
            /// your code ...
        } else {
            /// 退出群组失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 退出群组,注:群主需转让群主身份后才可退出
    [[[NIMSDK sharedSDK] teamManager] quitTeam:teamId
                                    completion:completion];

解散群组

只有群主才能解散群组。

通过调用 dismissTeam:completion: 方法解散群组。

解散群后, 所有群成员会收到群组通知消息(消息类型为 NIMMessageTypeNotification),触发事件为 NIMTeamOperationTypeDismiss

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

示例代码:

/// teamId 为想要解散的群组 ID
    NSString *teamId = @"6271321659";
    /// completion 完成后的回调
    NIMTeamHandler completion = ^(NSError * __nullable error)
    {
        if (error == nil) {
            /// 群组解散成功
            NSLog(@"[Dismiss team succeeded, teamId: %@]", teamId);
            /// your code ...
        } else {
            /// 群组解散失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 解散群组
    [[[NIMSDK sharedSDK] teamManager] dismissTeam:teamId
                                       completion:completion];

修改群组信息

修改群信息需要权限。若该群组的群信息修改权限(updateInfoMode)为 NIMTeamUpdateInfoModeManager,那么只有群主和管理员才能修改群组信息;若为 NIMTeamUpdateInfoModeAll,则群组内的所有人都可以修改群组信息。

可修改的群组属性:群组名称、群组头像、群组简介、群组公告、入群验证方式、邀请模式、被邀请模式、群全体禁言模式、群信息修改权限、群自定义信息修改权限、群自定义信息等。

当用户更新群组信息后,所有群成员会收到群组通知消息(消息类型为 NIMMessageTypeNotification),触发事件为 NIMTeamOperationTypeUpdate

修改群组的单个属性信息

群组属性的对应方法如下:

修改的群组属性 对应的方法 说明
群组名称 updateTeamName:teamId:completion: -
群组头像 updateTeamAvatar:teamId:completion: 群组头像若要上传到云信服务器上,则需要使用头像资源处理
群组简介 updateTeamIntro:teamId:completion: -
群组公告 updateTeamAnnouncement:teamId:completion: -
入群验证方式 updateTeamJoinMode:teamId:completion: NIMTeamJoinModeNoAuth:不需要验证,即允许所有人入群
NIMTeamJoinModeNeedAuth:加此群需要相关人员的验证
NIMTeamJoinModeRejectAll:不允许任何人加入
被邀请模式 updateTeamBeInviteMode:teamId:completion: NIMTeamBeInviteModeNoAuth:不需要验证
NIMTeamBeInviteModeNeedAuth:此群邀请某人,需要此人验证通过才能加入
邀请模式 updateTeamInviteMode:teamId:completion: NIMTeamInviteModeManager:管理员,仅限管理员可以邀请人进群
NIMTeamInviteModeAll:所有人,所有人都可以邀请人进群
群信息修改权限 updateTeamUpdateInfoMode:teamId:completion: NIMTeamUpdateInfoModeManager:管理员,仅限管理员可以修改群信息
NIMTeamUpdateInfoModeAll:所有人,所有人都可以修改
群自定义信息修改权限 updateTeamUpdateClientCustomMode:teamId:completion: NIMTeamUpdateClientCustomModeManager:管理员
NIMTeamUpdateClientCustomModeAll :所有人
群自定义信息 updateTeamCustomInfo:teamId:completion: SDK 提供了群信息的拓展接口,开发者可以自行定义内容

这里以修改群组名称为例,请参考以下示例代码:

 /// teamName 待更新的群组名
    NSString *teamName = @"更新后的群组名";
    /// teamId 待更新群组名的群组ID
    NSString *teamId = @"6271272396";
    /// completion 完成后的回调
    NIMTeamHandler completion = ^(NSError * __nullable error)
    {
        if (error == nil) {
            /// 更新群组名成功
            NSLog(@"[Update team name to: %@ succeed]", teamName);
            /// your code ...
        } else {
            /// 更新群组名失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 更新群组名
    [[[NIMSDK sharedSDK] teamManager] updateTeamName:teamName
                                              teamId:teamId
                                          completion:completion];

修改群组的多个属性信息

通过调用 updateTeamInfos:teamId:completion: 方法批量修改群组的多个属性信息。

参数说明:

参数 说明
teamId 群ID
values 需要更新的群信息键值对
completion 完成后的回调

传入的数据键值对为 {@(NIMTeamUpdateTag) : NSString},无效数据将被过滤,具体请参见NIMTeamUpdateTag

示例代码:

NSDictionary<NSNumber *,NSString *> *values = @{
        @(NIMTeamUpdateTagName):@"一次性改群名",
        @(NIMTeamUpdateTagIntro):@"一次性改群简介",
        @(NIMTeamUpdateTagAnouncement):@"一次性改群公告"
    };
    /// teamId 待更新的群组ID
    NSString *teamId = @"6271272396";
    /// completion 完成后的回调
    NIMTeamHandler completion = ^(NSError * __nullable error)
    {
        if (error == nil) {
            /// 更新群信息成功
            NSLog(@"[Update team infos to: %@ succeed]", values[@(NIMTeamUpdateTagName)]);
            /// your code ...
        } else {
            /// 更新群信息失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 更新群信息
    [[[NIMSDK sharedSDK] teamManager] updateTeamInfos:values
                                                teamId:teamId
                                            completion:completion];
接口:

修改本地群组信息

通过调用 updateTInfosLocal: 方法修改本地群组信息,不会同步到服务端。

示例代码:

/// updateTInfosLocal 通常搭配批量拉取群信息的服务使用,如 earchTeamWithOption:, fetchTeamsWithTimestamp:completion: 
    /// option 查询选项: 可设置搜索选项 为 id(01) 或 name(10) 或 id|name(11); 并设置搜索内容
    NIMTeamSearchOption *option = [NIMTeamSearchOption new];
    /// 设置搜索选项为 匹配TeamID
    [option setSearchContentOption:NIMTeamSearchContentOptiontId];
    /// 设置搜索内容为 @"6271272396"
    [option setSearchContent:@"6271272396"];
    /// completion 完成后的回调
    NIMTeamSearchHandler completion = ^(NSError * __nullable error, NSArray<NIMTeam *> * __nullable teams)
    {
        if (error == nil) {
            /// 查询群信息 成功,得到查询结果列表 teams
            NSLog(@"[Search team with option %@ total %ld team(s) succeed.]", [option searchContent], [teams count]);
            ///=================================================
            /// teams 待更新的群组列表
            NSArray<NIMTeam *> *updateTeams = teams;
            /// 更新群本地信息
            BOOL didUpdate = [[[NIMSDK sharedSDK] teamManager] updateTInfosLocal:updateTeams];
            ///=================================================
            NSLog(@"[Update team info result: %@.]", didUpdate ? @"YES" : @"NO");
        } else {
            /// 查询群信息 失败
            NSLog(@"[NSError message: %@]", error);
        }
        /// 查询群信息
        [[[NIMSDK sharedSDK] teamManager] searchTeamWithOption:option
                                                    completion:completion];
    };

查询群组信息

NIM SDK 在程序启动时会对本地群信息进行同步,所以只需要调用本地缓存接口获取群即可。

SDK 支持批量查询自己加入的所有群组、以及根据单个群 id 查询指定群组。同样 SDK 也提供了远程获取群信息的接口。

查询所有群信息

通过调用fetchTeamsWithTimestamp:completion:方法从服务端全量拉取群信息,并做本地持久化。

参数说明:

参数 说明
timestamp 0 表示全量获取群信息
block 完成后的回调

示例代码:

 /// timeInterval 时间戳,0 表示全量获取群信息
    NSTimeInterval timeInterval = 0;
    /// completion 完成后的回调
    NIMTeamFetchTeamsHandler completion = ^(NSError * __nullable error, NSArray<NIMTeam *> * __nullable teams)
    {
        if (error == nil) {
            /// 获取所有群信息 成功
            NSLog(@"[Fetch %lu teams with timestamp.]", [teams count]);
        } else {
            /// 获取所有群信息 失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 获取所有群信息
    [[[NIMSDK sharedSDK] teamManager] fetchTeamsWithTimestamp:timeInterval
                                                   completion:completion];

本地查询自己加入的所有群组

通过调用allMyTeams方法从本地查询自己加入的所有群组。

示例代码如下:

/// teams 为加入的所有群组
    NSArray<NIMTeam*> *teams = [[[NIMSDK sharedSDK] teamManager] allMyTeams];

本地根据 ID 查询指定群组

通过调用teamById 方法从本地查询指定群组信息。

建议在主线程调用该方法,否则可能导致程序崩溃和数据读写丢失。

示例代码如下:

/// teamId 为想要查询的群组 ID
    NSString *teamId = @"6121310012";
    /// team 为群组 ID 获取具体的群组信息,如果自己不在群里,则该接口返回 nil
    NIMTeam *team = [[[NIMSDK sharedSDK] teamManager] teamById:teamId];

群组信息 SDK 本地存储说明:

解散群、退出群或者被移出群时,本地数据库会继续保留该群组信息。如果用户手动清空全部本地数据,下次登录同步时,服务器将不同步无效的群组,用户将无法取得已退出群的群组信息。

从云端查询指定群组

/// teamId 群组ID
    NSString *teamId = @"6271272396";
    /// completion 完成后的回调
    NIMTeamFetchInfoHandler completion = ^(NSError * __nullable error, NIMTeam * __nullable team)
    {
        if (error == nil) {
            /// 获取群信息 成功
            NSLog(@"[Fetch teamId:%@’s infomation: %@ succeed.]", teamId, [team teamName]);
            /// your code ...
        } else {
            /// 获取群信息  失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 获取群信息
    [[[NIMSDK sharedSDK] teamManager] fetchTeamInfo:teamId
                                         completion:completion];

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

/// 待获取的指定群 ID
    NSArray<NSString *> *teamsId = [NSArray arrayWithObjects:@"6271272396", nil];
    /// completion 完成后的回调
    NIMTeamFetchTeamInfoListHandler completion = ^(NSError * __nullable error,
                                                   NSArray<NIMTeam *> * __nullable teams,
                                                   NSArray<NSString *> * __nullable failedTeamIds)
    {
        if (error == nil) {
            /// 获取指定群ID信息 成功
            NSLog(@"[Fetch %lu teams succeeded, %lu failed in total.]", [teams count], [failedTeamIds count]);
        } else {
            /// 获取指定群ID信息 失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 获取指定群ID信息
    [[[NIMSDK sharedSDK] teamManager] fetchTeamInfoList:teamsId
                                             completion:completion];
  • 批量查询时,若数组元素超过10个会取前10个。
  • 批量查询是从服务端全量拉取群信息,不做本地持久化。

群组检索

通过调用searchTeamWithOption:completion:方法搜索与关键字匹配的所有群。

NIMTeamSearchOption参数说明:

参数 说明
searchContentOption 搜索文本的匹配区域,类型为 NIMTeamSearchContentOption
ignoreingCase 是否忽略大小写,默认 YES
searchContent 搜索关键字文本

NIMTeamSearchContentOption 枚举说明:

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

示例代码如下:

/// option 查询选项: 可设置搜索选项 为 id(01) 或 name(10) 或 id|name(11); 并设置搜索内容
    NIMTeamSearchOption *option = [NIMTeamSearchOption new];
    /// 设置搜索选项为 匹配TeamID
    [option setSearchContentOption:NIMTeamSearchContentOptiontId];
    /// 设置搜索内容为 @"6271272396"
    [option setSearchContent:@"6271272396"];
    /// completion 完成后的回调
    NIMTeamSearchHandler completion = ^(NSError * __nullable error, NSArray<NIMTeam *> * __nullable teams)
    {
        if (error == nil) {
            /// 查询群信息 成功,得到查询结果列表 teams
            NSLog(@"[Search team with option %@ total %ld team(s) succeed.]", [option searchContent], [teams count]);
            /// your code ...
        } else {
            /// 查询群信息 失败
            NSLog(@"[NSError message: %@]", error);
        }
    };
    /// 查询群信息
    [[[NIMSDK sharedSDK] teamManager] searchTeamWithOption:option
                                                completion:completion];

API 参考

API
说明
addDelegate: 添加群组相关事件的监听
removeDelegate: 移除监听
createTeam 创建群组
addUsers 邀请入群
acceptInviteWithTeam 接受入群邀请
rejectInviteWithTeam 拒绝入群邀请
applyToTeam 申请入群
passApplyToTeam 接受入群申请
rejectApplyToTeam 拒绝入群申请
kickUsers 踢人出群
quitTeam 主动退群
transferManagerWithTeam 转让群组
dismissTeam 解散群组
updateTeamName 修改群组名称
updateTeamAvatar 修改群组头像
updateTeamIntro 修改群组简介
updateTeamAnnouncement 修改群组公告
updateTeamJoinMode 修改入群验证方式
updateTeamBeInviteMode 修改被邀请模式
updateTeamInviteMode 修改邀请模式
updateTeamUpdateInfoMode 修改群信息修改权限
updateTeamUpdateClientCustomMode 修改群自定义信息修改权限
updateTeamCustomInfo 修改群自定义信息
updateTeamInfos 批量修改群组的多个属性信息
updateTInfosLocal 修改本地群组信息
fetchTeamsWithTimestamp 从服务端全量拉取群信息
allMyTeams 从本地查询自己加入的所有群组
teamById 本地根据 ID 查询指定群组
fetchTeamInfo 从云端获取指定的单个群组
fetchTeamInfoList 从云端获取指定的批量群组
searchTeamWithOption 搜索与关键字匹配的所有群
此文档是否对你有帮助?
有帮助
我要吐槽
  • 群组相关事件监听
  • 实现流程
  • 创建群组
  • 加入群组
  • 邀请入群
  • 申请入群
  • 转让群组
  • 退出群组
  • 踢人出群
  • 主动退群
  • 解散群组
  • 修改群组信息
  • 修改群组的单个属性信息
  • 修改群组的多个属性信息
  • 修改本地群组信息
  • 查询群组信息
  • 查询所有群信息
  • 本地查询自己加入的所有群组
  • 本地根据 ID 查询指定群组
  • 从云端查询指定群组
  • 群组检索
  • API 参考