群组功能
更新时间: 2024/08/20 15:45:46
本文已废弃,请前往群组概述等群组功能文档查看相关说明。
群组功能概述
群组功能对应的管理类为 NIMTeamManager
。NIMTeamManager
提供了高级群 (Advanced) 形式的群聊功能。
高级群拥有完善的成员权限体系及管理功能,群内所有用户根据权限分为群主、管理员、以及群成员。
- NIMTeam原型:
objc@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
创建群组
objc@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 |
maxMemberCountLimitation | NSUInteger | 设置群最大人数上限。默认为0,表示使用默认人数上限 |
antispamBusinessId | NSString | 对某些资料内容另外的反垃圾的业务ID |
获取群组
NIM SDK 在程序启动时会对本地群信息进行同步,所以只需要调用本地缓存接口获取群就可以了。 SDK 提供了批量获取自己的群接口、以及根据单个群 id 查询的接口。同样 SDK 也提供了远程获取群信息的接口。
从本地获取所有群组
原型
objc@protocol NIMTeamManager <NSObject>
/**
* 获取所有群组
*
* @return 返回所有群组
*/
- (nullable NSArray<NIMTeam *> *)allMyTeams;
@end
从本地获取指定群组
objc@protocol NIMTeamManager <NSObject>
/**
* 根据群组ID获取具体的群组信息
*
* @param teamId 群组ID
*
* @return 群组信息
*/
- (nullable NIMTeam *)teamById:(NSString *)teamId;
@end
从云端获取指定群组
objc@protocol NIMTeamManager <NSObject>
/**
* 获取群信息
*
* @param teamId 群组ID
* @param completion 完成后的回调
*/
- (void)fetchTeamInfo:(NSString *)teamId
completion:(nullable NIMTeamFetchInfoHandler)completion;
@end
参数列表
参数 | 类型 | 说明 |
---|---|---|
teamId | NSString | 群组 ID |
completion | NIMTeamFetchInfoHandler | 请求完成回调 |
如果获取的群是属于自己的群的话,则会更新本地缓存的群数据。
解散群组
objc@protocol NIMTeamManager <NSObject>
/**
* 解散群组
*
* @param teamId 群组ID
* @param completion 完成后的回调
*/
- (void)dismissTeam:(NSString*)teamId
completion:(NIMTeamHandler)block
@end
参数列表
参数 | 类型 | 说明 |
---|---|---|
teamId | NSString | 群组 ID |
completion | NIMTeamHandler | 完成后的回调 |
群解散后,所有群用户关于此群会话会被保留,但是不能够在此群会话里收发消息。
群成员管理
入群操作
申请加入群组
主动申请入群(仅限高级群)
objc@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
给群管理员。
管理员可以选择通过或者拒绝申请。
验证入群申请
通过申请(仅限高级群)
objc@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 | 完成后的回调 |
通过申请后,会自动加入进群组,并在群组中产生一条群通知消息
拒绝申请(仅限高级群)
objc@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
给申请者。
邀请加入群组
objc@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<NSString *> | 用户 ID 列表 |
teamId | NSString | 群组 ID |
postscript | NSString | 邀请附言 |
attach | NSString | 扩展消息 |
completion | NIMTeamMemberHandler | 完成后的回调 |
请求完成后,云信服务器会下发一条系统消息到目标用户,目标用户可以选择同意或者拒绝入群。
验证入群邀请
被人邀请进群后,会收到一条系统通知 NIMSystemNotification
, 其类型属性 type
为 NIMSystemNotificationTypeTeamInvite
。在通知中,可以获取如下信息
参数列表
参数 | 类型 | 说明 |
---|---|---|
sourceID | NSString | 邀请人 ID |
targetID | NSString | 邀请进入的群组 ID |
postscript | NSString | 邀请附言 |
同意群邀请(仅限高级群)
objc@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 | 完成后的回调 |
同意群邀请后,会自动加入进群组,并在群组中产生一条群通知消息
群通知消息解析过程示例
objc //通过回调收到 NIMMessage,变量名为 message
NIMNotificationObject *object = message.messageObject;
if (message.messageType == NIMMessageTypeNotification && object.notificationType == NIMNotificationTypeTeam)
{
//群通知消息解析
NIMTeamNotificationContent *content = (NIMTeamNotificationContent*)object.content;
//对群通知的具体内容 NIMTeamNotificationContent 进行业务
...
}
拒绝群邀请(仅限高级群)
objc/**
* 拒绝入群邀请
*
* @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
。
查询群成员入群邀请人
objc/**
* 获取群成员邀请人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 | 完成后的回调 |
踢人出群
objc@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<NSString *> | 需要移除的用户ID列表 |
teamId | NSString | 群组 ID |
completion | NIMTeamHandler | 完成后的回调 |
主动退群
objc@protocol NIMTeamManager <NSObject>
/**
* 退出群组
*
* @param teamId 群组ID
* @param completion 完成后的回调
*/
- (void)quitTeam:(NSString *)teamId
completion:(NIMTeamHandler)completion
@end
参数列表
参数 | 类型 | 说明 |
---|---|---|
teamId | NSString | 群组 ID |
completion | NIMTeamHandler | 完成后的回调 |
用户退群成功后,相关会话信息仍然会保留,但不再能接收关于此群的消息。
获取群组成员
群组成员信息不同于用户资料,主要是和群组关联的信息。同一个用户在不同群组中自己的群成员信息也不一样。群成员信息包括群昵称,进群时间,群成员类型等等。
原型
objc@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会把数据缓存在本地。
获取群组成员列表
objc@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: 回调。
获取到的群成员只有云信服务器托管的群相关数据,需要开发者结合自己管理的用户数据进行界面显示。
若要直接从云端获取群组成员列表,可以使用下列接口:
objc@protocol NIMTeamManager <NSObject>
/**
* 通过网络请求获取群组成员
*
* @param teamId 群组ID
* @param completion 完成后的回调
*/
- (void)fetchTeamMembersFromServer:(NSString *)teamId
completion:(nullable NIMTeamMemberHandler)completion
@end
通过网络请求获取群成员列表,不同于fetchTeamMembers:completion这个接口是个必然带网络请求的异步操作(增量请求) 同时这个接口会去请求本地没有缓存的群用户的资料信息,但不会触发 - (void)onUserInfoChanged: 回调。
获取指定群组成员
SDK 支持获取指定某个群成员对象:
objc@protocol NIMTeamManager <NSObject>
/**
* 获取单个群成员信息。返回本地缓存的群成员信息,如果本地没有相应数据则返回 nil。
*
* @param userId 群成员的id
* @param teamId 群组id
*/
- (nullable NIMTeamMember *)teamMember:(NSString *)userId
inTeam:(NSString *)teamId
@end
修改群成员资料
修改群成员昵称
objc@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 | 完成后的回调 |
修改群成员自定义属性
objc@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 | 完成后的回调 |
修改后,其他在线用户自动同步获得修改后的属性。
监听群成员变化
objc@protocol NIMTeamManagerDelegate <NSObject>
/**
* 群组成员变动回调,包括数量增减以及成员属性变动
*
* @param team 变动的群组
*/
- (void)onTeamMemberChanged:(NIMTeam *)team;
@end
判断自己是否在群里
objc@protocol NIMTeamManager <NSObject>
/**
* 自己是否在该群
*
*/
- (BOOL)isMyTeam:(NSString *)teamId
@end
群主转让
objc@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 | 完成后的回调 |
添加管理员
objc@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 | 完成后的回调 |
移除管理员
objc@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<NSString *> | 需要移除管理员的用户 ID 列表 |
completion | NIMTeamHandler | 完成后的回调 |
禁言
禁言指定成员
objc@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 | 完成后的回调 |
群整体禁言
禁言全体普通成员
objc/**
* 禁言群全体成员
*
* @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 | 完成后的回调 |
该接口用于操作对于整个群的普通成员的禁言、解禁,只有高级群的群主有这个权限。
查询被禁言情况
- 查询禁言用户列表
只有通过 禁言指定成员 方法被禁言的群成员才会进入此列表。
objc@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。
群资料管理
编辑群组资料
修改群名称
objc@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 | 完成后的回调 |
修改群头像
objc@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 | 完成后的回调 |
群组头像若要上传到云信服务器上,则需要使用头像资源处理。
修改群介绍
objc@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 | 完成后的回调 |
修改群公告
objc@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 | 完成后的回调 |
修改群验证方式
objc@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 | 完成后的回调 |
修改被邀请人验证方式
objc@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 | 完成后的回调 |
修改谁可以邀请其他人入群
objc@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 | 完成后的回调 |
修改谁可以修改群资料
objc@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 | 完成后的回调 |
修改谁可以修改群自定义属性
objc@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 提供了群信息的拓展接口,开发者可以自行定义内容。
objc@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 | 完成后的回调 |
修改群信息
SDK 提供了修改群信息的批量接口。
objc@protocol NIMTeamManager <NSObject>
/**
* 更新群信息
*
* @param values 需要更新的群信息键值对
* @param teamId 群组ID
* @param completion 完成后的回调
* @discussion 这个接口可以一次性修改群的多个属性,如名称,公告等,传入的数据键值对是 {@(NIMTeamUpdateTag) : NSString},无效数据将被过滤
*/
- (void)updateTeamInfos:(NSDictionary<NSNumber *,NSString *> *)values
teamId:(NSString *)teamId
completion:(nullable NIMTeamHandler)completion;
@end
- NIMTeamUpdateTag 原型
/**
* 群信息更新字段
*/
typedef NS_ENUM(NSInteger, NIMTeamUpdateTag){
/**
* 群名
*/
NIMTeamUpdateTagName = 3,
/**
* 群简介
*/
NIMTeamUpdateTagIntro = 14,
/**
* 群公告
*/
NIMTeamUpdateTagAnouncement = 15,
/**
* 群验证方式
*/
NIMTeamUpdateTagJoinMode = 16,
/**
* 客户端自定义拓展字段
*/
NIMTeamUpdateTagClientCustom = 18,
/**
* 服务器自定义拓展字段
* @discussion SDK 无法直接修改这个字段, 请调用服务器接口
*/
NIMTeamUpdateTagServerCustom = 19,
/**
* 头像
*/
NIMTeamUpdateTagAvatar = 20,
/**
* 被邀请模式
*/
NIMTeamUpdateTagBeInviteMode = 21,
/**
* 邀请权限,仅高级群有效
*/
NIMTeamUpdateTagInviteMode = 22,
/**
* 更新群信息权限,仅高级群有效
*/
NIMTeamUpdateTagUpdateInfoMode = 23,
/**
* 更新群客户端自定义拓展字段权限
*/
NIMTeamUpdateTagUpdateClientCustomMode = 24,
/**
* 群全体禁言
*/
NIMTeamUpdateTagMuteMode = 100,
/**
* 对某些资料内容另外的反垃圾的业务ID
*/
NIMTeamUpdateTagAntispamBusinessId = 101,
};
- 参数
参数 | 类型 | 说明 |
---|---|---|
values | NSString | 需要更新的群信息键值对 |
teamId | NSString | 群组 ID |
completion | NIMTeamHandler | 完成后的回调 |
监听群组变化
- 群组资料更新回调
objc@protocol NIMTeamManagerDelegate <NSObject>
/**
* 群组更新回调
*
* @param team 更新的群组
*/
- (void)onTeamUpdated:(NIMTeam *)team
@end
- 群组增加回调
objc@protocol NIMTeamManagerDelegate <NSObject>
/**
* 群组增加回调
*
* @param team 更新的群组
*/
- (void)onTeamAdded:(NIMTeam *)team;
@end
- 群组移除回调
objc@protocol NIMTeamManagerDelegate <NSObject>
/**
* 群组移除回调
*
* @param team 更新的群组
*/
- (void)onTeamRemoved:(NIMTeam *)team;
@end
群组通知消息
群组通知是一种消息类型 ( NIMMessageTypeNotification
) ,用户入群成功之后,任何关于群的变动(含自己入群的动作),云信服务器都会下发一条群通知消息。群通知消息和其他消息一样,可从 NIMConversationManager
提供的消息查询接口中获取。
目前支持触发群通知消息的事件有:
NIMTeamOperationType枚举 | 事件说明 |
---|---|
NIMTeamOperationTypeInvite | 邀请成员入群(无需被邀请人同意的模式) |
NIMTeamOperationTypeAcceptInvitation | 接受邀请后入群(需要被邀请人同意的模式) |
NIMTeamOperationTypeKick | 被踢出群 |
NIMTeamOperationTypeLeave | 退出群 |
NIMTeamOperationTypeUpdate | 群信息资料更新 |
NIMTeamOperationTypeDismiss | 解散群 |
NIMTeamOperationTypeApplyPass | 申请加入群成功 |
NIMTeamOperationTypeTransferOwner | 转让群主 |
NIMTeamOperationTypeAddManager | 添加管理员 |
NIMTeamOperationTypeRemoveManager | 移除管理员 |
NIMTeamOperationTypeMute | 群内禁言/解禁 |
群组通知解析步骤:
- 通过
NIMMessage
的messageType
判断是否为通知消息。 - 将
NIMMessage
中的messageObject
字段,强类型转换为NIMNotificationObject
。 - 解析
NIMNotificationObject
中的content
字段,得到父类NIMNotificationContent
。 - 通过
NIMNotificationContent
中的notificationType
字段,判断是否为NIMNotificationTypeTeam
。 - 将父类
NIMNotificationContent
强类型转化为NIMTeamNotificationContent
。 - 群组通知的具体类型可以通过
NIMTeamNotificationContent
的operationType
解析,具体类型参见上方表格。 - SDK 在收到群通知之后,会对本地缓存的群组相关信息做出对应的修改,然后触发与修改相对应的委托事件回调。
群组通知内容 NIMTeamNotificationContent
的字段说明:
operationType
: 群组通知事件类型,表示具体属于哪一种群组通知,通知种类由NIMTeamOperationType
枚举定义。sourceID
: 事件的操作者 ID ,表示是谁主动执行了这个操作。targetIDs
: 事件的被操作者 ID 列表,表示这个操作的承受者。notifyExt
: 通知的扩展字段,这个扩展字段是由每个触发通知的操作接口定义的。目前只能由服务器的操作接口去定义这个字段。例如:群组踢出用户,可以调用服务器 HTTP 接口,并传入通知扩展参数。调用后会触发用户被踢出群组的事件消息通知,此时,收到消息的其他群成员就可以通过读取NIMTeamNotificationContent
的notifyExt
字段来获取踢出时定义的扩展字段。attachment
: 有些通知比较复杂,需要一些额外信息来辅助上层显示,目前有额外信息的群通知类型为:- 群更新通知 NIMTeamOperationTypeUpdate:额外信息被封装为
NIMUpdateTeamInfoAttachment
类型。群整体禁言属于此类型。 - 群禁言通知 NIMTeamOperationTypeMute:额外信息被封装为
NIMMuteTeamMemberAttachment
类型。
- 群更新通知 NIMTeamOperationTypeUpdate:额外信息被封装为
值得一提的是:针对群更新通知 NIMTeamOperationTypeUpdate,需要判断 NIMUpdateTeamInfoAttachment 内的具体内容,来判断具体更新的是哪个群信息,可参见Demo的解析:
objccase 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 表现 (是否响铃等)。
objc@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 | 只接受管理员的群消息提醒 |
查询接口
objc@protocol NIMTeamManager <NSObject>
/**
* 查询群免打扰状态
*
* @param teamId 群Id
*
* @return 群提醒状态
*/
- (NIMTeamNotifyState)notifyStateForNewMsg:(NSString *)teamId;
@end
群组检索
SDK 支持对根据关键字 检索群:
objc@protocol NIMTeamManager <NSObject>
/**
* 检索群
*
* @param option 检索选项
*
* @param completion 完成后的回调
*/
- (void)searchTeamWithOption:(NIMTeamSearchOption *)option
completion:(NIMTeamSearchHandler)completion;
@end
NIMTeamSearchOption 参数介绍:
类型 | 参数 | 说明 |
---|---|---|
NIMTeamSearchContentOption | searchContentOption | 搜索文本的匹配区域 |
BOOL | ignoreingCase | 忽略大小写,默认:YES |
NSString | searchContent | 搜索文本 |
NIMTeamSearchContentOption 枚举介绍:
objctypedef NS_OPTIONS(NSInteger, NIMTeamSearchContentOption ) {
// 群名检索
NIMTeamSearchContentOptiontName = 1 < < 0,
// 群id检索
NIMTeamSearchContentOptiontId = 1 < < 1,
// 群名与群id均检索
NIMTeamSearchContentOptionTeamAll = NIMTeamSearchContentOptiontName | NIMTeamSearchContentOptiontId,
};