跳到主要内容

用户信息托管

本文档介绍如何使用融云即时通讯 Flutter IMLib SDK 管理用户信息。您可以通过本文档了解用户信息的设置、查询、权限管理,以及信息变更的订阅与监听功能。

提示

此功能在 5.24.3 版本及以上支持。

开通服务

使用此功能前,您需要在融云控制台开通信息托管服务。

管理用户信息

您可以修改或查询自己的用户信息,也可以批量查询其他用户的信息。

设置用户信息

通过 updateMyUserProfile 方法修改自己的用户信息。

参数说明

参数类型说明
profileRCIMIWUserProfile待更新的用户信息对象
callbackIRCIMIWUpdateMyUserProfileCallback结果回调

下表为 RCIMIWUserProfile 的主要属性:

属性名类型说明
nameString昵称,长度不超过 32 个字符
portraitUriString头像地址,长度不超过 128 个字符
uniqueIdString用户应用号,支持大小写字母、数字,长度不超过 32 个字符。SDK 不支持设置此字段
emailStringEmail,长度不超过 128 个字符
birthdayString生日,长度不超过 32 个字符
genderRCIMIWUserGender性别:unknown 0、male 1、female 2
locationString所在地,长度不超过 32 个字符
roleint角色,0~100 内整数
levelint级别,0~100 内整数
userExtProfileMap自定义扩展信息(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 个用户的信息。

参数说明

参数类型说明
userIdsList<String>用户 ID 列表,最多 20 个
callbackIRCIMIWGetUserProfilesCallback结果回调
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);

获取当前用户信息

参数说明

参数类型说明
callbackIRCIMIWGetMyUserProfileCallback结果回调
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仅好友可见:仅好友列表中的用户可查看我的用户信息

设置用户权限

参数说明

参数类型说明
visibilityRCIMIWUserProfileVisibility可见性设置
callbackIRCIMIWUpdateMyUserProfileVisibilityCallback结果回调
Dart
final IRCIMIWUpdateMyUserProfileVisibilityCallback callback = IRCIMIWUpdateMyUserProfileVisibilityCallback(
onSuccess: () {
// 设置成功
},
onError: (int? code) {
// 设置失败
},
);

final int? ret = await engine.updateMyUserProfileVisibility(
RCIMIWUserProfileVisibility.everyone,
callback: callback,
);

获取用户权限

参数说明

参数类型说明
callbackIRCIMIWGetMyUserProfileVisibilityCallback结果回调(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)精确搜索用户:

参数说明

参数类型说明
uniqueIdString用户应用号
callbackIRCIMIWSearchUserProfileByUniqueIdCallback结果回调(未找到将返回错误码)
Dart
final IRCIMIWSearchUserProfileByUniqueIdCallback callback = IRCIMIWSearchUserProfileByUniqueIdCallback(
onSuccess: (RCIMIWUserProfile? user) {
// 查询成功
},
onError: (int? code) {
// 查询失败
},
);

final int? ret = await engine.searchUserProfileByUniqueId('uniqueId', callback: callback);

管理用户信息和权限变更订阅

订阅用户信息和权限变更

  1. 定义订阅用户 ID 列表:一次最多订阅 200 个;订阅的用户总数最多 1000 个;单个用户最多被 5000 个用户订阅。
  2. 设置订阅时间:范围为 60 秒到 2592000 秒。
  3. 指定订阅类型:RCIMIWSubscribeType.userProfile
  4. 调用 subscribeEvent 执行订阅。

参数说明

参数类型说明
requestRCIMIWSubscribeEventRequest订阅请求
callbackIRCIMIWSubscribeEventCallback结果回调

RCIMIWSubscribeEventRequest 字段

字段类型说明
subscribeTypeRCIMIWSubscribeType用户信息托管:userProfile(2)
expiryint订阅时长(秒),范围 [60~2592000]
userIdsList<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);

取消用户信息和权限订阅

参数说明

参数类型说明
requestRCIMIWSubscribeEventRequest取消订阅请求
callbackIRCIMIWSubscribeEventCallback结果回调

RCIMIWSubscribeEventRequest 字段

字段类型说明
subscribeTypeRCIMIWSubscribeType用户信息托管:userProfile(2)
userIdsList<String>需取消订阅的用户 ID,单次最多 200 个
expiryint无需传(忽略)
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);

查询指定用户的订阅状态

参数说明

参数类型说明
requestRCIMIWSubscribeEventRequest查询请求
callbackIRCIMIWQuerySubscribeEventCallback结果回调

RCIMIWSubscribeEventRequest 字段

字段类型说明
subscribeTypeRCIMIWSubscribeType用户信息托管:userProfile(2)
userIdsList<String>待查询的用户 ID,单次最多 200 个
expiryint无需传(忽略)
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 方法分页查询已订阅用户信息托管的状态信息。

参数说明

参数类型说明
requestRCIMIWSubscribeEventRequest查询请求(仅需设置订阅类型)
pageSizeint分页大小,范围 [1~200]
startIndexint第一页 0,下一页传已返回总数
callbackIRCIMIWQuerySubscribeEventCallback结果回调

RCIMIWSubscribeEventRequest 字段

字段类型说明
subscribeTypeRCIMIWSubscribeType用户信息托管:userProfile(2)
userIdsList<String>无需传(忽略)
expiryint无需传(忽略)
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 表示用户信息托管。

参数说明

参数/属性类型说明
onEventChangeFunction(List<RCIMIWSubscribeInfoEvent>? subscribeEvents)订阅事件变化回调
onSubscriptionSyncCompletedFunction(RCIMIWSubscribeType? type)订阅数据同步完成回调
onSubscriptionChangedOnOtherDevicesFunction(List<RCIMIWSubscribeEvent>? subscribeEvents)其他设备订阅信息变更回调
提示

当前支持的订阅类型:

  • 在线状态:onlineStatus(1)
  • 用户信息托管:userProfile(2)
Dart
engine.onEventChange = (List<RCIMIWSubscribeInfoEvent>? subscribeEvents) {
// 用户信息托管变更
};

engine.onSubscriptionSyncCompleted = (RCIMIWSubscribeType? type) {
// 订阅数据同步完成
};

engine.onSubscriptionChangedOnOtherDevices = (
List<RCIMIWSubscribeEvent>? subscribeEvents,
) {
// 其他设备订阅信息变更
};