用户信息托管
本文档旨在指导开发者如何在融云即时通讯 Android 客户端 SDK 中实现用户信息订阅、查询和监听,同时支持用户信息与权限的修改、查询。 通过本文档, Android 开发者将了解如何获取和跟踪用户信息,以及如何在用户信息变更、订阅状态变更时接收通知。
此功能在 5.10.0 版本开始支持。
开通服务
使用此功能前,您须在控制台开通信息托管服务。
管理用户信息
可以修改或查询自已的用户信息,批量查询指定多个用户的用户信息。
设置用户信息
用户在应用中使用 updateMyUserProfile
可以修改自已的用户信息。
下表描述 UserProfile 类的属性,也可参考 API 文档。
属性名 | 类型 | 描述 |
---|---|---|
name | String | 昵称,长度不超过 32 个字符。 |
portraitUri | String | 头像地址,长度不超过 128 个字符。 |
uniqueId | String | 用户应用号,支持大小写字母、数字,长度不超过 32 个字符。请注意 SDK不支持设置此字段。 |
String | Email,长度不超过 128 个字符。 | |
birthday | String | 生日 ,长度不超过 32 个字符 |
gender | int | 性别,未知 0 、男 1、女 2。 |
location | String | 所在地,长度不超过 32 个字符。 |
role | int | 角色,支持 0~100 以内数字。 |
level | int | 级别,支持 0~100 以内数字。 |
userExtProfile | long | 自定义扩展信息,最多可以设置 20 个用户信息(以 Key、Value 方式设置,扩展用户信息通过开发者后台进行设置)
|
// 更新自己的用户信息
UserProfile userProfile = new UserProfile();
RongCoreClient.getInstance().updateMyUserProfile(userProfile, new IRongCoreCallback.UpdateUserProfileCallback() {
@Override
public void onSuccess() {
// 更新成功
}
@Override
public void onError(int errorCode, String errorKey) {
// 更新失败
}
});
批量获取用户信息
您可以使用 getUserProfiles
方法查询指定用户的用户信息。一次最多查询20个用户的用户信息。
// 设置查询用户ID列表
List<String> userIdList = new ArrayList<>();
userIdList.add("user1");
userIdList.add("user2");
userIdList.add("user3");
RongCoreClient.getInstance().getUserProfiles(userIdList, new IRongCoreCallback.ResultCallback<List<UserProfile>>() {
@Override
public void onSuccess(List<UserProfile> userProfiles) {
// 查询成功,返回查询用户信息。
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
// 查询失败
}
});
获取当前用户信息
您可以使用 getMyUserProfile
方法获取当前用户信息。
RongCoreClient.getInstance().getMyUserProfile(new IRongCoreCallback.ResultCallback<UserProfile>() {
@Override
public void onSuccess(UserProfile userProfile) {
// 查询成功,返回自己的用户信息。
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
// 查询失败
}
});
管理用户权限
客户端 SDK 提供了用户权限的设置和获取接口,通过 UserProfileVisibility
枚举来表示用户权限,各枚举值代表的含义参考下表:
枚举值 | 用户权限 |
---|---|
UserProfileVisibility.NotSet | 未设置:以 AppKey 权限设置为准,默认是此状态。 |
UserProfileVisibility.Invisible | 都不可见:任何人都不能搜索到我的用户信息,名称、头像除外。 |
UserProfileVisibility.Everyone | 所有人:应用中任何用户都可以查看到我的用户信息。 |
UserProfileVisibility.FriendVisible | 仅好友可见:仅我的好友列表中用户可以查看到我的用户信息。 |
设置用户权限
如果您需要设置用户权限,可以使用 updateMyUserProfileVisibility
方法。
// 用户信息权限
UserProfileVisibility visibility = UserProfileVisibility.Everyone;
RongCoreClient.getInstance().updateMyUserProfileVisibility(visibility, new IRongCoreCallback.ResultCallback<Boolean>() {
@Override
public void onSuccess(Boolean result) {
// 设置成功
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
// 设置失败
}
});
获取用户权限
如果您需要获取用户权限,可以使用 getMyUserProfileVisibility
方法。
// 获取自己的用户权限
RongCoreClient.getInstance().getMyUserProfileVisibility(new IRongCoreCallback.ResultCallback<UserProfileVisibility>() {
@Override
public void onSuccess(UserProfileVisibility userProfileVisibility) {
// 获取成功
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
// 获取失败
}
});
用户权限说明
AppKey 默认用户信息权限为 都不可见,用户级别默认为 未设置,此状态默认可以查看用户名称和头像。
下面列举了 AppKey
级权限与 用户
级权限综合说明:
AppKey 权限 | 用户级权限 | 结果 |
---|---|---|
都不可见、仅好友可见、所有人可见 | 未设置 | 以 AppKey 权限设置为准 |
都不可见、仅好友可见、所有人可见 | 设置为(都不可见、所有人可见、仅好友可见) | 以用户权限设置为准 |
搜索用户
按用户应用号精确搜索
支持按用户应用号搜索用户信息,可以使用 searchUserProfileByUniqueId
方法。
// 使用应用号查询用户信息
String uniqueId = "uniqueId";
RongCoreClient.getInstance().searchUserProfileByUniqueId(uniqueId, new IRongCoreCallback.ResultCallback<UserProfile>() {
@Override
public void onSuccess(UserProfile userProfile) {
// 查询成功
}
@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
// 查询失败
}
});
管理用户信息和权限变更订阅
订阅用户信息&权限变更
为了跟踪特定用户的用户信息, 您需要使用 subscribeEvent
方法进行订阅。以下是具体的操作步骤和示例代码:
- 定义订阅用户 ID 列表: 创建一个包含您希望订阅用户 ID 的
ArrayList
,即单聊的targetId
。一次订阅用户的上限为 200 个, 订阅的用户数最多为 1000 个,一个用户最多可以被 5000 个用户订阅。 - 设置订阅时间:定义一个整数值,该值表示订阅的持续时间,订阅时长的范围为 60 秒到 2592000 秒。
- 指定订阅类型: 使 用
SubscribeEvent.SubscribeType.USER_PROFILE
来指定订阅的是用户信息。 - 使用
subscribeEvent
方法执行订阅操作。
示例代码
//设置订阅类型。
SubscribeEvent.SubscribeType type= SubscribeEvent.SubscribeType.USER_PROFILE;
//设置订阅时间,取值范围为[60,2592000](单位:秒)。
int expiry=180000;
//订阅用户userId,即单聊的 targetId (一次最多订阅 200 个)。
List<String> userList=new ArrayList<>();
userList.add("user1");
userList.add("user2");
userList.add("user3");
SubscribeEventRequest request = new SubscribeEventRequest(type,expiry,userList);
RongCoreClient.getInstance().subscribeEvent(request, new IRongCoreCallback.SubscribeEventCallback<List<String>>() {
@Override
public void onSuccess() {
//订阅成功。
}
@Override
public void onError(int errorCode, List<String> strings) {
//订阅失败。
}
});
取消用户信息&权限订阅
当您不再需要跟踪用户的用户信息时,可以使用 unSubscribeEvent
方法取消订阅。
//设置取消订阅的类型。
SubscribeEvent.SubscribeType type= SubscribeEvent.SubscribeType.USER_PROFILE;
//取消订阅用户userId,即单聊的 targetId,一次最多取消订阅 200 个。
List<String> userList=new ArrayList<>();
userList.add("user1");
userList.add("user2");
userList.add("user3");
SubscribeEventRequest request = new SubscribeEventRequest(type,userList);
RongCoreClient.getInstance().unSubscribeEvent(request, new IRongCoreCallback.SubscribeEventCallback<List<String>>() {
@Override
public void onSuccess() {
//取消订阅成功。
}
@Override
public void onError(int errorCode, List<String> strings) {
//取消订阅失败。
}
});