为了方便不同用户的定制化及业务需求,IMSDK 目前提供了五个维度的自定义字段
"用户资料自定义字段","好友自定义字段","群成员维度自定义字段","群维度自定义字段" 均已键值对 Key-Value 形式存储并使用。扩展相应的字段 Key,为相应的字段 Key 设置值 Value,这便是 IMSDK 字段的使用方式
"消息自定义字段" 有些不一样,请翻至对应的章节详阅
1)进入控制台打开 "应用配置"
2)切换至 "功能配置" 页
3)将会看到 "用户资料自定义字段","好友自定义字段","群成员维度自定义字段","群维度自定义字段"
4)点击 "+新增自定义字段" 配置 "字段名称 Key" 和 "读写权限"
字段名只能由字母、数字、下划线(_)组成,不能以数字开头,且长度不能超过16个字符,一旦添加成功后,便不可修改及删除
读写权限可再次编辑
modifySelfProfile()
-> 创建 HashMap,Key 为基础字段或自定义字段,Value 为需要设置的内容;
getSelfProfile()
getUsersProfile()
-> 接口返回 TIMUserProfile,通过成员方法 getCustomInfo() 获取自定义字段的键值对;
querySelfProfile()
queryUserProfile()
-> 接口返回 TIMUserProfile,通过成员方法 getCustomInfo() 获取自定义字段的键值对;
HashMap<String, Object> profileMap = new HashMap<>();
profileMap.put(TIMUserProfile.TIM_PROFILE_TYPE_KEY_NICK, "我的昵称");
profileMap.put(TIMUserProfile.TIM_PROFILE_TYPE_KEY_CUSTOM_PREFIX + "test", "--我的自定义字段信息--");
TIMFriendshipManager.getInstance().modifySelfProfile(profileMap, new TIMCallBack() {
@Override
public void onError(int code, String desc) {
Log.e(tag, "modifySelfProfile failed: " + code + " desc: " + desc);
}
@Override
public void onSuccess() {
Log.i(tag, "modifySelfProfile success");
}
});
TIMFriendshipManager.getInstance().getSelfProfile(new TIMValueCallBack(){
@Override
public void onError(int code, String desc){
Log.e(tag, "getSelfProfile failed: " + code + " desc: " + desc);
}
@Override
public void onSuccess(TIMUserProfile result){
Log.i(tag, "getSelfProfile succ");
Map<String, byte[]> customInfo = result.getCustomInfo();
}
});
//获取本地保存的自己的资料
TIMUserProfile selfProfile = TIMFriendshipManager.getInstance().querySelfProfile();
Map<String, byte[]> customInfo = selfProfile.getCustomInfo();
modifyFriend()
-> 创建 HashMap,Key 为基础字段或自定义字段,Value 为需要设置的内容;
getFriendList()
-> 接口返回 TIMFriend,通过成员方法 getCustomInfo() 获取自定义字段的键值对;
queryFriend()
queryFriendList()
-> 接口返回 TIMFriend,通过成员方法 getCustomInfo() 获取自定义字段的键值对;
添加好友成功后,可以对好友进行备注,标记好友来源等字段可供使用,某些特殊场景下需要用到自定义字段,例如:星标好友,好友亲密度等一些场景
HashMap<String, Object> friendInfo = new HashMap<>();
friendInfo.put(TIMFriend.TIM_FRIEND_PROFILE_TYPE_KEY_REMARK, "remark_test");
friendInfo.put(TIMFriend.TIM_FRIEND_PROFILE_TYPE_KEY_CUSTOM_PREFIX + "test", "--我的自定义字段信息--");
TIMFriendshipManager.getInstance().modifyFriend(identifier, friendInfo, new TIMCallBack() {
@Override
public void onError(int i, String s) {
Log.e(tag, "modifyFriend failed: " + code + " desc: " + desc);
}
@Override
public void onSuccess() {
Log.i(tag, "modifyFriend success");
}
});
TIMFriendshipManager.getInstance().getFriendList(new TIMValueCallBack>() {
@Override
public void onError(int code, String desc) {
Log.e(tag, "getFriendList failed: " + code + " desc: " + desc);
}
@Override
public void onSuccess(List result) {
Log.i(tag, "getFriendList success");
for (int i = 0; i < result.size(); ++i){
Map<String, byte[]> customInfo = result.get(i).getCustomInfo();
//TODO
}
}
});
//获取本地保存的好友列表
TIMFriend friend = TIMFriendshipManager.getInstance().queryFriend(“test01”);
Map<String, byte[]> customInfo = friend.getCustomInfo();
(Android)modifyMemberInfo()
(iOS)modifyGroupMemberInfoSetCustomInfo()
-> 创建 Map,Key 为基础字段或自定义字段,Value 为需要设置的内容;
getGroupMembers()
getGroupMembersInfo()
-> 接口返回 TIMGroupMemberInfo,通过成员方法 getCustomInfo() 获取自定义字段的键值对;
群成员信息包含一些基础字段,"角色: 群主,管理员", "群昵称", "加群时间" 等等,某些特殊场景需要用到自定义字段,例如:"发言等级:潜水,冒泡,话痨",群内粉丝数等一些场景
//Android
TIMGroupManager.ModifyMemberInfoParam param = new TIMGroupManager.ModifyMemberInfoParam(groupId, identifier);
Map<String, byte[]> customInfo = new HashMap<>();
try {
customInfo.put("GroupMember_Test", "--我的自定义字段信息--".getBytes("utf-8"));
param.setCustomInfo(customInfo);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
TIMGroupManager.getInstance().modifyMemberInfo(param, new TIMCallBack() {
@Override
public void onError(int code, String desc) {
Log.e(tag, "getFriendList failed: " + code + " desc: " + desc);
}
@Override
public void onSuccess() {
Log.i(tag, "modifyMemberInfo success");
}
});
//iOS
[[TIMGroupManager sharedInstance] modifyGroupMemberInfoSetCustomInfo:@"@TGS#xXgroupidXx" user:@"iOS_001" customInfo:customInfo succ:^() {
NSLog(@"modify group member customInfo succ");
}fail:^(int code, NSString* err) {
NSLog(@"failed code: %d %@", code, err);
}];
TIMGroupManager.getInstance().getGroupMembers("@TGS#xXgroupidXx", new TIMValueCallBack>() {
@Override
public void onError(int i, String s) {
Log.e(tag, "getFriendList failed: " + i + " desc: " + s);
}
@Override
public void onSuccess(List timGroupMemberInfos) {
Log.i(tag, "modifyMemberInfo success");
for (int i = 0; i < timGroupMemberInfos.size(); ++i){
Map<String, byte[]> customInfo = timGroupMemberInfos.get(i).getCustomInfo();
//TODO
}
}
});
(Android)modifyGroupInfo()
(iOS)modifyGroupCustomInfo()
-> 创建 Map,Key 为基础字段或自定义字段,Value 为需要设置的内容;
getGroupInfo()
queryGroupInfo()
-> 接口返回 TIMGroupDetailInfo,通过成员方法 getCustom() 获取自定义字段的键值对;
群组信息包含一些基础字段,"群组ID", "群主", "群头像" 等等,某些特殊场景需要用到自定义字段,例如:"工作群,娱乐群等字段",限制某些人员的群组等一些场景
//Android
TIMGroupManager.ModifyGroupInfoParam param = new TIMGroupManager.ModifyGroupInfoParam(groupId);
Map<String, byte[]> customInfo = new HashMap<>();
try {
customInfo.put("Group_Test", "--我的自定义字段信息--".getBytes("utf-8"));
param.setCustomInfo(customInfo);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
TIMGroupManager.getInstance().modifyGroupInfo(param, new TIMCallBack() {
@Override
public void onError(int code, String desc) {
Log.e(tag, "modifyGroupInfo failed: " + code + " desc: " + desc);
}
@Override
public void onSuccess() {
Log.i(tag, "modifyGroupInfo success");
}
});
//iOS
[[TIMGroupManager sharedInstance] modifyGroupCustomInfo:@"@TGS#xXgroupidXx" customInfo:customInfo succ:^() {
NSLog(@"modify group customInfo succ");
}fail:^(int code, NSString* err) {
NSLog(@"failed code: %d %@", code, err);
}];
ArrayList groupList = new ArrayList<>();
groupList.add("@TGS#xXgroupidXx");
TIMGroupManager.getInstance().getGroupInfo(groupList, new TIMValueCallBack>() {
@Override
public void onError(int i, String s) {
Log.e(tag, "getGroupInfo failed: " + i + " desc: " + s);
}
@Override
public void onSuccess(List timGroupDetailInfo) {
Log.i(tag, "getGroupInfo success");
for (int i = 0; i < timGroupDetailInfo.size(); ++i){
Map<String, byte[]> customInfo = timGroupDetailInfo.get(i).getCustom();
//TODO
}
});
setCustomInt()
setCustomStr()
-> 设置一个 int 类型或字符串类型来标记消息的自定义字段;
getCustomInt()
getCustomStr()
-> 返回设置的 int 或字符串;
消息的自定义字段信息有两种,例如 Int 可以像微信一样标记语音消息是否播放过,0 为未播放,显示红点,1 为播放过了,不显示红点。Str 可以给消息分类,将开发者或用户的一些字段进行设置,再通过字段过滤某些消息
//写
msg.setCustomInt(1);
msg.setCustomStr("星标消息");
//读
int CustomInt = msg.getCustomInt();
String CustomStr = msg.getCustomStr();
消息的自定义字段仅存储于本地,不会同步到 Server,更换终端或删除消息将不会再获取到
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。