权限控制群
权限控制群的特点是具有群主、管理员、普通群成员等角色。目前可控制的权限有:需要用户同意邀请才能加入这种群。
更多的权限控制,例如设置进群密码、需要群主或者管理员同意才能进入群等,目前还在测试中,接下来要发布的版本中即将包含。
YWTribeDescriptionParam *param = [[YWTribeDescriptionParam alloc] init]; param.tribeName = self.textFieldName.text; param.tribeNotice = self.textFieldBulletin.text; param.tribeType = YWTribeTypeNormal; __weak typeof(self) weakSelf = self; [self.ywTribeService createTribeWithDescription:param completion:^(YWTribe *tribe, NSError *error) { /// 提示创建结果 }];
您可以通过以下接口修改群成员的身份:
__weak typeof(self) weakSelf = self; [[self ywTribeService] setMember:member withRole:role fromTribe:self.tribe.tribeId completion:^(YWPerson *member, YWTribeMemberRole role, NSString *tribeId, NSError *error) { if (!error) { if (role == YWTribeMemberRoleManager) { // 设置管理员成功 } else if (role == YWTribeMemberRoleNormal) { // 取消管理员成功 } } }];
您可以通过如下接口监听身份变为群主或管理员的通知:
[self.ywTribeService addTribeOwnerDidChangeBlock:^(NSDictionary *userInfo) { NSString *tribeName = userInfo[YWTribeServiceKeyTribeName]; YWPerson *person = userInfo[YWTribeServiceKeyPerson]; YWPerson *master = userInfo[YWTribeServiceKeyPerson2]; NSString *message = nil; if (self.tribe.tribeType == YWTribeTypeMultipleChat) { message = [NSString stringWithFormat:@"群:%@ 中群主已由 %@ 变为 %@", tribeName, master.personId, person.personId]; } else { message = [NSString stringWithFormat:@"群:%@ 中群主 %@ 将 %@ 设置为管理员", tribeName, master.personId, person.personId]; } /// show message } forKey:self.description ofPriority:YWBlockPriorityDeveloper];
您可以通过如下接口监听被撤销管理员身份的通知:
[self.ywTribeService addTribeRemoveAdminBlock:^(NSDictionary *userInfo) { NSString *tribeName = userInfo[YWTribeServiceKeyTribeName]; YWPerson *person = userInfo[YWTribeServiceKeyPerson]; YWPerson *master = userInfo[YWTribeServiceKeyPerson2]; NSString *message = [NSString stringWithFormat:@"群:%@ 中群主 %@ 撤销了 %@ 的管理员身份", tribeName, master.personId, person.personId]; /// show message } forKey:self.description ofPriority:YWBlockPriorityDeveloper];
您可以通过以下接口修改加入群的校验类型,其中仅当校验类型为密码校验时,才需要将密码文本作为 checkInfo 参数传入:
NSString *password = (checkMode == YWTribeCheckModePassword) ? textField.text : nil; [[self ywTribeService] modifyCheckMode:(YWTribeCheckMode)checkMode checkInfo:password ofTribe:tribeId completion:^(NSString *tribeId, YWTribeCheckMode checkMode, NSError *error) { }];
入群验证类型的变更,同样会调用群信息变更的通知,所以可以用以下代码检查是否是入群校验类型发生了变化:
[[self ywTribeService] addTribeInfoDidUpdateBlock:^(NSDictionary *userInfo) { NSString *tribeId = userInfo[YWTribeServiceKeyTribeId]; if ([tribeId isEqualToString:weakSelf.tribeId]) { NSNumber *checkMode = userInfo[YWTribeServiceKeyTribeCheckMode]; if (checkMode) { // 验证类型发生了变更 } } } forKey:self.description ofPriority:YWBlockPriorityDeveloper];
[[self.IMCoreRef getTribeService] addInvitationFromTribeBlock:^(NSDictionary *userInfo) { /// TODO 提示用户 } forKey:self.description ofPriority:YWBlockPriorityDeveloper];
部分类型的群系统消息,如被邀请加入群的系统消息,不会存在于相应的群聊会话中,而是存在于全局统一的群系统消息会话中,如果要获取这些类型的消息,需要先获取群系统消息会话,然后如同使用其它聊天会话一样加载消息:
YWTribeSystemConversation *conversation = [[self ywTribeService] fetchTribeSystemConversation]; [conversation loadMoreMessages:10 completion:^(BOOL existMore) { ... }];
群系统消息会话中无法发送新消息,但可以用以下方法对状态为待处理状态的消息进行处理:
[[self ywTribeService] processTribeSystemMessageBody:messageBody toStatus:YWMessageBodyTribeSystemStatusAccepted completion:^(NSError *error) { ... }];