群组页面

群组页面:信息托管页面用 IMKit 的列表/详情能力承载好友、群组与用户资料;页面级路由与数据编排由宿主完成。

适用场景​

  • 快速搭出通讯录/群组/用户资料页
  • 需要与既有账号体系打通
  • 需要搜索、申请、管理的完整交互

前置条件​

  • 已导入 IMKit 并完成初始化
  • IMLib 已连接且有好友/群组数据
  • 宿主提供导航容器

rev28 契约状态​

已实现 / 部分覆盖

rev28 已冻结 IMKit features 8 组件与 Swift/ObjC 绑定;本页覆盖信息托管/群管理/联系人/多选/转发/引用的契约接入,未覆盖的特别关注/搜索用户等仍按能力边界说明。

组件:GroupInfoProvider​

群资料托管:群名称/头像/公告

契约项内容
Propsprovider:(groupId) async -> IMPKitGroupInfo?
Eventsresolve(groupId,info)
Behaviors群会话标题/头像使用 provider;缺失回退 groupId;群资料更新可主动 invalidate 缓存

真实签名(bindings.ios.imkit.features)​

语言签名
Swiftprotocol IMPGroupInfoProvider: AnyObject { func groupInfo(groupId: String) async -> IMPKitGroupInfo? }
Objective-C@protocol IMPOSGroupInfoProvider <NSObject> - (void)groupInfoWithGroupId:(NSString *)groupId completion:(void (^)(IMPOSKitGroupInfo * _Nullable))completion; @end

Swift 接入示例​

Swift
final class HostentrustgroupGroupInfoProvider: IMPGroupInfoProvider {
    func groupInfo(groupId: String) async -> IMPKitGroupInfo? {
        IMPKitGroupInfo(groupId: groupId, name: "产品群", avatarUrl: nil)
    }
}
let groupInfoProvider: IMPGroupInfoProvider = HostentrustgroupGroupInfoProvider()

Objective-C 接入示例​

Objective-C
@interface IMPOSHostentrustgroupGroupInfoProvider : NSObject <IMPOSGroupInfoProvider>
@end
@implementation IMPOSHostentrustgroupGroupInfoProvider
- (void)groupInfoWithGroupId:(NSString *)groupId completion:(void (^)(IMPOSKitGroupInfo * _Nullable))completion {
    completion(nil);
}
@end

组件:GroupMemberProvider​

群成员资料托管:成员昵称/群昵称/头像

契约项内容
Propsprovider:(groupId,userId) async -> IMPKitGroupMemberInfo?
Eventsresolve(groupId,userId,info)
Behaviors群聊气泡/已读明细/输入状态使用成员资料;成员资料缓存按会话维度失效

真实签名(bindings.ios.imkit.features)​

语言签名
Swiftprotocol IMPGroupMemberProvider: AnyObject { func memberInfo(groupId: String, userId: String) async -> IMPKitGroupMemberInfo? }
Objective-C@protocol IMPOSGroupMemberProvider <NSObject> - (void)memberInfoWithGroupId:(NSString *)groupId userId:(NSString *)userId completion:(void (^)(IMPOSKitGroupMemberInfo * _Nullable))completion; @end

Swift 接入示例​

Swift
final class HostentrustgroupGroupMemberProvider: IMPGroupMemberProvider {
    func memberInfo(groupId: String, userId: String) async -> IMPKitGroupMemberInfo? {
        IMPKitGroupMemberInfo(groupId: groupId, userId: userId, name: "Bob", groupNickname: nil)
    }
}
let groupMemberProvider: IMPGroupMemberProvider = HostentrustgroupGroupMemberProvider()

Objective-C 接入示例​

Objective-C
@interface IMPOSHostentrustgroupGroupMemberProvider : NSObject <IMPOSGroupMemberProvider>
@end
@implementation IMPOSHostentrustgroupGroupMemberProvider
- (void)memberInfoWithGroupId:(NSString *)groupId userId:(NSString *)userId completion:(void (^)(IMPOSKitGroupMemberInfo * _Nullable))completion {
    completion(nil);
}
@end

组件:GroupManagementController​

群管理页控制器:成员列表/加人/移除/禁言/管理员/转让/改名/公告/退群(仅调 IMLib 公开接口)

契约项内容
Propsclient:IMPClient groupId:String options?:{canManage:Bool}
EventsmembersChanged([IMPGroupMember]) groupInfoChanged(IMPGroup) error(Error)
BehaviorsloadMembers 分页/刷新;addMembers/removeMembers/muteMember/setAdmin/transferOwner/updateName/updateNotice/quitGroup 调用对应 IMLib op;权限不足/群不存在等错误透传;操作后刷新群资料与成员;不自行导航

真实签名(bindings.ios.imkit.features)​

语言签名
SwiftIMPGroupManagementController(client: IMPClient, groupId: String, options: IMPGroupManagementOptions?)
Objective-C- (instancetype)initWithClient:(IMPOSClient *)client groupId:(NSString *)groupId options:(IMPOSGroupManagementOptions *)options;

Swift 接入示例​

Swift
let groupManager = IMPGroupManagementController(client: client, groupId: "g_1001", options: nil)

Objective-C 接入示例​

Objective-C
IMPOSGroupManagementController *groupManager = [[IMPOSGroupManagementController alloc] initWithClient:client groupId:@"g_1001" options:nil];

注入方式与回退策略​

  • 宿主实现 UserInfoProvider / GroupInfoProvider / GroupMemberProvider,并由宿主页面把 provider 注入 IMKit 渲染上下文;协议声明来自 bindings.ios.imkit.features。
  • provider 返回 nil 或抛错时回退 userId/groupId 首字;不阻断消息与列表渲染,记录日志。
  • 资料缓存由宿主控制 TTL;群/成员资料变更时主动 invalidate,下一次渲染重新拉取。

与融云对应页 / 差异​

项内容
融云页面ios-imkit/info-entrust/entrust-group(群组页面)
融云接口状态部分覆盖(主路径可用,子能力缺失)
我方对应GroupInfoProvider、GroupMemberProvider
差异说明群/成员资料通过 rev27 provider 托管;群管理/转让/特别关注页面仍边界

相关错误码​

错误码名称含义处理
1001INVALID_PARAMETER参数错误修正参数/权限后重试
1002INVALID_TOKENToken 无效或已过期修正参数/权限后重试
1007MESSAGE_TOO_LARGE消息体过大(上限 5KB)修正参数/权限后重试
1009GROUP_MUTED你已被禁言修正参数/权限后重试
1010SENSITIVE_WORD内容包含敏感词修正参数/权限后重试
3001SDK_NOT_CONNECTED长连接未就绪可重试(退避)
3002SDK_TIMEOUT请求超时可重试(退避)
3003SDK_NETWORK_ERROR网络错误可重试(退避)

相关页面​