用户信息托管
本文档介绍如何使用融云即时通讯 Flutter IMLib SDK 管理用户信息。您可以通过本文档了解用户信息的设置、查询、权限管理,以及信息变更的订阅与监听功能。
提示
此功能在 5.24.3 版本及以上支持。
开通服务
使用此功能前,您需要在融云控制台开通信息托管服务。
管理用户信息
您可以修改或查询自己的用户信息,也可以批量查询其他用户的信息。
设置用户信息
通过 updateMyUserProfile
方法修改自己的用户信息。
参数说明
参数 | 类型 | 说明 |
---|---|---|
profile | RCIMIWUserProfile | 待更新的用户信息对象 |
callback | IRCIMIWUpdateMyUserProfileCallback | 结果回调 |
下表为 RCIMIWUserProfile
的主要属性:
属性名 | 类型 | 说明 |
---|---|---|
name | String | 昵称,长度不超过 32 个字符 |
portraitUri | String | 头像地址,长度不超过 128 个字符 |
uniqueId | String | 用户应用号,支持大小写字母、数字,长度不超过 32 个字符。SDK 不支持设置此字段 |
email | String | Email,长度不超过 128 个字符 |
birthday | String | 生日,长度不超过 32 个字符 |
gender | RCIMIWUserGender | 性别:unknown 0、male 1、female 2 |
location | String | 所在地,长度不超过 32 个字符 |
role | int | 角色,0~100 内整数 |
level | int | 级别,0~100 内整数 |
userExtProfile | Map | 自定义扩展信息(Key/Value),Key:字母数字,不超过 32 个字符且在 AppKey 下唯一;Value:字符串,不超过 256 个字符 |
示例代码:
Dart
final RCIMIWUserProfile profile = RCIMIWUserProfile.create(
name: 'Tom',
portraitUri: 'https://example.com/avatar.png',
);
final IRCIMIWUpdateMyUserProfileCallback callback = IRCIMIWUpdateMyUserProfileCallback(
onSuccess: () {
// 更新成功
},
onError: (int? errorCode, List<String>? errorKeys) {
// 更新失败
},
);
final int? ret = await engine.updateMyUserProfile(profile, callback: callback);
批量获取用户信息
一次最多可查询 20 个用户的信息。
参数说明
参数 | 类型 | 说明 |
---|---|---|
userIds | List<String> | 用户 ID 列表,最多 20 个 |
callback | IRCIMIWGetUserProfilesCallback | 结果回调 |
Dart
final List<String> userIds = <String>["user1", "user2", "user3"];
final IRCIMIWGetUserProfilesCallback callback = IRCIMIWGetUserProfilesCallback(
onSuccess: (List<RCIMIWUserProfile>? users) {
// 查询成功
},
onError: (int? code) {
// 查询失败
},
);
final int? ret = await engine.getUserProfiles(userIds, callback: callback);
获取当前用户信息
参数说明
参数 | 类型 | 说明 |
---|---|---|
callback | IRCIMIWGetMyUserProfileCallback | 结果回调 |
Dart
final IRCIMIWGetMyUserProfileCallback callback = IRCIMIWGetMyUserProfileCallback(
onSuccess: (RCIMIWUserProfile? me) {
// 查询成功
},
onError: (int? code) {
// 查询失败
},
);
final int? ret = await engine.getMyUserProfile(callback: callback);
管理用户权限
您可以设置和获取用户信息的可见性权限。权限类型使用 RCIMIWUserProfileVisibility
表示:
枚举值 | 用户权限 |
---|---|
notSet | 未设置:以 AppKey 权限设置为准(默认) |
invisible | 都不可见:任何人都不能搜索到我的用户信息,名称、头像除外 |
everyone | 所有人:应用中任何用户都可查看我的用户信息 |
friendVisible | 仅好友可见:仅好友列表中的用户可查看我的用户信息 |
设置用户权限
参数说明
参数 | 类型 | 说明 |
---|---|---|
visibility | RCIMIWUserProfileVisibility | 可见性设置 |
callback | IRCIMIWUpdateMyUserProfileVisibilityCallback | 结果回调 |
Dart
final IRCIMIWUpdateMyUserProfileVisibilityCallback callback = IRCIMIWUpdateMyUserProfileVisibilityCallback(
onSuccess: () {
// 设置成功
},
onError: (int? code) {
// 设置失败
},
);
final int? ret = await engine.updateMyUserProfileVisibility(
RCIMIWUserProfileVisibility.everyone,
callback: callback,
);
获取用户权限
参数说明
参数 | 类型 | 说明 |
---|---|---|
callback | IRCIMIWGetMyUserProfileVisibilityCallback | 结果回调(visibility 为枚举下标) |
Dart
final IRCIMIWGetMyUserProfileVisibilityCallback callback = IRCIMIWGetMyUserProfileVisibilityCallback(
onSuccess: (int? visibility) {
// 获取成功(可根据 index 转为 RCIMIWUserProfileVisibility.values[visibility!])
},
onError: (int? code) {
// 获取失败
},
);
final int? ret = await engine.getMyUserProfileVisibility(callback: callback);
搜索用户
您可以通过用户应用号(uniqueId
)精确搜索用户:
参数说明
参数 | 类型 | 说明 |
---|---|---|
uniqueId | String | 用户应用号 |
callback | IRCIMIWSearchUserProfileByUniqueIdCallback | 结果回调(未找到将返回错误码) |
Dart
final IRCIMIWSearchUserProfileByUniqueIdCallback callback = IRCIMIWSearchUserProfileByUniqueIdCallback(
onSuccess: (RCIMIWUserProfile? user) {
// 查询成功
},
onError: (int? code) {
// 查询失败
},
);
final int? ret = await engine.searchUserProfileByUniqueId('uniqueId', callback: callback);
管理用户信息和权限变更订阅
订阅用户信息和权限变更
- 定义订阅用户 ID 列表:一次最多订阅 200 个;订阅的用户总数最多 1000 个;单个用户最多被 5000 个用户订阅。
- 设置订阅时间:范围为 60 秒到 2592000 秒。
- 指定订阅类型:
RCIMIWSubscribeType.userProfile
。 - 调用
subscribeEvent
执行订阅。
参数说明
参数 | 类型 | 说明 |
---|---|---|
request | RCIMIWSubscribeEventRequest | 订阅请求 |
callback | IRCIMIWSubscribeEventCallback | 结果回调 |
RCIMIWSubscribeEventRequest
字段
字段 | 类型 | 说明 |
---|---|---|
subscribeType | RCIMIWSubscribeType | 用户信息托管:userProfile(2) |
expiry | int | 订阅时长(秒),范围 [60~2592000] |
userIds | List<String> | 待订阅的用户 ID,单次最多 200 个 |
Dart
final RCIMIWSubscribeEventRequest request = RCIMIWSubscribeEventRequest.create(
subscribeType: RCIMIWSubscribeType.userProfile,
expiry: 180000,
userIds: <String>["user1", "user2", "user3"],
);
final IRCIMIWSubscribeEventCallback callback = IRCIMIWSubscribeEventCallback(
onSuccess: () {
// 订阅成功
},
onError: (int? code, List<String>? failedUserIds) {
// 订阅失败
},
);
final int? ret = await engine.subscribeEvent(request, callback: callback);
取消用户信息和权限订阅
参数说明
参数 | 类型 | 说明 |
---|---|---|
request | RCIMIWSubscribeEventRequest | 取消订阅请求 |
callback | IRCIMIWSubscribeEventCallback | 结果回调 |
RCIMIWSubscribeEventRequest
字段
字段 | 类型 | 说明 |
---|---|---|
subscribeType | RCIMIWSubscribeType | 用户信息托管:userProfile(2) |
userIds | List<String> | 需取消订阅的用户 ID,单次最多 200 个 |
expiry | int | 无需传(忽略) |
Dart
final RCIMIWSubscribeEventRequest request = RCIMIWSubscribeEventRequest.create(
subscribeType: RCIMIWSubscribeType.userProfile,
userIds: <String>["user1", "user2", "user3"],
);
final IRCIMIWSubscribeEventCallback callback = IRCIMIWSubscribeEventCallback(
onSuccess: () {
// 取消订阅成功
},
onError: (int? code, List<String>? failedUserIds) {
// 取消订阅失败
},
);
final int? ret = await engine.unSubscribeEvent(request, callback: callback);
查询指定用户的订阅状态
参数说明
参数 | 类型 | 说明 |
---|---|---|
request | RCIMIWSubscribeEventRequest | 查询请求 |
callback | IRCIMIWQuerySubscribeEventCallback | 结果回调 |
RCIMIWSubscribeEventRequest
字段
字段 | 类型 | 说明 |
---|---|---|
subscribeType | RCIMIWSubscribeType | 用户信息托管:userProfile(2) |
userIds | List<String> | 待查询的用户 ID,单次最多 200 个 |
expiry | int | 无需传(忽略) |
Dart
final RCIMIWSubscribeEventRequest request = RCIMIWSubscribeEventRequest.create(
subscribeType: RCIMIWSubscribeType.userProfile,
userIds: <String>["user1", "user2", "user3"],
);
final IRCIMIWQuerySubscribeEventCallback callback = IRCIMIWQuerySubscribeEventCallback(
onSuccess: (List<RCIMIWSubscribeInfoEvent>? events) {
// 查询成功
},
onError: (int? code) {
// 查询失败
},
);
final int? ret = await engine.querySubscribeEvent(request, callback: callback);
分页查询已订阅用户信息托管的状态信息
您可通过 querySubscribeEventByPage
方法分页查询已订阅用户信息托管的状态信息。
参数说明
参数 | 类型 | 说明 |
---|---|---|
request | RCIMIWSubscribeEventRequest | 查询请求(仅需设置订阅类型) |
pageSize | int | 分页大小,范围 [1~200] |
startIndex | int | 第一页 0,下一页传已返回总数 |
callback | IRCIMIWQuerySubscribeEventCallback | 结果回调 |
RCIMIWSubscribeEventRequest
字段
字段 | 类型 | 说明 |
---|---|---|
subscribeType | RCIMIWSubscribeType | 用户信息托管:userProfile(2) |
userIds | List<String> | 无需传(忽略) |
expiry | int | 无需传(忽略) |
Dart
final RCIMIWSubscribeEventRequest request = RCIMIWSubscribeEventRequest.create(
subscribeType: RCIMIWSubscribeType.userProfile,
);
const int pageSize = 20;
const int startIndex = 0;
final IRCIMIWQuerySubscribeEventCallback callback = IRCIMIWQuerySubscribeEventCallback(
onSuccess: (List<RCIMIWSubscribeInfoEvent>? events) {
// 查询成功
},
onError: (int? code) {
// 查询失败
},
);
final int? ret = await engine.querySubscribeEventByPage(
request,
pageSize,
startIndex,
callback: callback,
);
监听订阅事件
建议在连接之前设置监听器。根据 RCIMIWSubscribeType
判断:等于 userProfile
表示用户信息托管。
参数说明
参数/属性 | 类型 | 说明 |
---|---|---|
onEventChange | Function(List<RCIMIWSubscribeInfoEvent>? subscribeEvents) | 订阅事件变化回调 |
onSubscriptionSyncCompleted | Function(RCIMIWSubscribeType? type) | 订阅数据同步完成回调 |
onSubscriptionChangedOnOtherDevices | Function(List<RCIMIWSubscribeEvent>? subscribeEvents) | 其他设备订阅信息变更回调 |
提示
当前支持的订阅类型:
- 在线状态:
onlineStatus(1)
- 用户信息托管:
userProfile(2)
Dart
engine.onEventChange = (List<RCIMIWSubscribeInfoEvent>? subscribeEvents) {
// 用户信息托管变更
};
engine.onSubscriptionSyncCompleted = (RCIMIWSubscribeType? type) {
// 订阅数据同步完成
};
engine.onSubscriptionChangedOnOtherDevices = (
List<RCIMIWSubscribeEvent>? subscribeEvents,
) {
// 其他设备订阅信息变更
};