前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用 TIMSDK 的自定义字段?

如何使用 TIMSDK 的自定义字段?

原创
作者头像
腾讯云-ahqzhang
修改2019-10-23 19:05:47
2.5K0
修改2019-10-23 19:05:47
举报

前言介绍

为了方便不同用户的定制化及业务需求,IMSDK 目前提供了五个维度的自定义字段

"用户资料自定义字段","好友自定义字段","群成员维度自定义字段","群维度自定义字段" 均已键值对 Key-Value 形式存储并使用。扩展相应的字段 Key,为相应的字段 Key 设置值 Value,这便是 IMSDK 字段的使用方式

"消息自定义字段" 有些不一样,请翻至对应的章节详阅

控制台添加自定义字段

1)进入控制台打开 "应用配置"

2)切换至 "功能配置" 页

3)将会看到 "用户资料自定义字段","好友自定义字段","群成员维度自定义字段","群维度自定义字段"

4)点击 "+新增自定义字段" 配置 "字段名称 Key" 和 "读写权限"

注意事项

字段名只能由字母、数字、下划线(_)组成,不能以数字开头,且长度不能超过16个字符,一旦添加成功后,便不可修改及删除

读写权限可再次编辑

用户资料自定义字段

相关 API

代码语言:javascript
复制
modifySelfProfile()
-> 创建 HashMap,Key 为基础字段或自定义字段,Value 为需要设置的内容;

getSelfProfile()
getUsersProfile()
-> 接口返回 TIMUserProfile,通过成员方法 getCustomInfo() 获取自定义字段的键值对;

querySelfProfile()
queryUserProfile()
-> 接口返回 TIMUserProfile,通过成员方法 getCustomInfo() 获取自定义字段的键值对;

示例代码

写自定义字段:

代码语言:javascript
复制
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");
    }
});

读自定义字段:

代码语言:javascript
复制
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();

好友自定义字段

相关 API

代码语言:javascript
复制
modifyFriend()
-> 创建 HashMap,Key 为基础字段或自定义字段,Value 为需要设置的内容;

getFriendList()
-> 接口返回 TIMFriend,通过成员方法 getCustomInfo() 获取自定义字段的键值对;

queryFriend()
queryFriendList()
-> 接口返回 TIMFriend,通过成员方法 getCustomInfo() 获取自定义字段的键值对;

适用场景

添加好友成功后,可以对好友进行备注,标记好友来源等字段可供使用,某些特殊场景下需要用到自定义字段,例如:星标好友,好友亲密度等一些场景

示例代码

写自定义字段:

代码语言:javascript
复制
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");
            }
        });

读自定义字段:

代码语言:javascript
复制
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();

群成员维度自定义字段

相关 API

代码语言:javascript
复制
(Android)modifyMemberInfo()
(iOS)modifyGroupMemberInfoSetCustomInfo()
-> 创建 Map,Key 为基础字段或自定义字段,Value 为需要设置的内容;

getGroupMembers()
getGroupMembersInfo()
-> 接口返回 TIMGroupMemberInfo,通过成员方法 getCustomInfo() 获取自定义字段的键值对;

适用场景

群成员信息包含一些基础字段,"角色: 群主,管理员", "群昵称", "加群时间" 等等,某些特殊场景需要用到自定义字段,例如:"发言等级:潜水,冒泡,话痨",群内粉丝数等一些场景

示例代码

写自定义字段:

代码语言:javascript
复制
//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);
}];

读自定义字段:

代码语言:javascript
复制
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
        }
    }
});

群维度自定义字段

相关 API

代码语言:javascript
复制
(Android)modifyGroupInfo()
(iOS)modifyGroupCustomInfo()
-> 创建 Map,Key 为基础字段或自定义字段,Value 为需要设置的内容;

getGroupInfo()
queryGroupInfo()
-> 接口返回 TIMGroupDetailInfo,通过成员方法 getCustom() 获取自定义字段的键值对;

适用场景

群组信息包含一些基础字段,"群组ID", "群主", "群头像" 等等,某些特殊场景需要用到自定义字段,例如:"工作群,娱乐群等字段",限制某些人员的群组等一些场景

示例代码

写自定义字段:

代码语言:javascript
复制
//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);
}];

读自定义字段:

代码语言:javascript
复制
        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
            }
        });

消息自定义字段

相关 API

代码语言:javascript
复制
setCustomInt()
setCustomStr()
-> 设置一个 int 类型或字符串类型来标记消息的自定义字段;

getCustomInt()
getCustomStr()
-> 返回设置的 int 或字符串;

适用场景

消息的自定义字段信息有两种,例如 Int 可以像微信一样标记语音消息是否播放过,0 为未播放,显示红点,1 为播放过了,不显示红点。Str 可以给消息分类,将开发者或用户的一些字段进行设置,再通过字段过滤某些消息

示例代码

代码语言:javascript
复制
//写
msg.setCustomInt(1);
msg.setCustomStr("星标消息");
//读
int CustomInt = msg.getCustomInt();
String CustomStr = msg.getCustomStr();

注意事项

消息的自定义字段仅存储于本地,不会同步到 Server,更换终端或删除消息将不会再获取到

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言介绍
  • 控制台添加自定义字段
    • 注意事项
    • 用户资料自定义字段
      • 相关 API
        • 示例代码
          • 写自定义字段:
          • 读自定义字段:
      • 好友自定义字段
        • 相关 API
          • 适用场景
            • 示例代码
              • 写自定义字段:
              • 读自定义字段:
          • 群成员维度自定义字段
            • 相关 API
              • 适用场景
                • 示例代码
                  • 写自定义字段:
                  • 读自定义字段:
              • 群维度自定义字段
                • 相关 API
                  • 适用场景
                    • 示例代码
                      • 写自定义字段:
                      • 读自定义字段:
                  • 消息自定义字段
                    • 相关 API
                      • 适用场景
                        • 示例代码
                          • 注意事项
                          相关产品与服务
                          即时通信 IM
                          即时通信 IM(Instant Messaging)基于腾讯二十余年的 IM 技术积累,支持Android、iOS、Mac、Windows、Web、H5、小程序平台且跨终端互通,低代码 UI 组件助您30分钟集成单聊、群聊、关系链、消息漫游、群组管理、资料管理、直播弹幕和内容审核等能力。适用于直播互动、电商带货、客服咨询、社交沟通、在线课程、企业办公、互动游戏、医疗健康等场景。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档