信息托管概述

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

适用场景​

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

前置条件​

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

rev28 契约状态​

已实现 / 部分覆盖

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

组件:UserInfoProvider​

用户资料托管:宿主按 userId 返回昵称/头像/扩展

契约项内容
Propsprovider:(userId) async -> IMPKitUserInfo?
Eventsresolve(userId,info)
Behaviors会话列表/聊天页/头像/引用优先调用 provider;缺失时回退 userId 首字;provider 抛错不阻断消息渲染,记录日志并回退

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

语言签名
Swiftprotocol IMPUserInfoProvider: AnyObject { func userInfo(userId: String) async -> IMPKitUserInfo? }
Objective-C@protocol IMPOSUserInfoProvider <NSObject> - (void)userInfoWithUserId:(NSString *)userId completion:(void (^)(IMPOSKitUserInfo * _Nullable))completion; @end

Swift 接入示例​

Swift
final class HostentrustoverviewUserInfoProvider: IMPUserInfoProvider {
    func userInfo(userId: String) async -> IMPKitUserInfo? {
        IMPKitUserInfo(userId: userId, name: "Bob", avatarUrl: nil)
    }
}
let userInfoProvider: IMPUserInfoProvider = HostentrustoverviewUserInfoProvider()

Objective-C 接入示例​

Objective-C
@interface IMPOSHostentrustoverviewUserInfoProvider : NSObject <IMPOSUserInfoProvider>
@end
@implementation IMPOSHostentrustoverviewUserInfoProvider
- (void)userInfoWithUserId:(NSString *)userId completion:(void (^)(IMPOSKitUserInfo * _Nullable))completion {
    completion(nil);
}
@end

组件: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 HostentrustoverviewGroupInfoProvider: IMPGroupInfoProvider {
    func groupInfo(groupId: String) async -> IMPKitGroupInfo? {
        IMPKitGroupInfo(groupId: groupId, name: "产品群", avatarUrl: nil)
    }
}
let groupInfoProvider: IMPGroupInfoProvider = HostentrustoverviewGroupInfoProvider()

Objective-C 接入示例​

Objective-C
@interface IMPOSHostentrustoverviewGroupInfoProvider : NSObject <IMPOSGroupInfoProvider>
@end
@implementation IMPOSHostentrustoverviewGroupInfoProvider
- (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 HostentrustoverviewGroupMemberProvider: IMPGroupMemberProvider {
    func memberInfo(groupId: String, userId: String) async -> IMPKitGroupMemberInfo? {
        IMPKitGroupMemberInfo(groupId: groupId, userId: userId, name: "Bob", groupNickname: nil)
    }
}
let groupMemberProvider: IMPGroupMemberProvider = HostentrustoverviewGroupMemberProvider()

Objective-C 接入示例​

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

注入方式与回退策略​

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

回退策略示例​

Swift
func fallbackDisplayName(_ userId: String) -> String {
    userId.isEmpty ? "未知用户" : String(userId.prefix(1))
}
print(fallbackDisplayName("user2"))

与融云对应页 / 差异​

项内容
融云页面ios-imkit/info-entrust/entrust-overview(信息托管概述)
融云接口状态部分覆盖(主路径可用,子能力缺失)
我方对应UserInfoProvider、GroupInfoProvider、GroupMemberProvider
差异说明rev27 features:3 个 provider 协议已冻结;本页覆盖资料托管契约,群管理/转让/特别关注仍边界

相关错误码​

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

相关页面​