专栏首页IMSDK使用 TIMSDK 的自定义字段 iOS 示例
原创

使用 TIMSDK 的自定义字段 iOS 示例

前言介绍

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

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

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

控制台添加自定义字段

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

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

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

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

注意事项

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

读写权限可再次编辑

安卓示例请参考

用户资料自定义字段

相关 API

/// 设置自己的资料
- (int)modifySelfProfile:(NSDictionary<NSString \*, id> \*)values succ:(TIMSucc)succ fail:(TIMFail)fail;


/// 获取自己的资料
- (int)getSelfProfile:(TIMGetProfileSucc)succ fail:(TIMFail)fail;


///获取指定用户资料
- (int)getUsersProfile:(NSArray<NSString \*> \*)identifiers forceUpdate:(BOOL)forceUpdate succ:(TIMUserProfileArraySucc)succ fail:(TIMFail)fail;


/// 在缓存中查询用户的资料
- (TIMUserProfile \*)queryUserProfile:(NSString \*)identifier;
/// 在缓存中查询自己的资料
- (TIMUserProfile \*)querySelfProfile;

以设置和获取自己的资料为示例

设置自定义字段:

{

    NSString \*customKey = [TIMProfileTypeKey\_Custom\_Prefix stringByAppendingString:@"Test"];;
    NSString \*customValue = @"TestValue";
    NSDictionary \*dict = @{TIMProfileTypeKey\_Nick : @"Jack", customKey:customValue};
    [[TIMFriendshipManager sharedInstance] modifySelfProfile:dict succ:^{
        NSLog(@"succ");
    } fail:^(int code, NSString \*msg) {
        NSLog(@"fail: code: %d, msg: %@", code, msg);;
    }];;
}

获取自定义字段:

{

 [[TIMFriendshipManager sharedInstance] getSelfProfile:^(TIMUserProfile \*profile) {

        for (NSString \*key in profile.customInfo) {

            NSData \*value = profile.customInfo[key];

            NSString\* stringValue = [[NSString alloc] initWithData:value encoding:NSASCIIStringEncoding];

            NSLog(@"keyandvalue = %@,%@", key, stringValue);

        }

    } fail:^(int code, NSString \*msg) {

            NSLog(@"fail: code: %d, msg: %@", code, msg);

    }];

}

注意事项

key是NSString类型,value是NSData类型或者NSNumber类型, key值按照后台配置的字符串传入,不包括 TIMProfileTypeKey_Custom_Prefix 前缀

好友自定义字段

相关 API

/// 修改好友

- (int)modifyFriend:(NSString \*)identifier values:(NSDictionary<NSString \*, id> \*)values succ:(TIMSucc)succ fail:(TIMFail)fail;


/// 获取好友列表, 返回好友(TIMFriend)列表
-(int)getFriendList:(TIMFriendArraySucc)succ fail:(TIMFail)fail;


/// 在缓存中查询用户的关系链数据
- (TIMFriend \*)queryFriend:(NSString \*)identifier
// 获取缓存中的关系链列表
- (NSArray<TIMFriend \*> \*)queryFriendList;

适用场景

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

示例代码: 以修改和获取修改好友

设置自定义字段:

 NSString \*customKey = [TIMFriendTypeKey\_Custom\_Prefix stringByAppendingString:@"Test"];

 NSString \*customValue = @"TestValue";

 NSDictionary \*dict = @{customKey:customValue};

 NSString \* friendIdentifier = @"user3000";

 [[TIMFriendshipManager sharedInstance] modifyFriend:friendIdentifier values:dict succ:^{

    NSLog(@"succ");

   } fail:^(int code, NSString \*msg) {

        NSLog(@"fail: code: %d, msg: %@", code, msg);

    }];

获取自定义字段:

 [[TIMFriendshipManager sharedInstance] getFriendList:^(NSArray<TIMFriend \*> \*friends) {

        for (TIMFriend \* friend in friends) {

            for (NSString \*key in friend.customInfo) {

                NSData \*value = friend.customInfo[key];

                NSString\* stringValue = [[NSString alloc] initWithData:value encoding:NSASCIIStringEncoding];

                NSLog(@"keyandvalue = %@,%@", key, stringValue);

            }

        }

    } fail:^(int code, NSString \*msg) {

        NSLog(@"fail: code: %d, msg: %@", code, msg);

    }];

注意事项

自定义字段集合,key是NSString类型,value是NSData类型或者NSNumber类型, key值按照后台配置的字符串传入,不包括 TIMFriendTypeKey_Custom_Prefix 前缀

群成员维度自定义字段

相关 API

/// 修改群成员自定义字段集合

- (int)modifyGroupMemberInfoSetCustomInfo:(NSString\*)groupId user:(NSString\*)identifier customInfo:(NSDictionary<NSString\*,NSData\*> \*)customInfo succ:(TIMSucc)succ fail:(TIMFail)fail;



/// 获取群组指定成员的信息

- (int)getGroupMembersInfo:(NSString\*)groupId members:(NSArray<NSString \*>\*)members succ:(TIMGroupMemberSucc)succ fail:(TIMFail)fail;



///获取群成员列表

- (int)getGroupMembers:(NSString\*)groupId succ:(TIMGroupMemberSucc)succ fail:(TIMFail)fail;

示例

设置自定义字段:

NSString\* value = @"TestValue";

NSData \* customdata = [value dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary \*dict = @{@"Test":customdata};

[[TIMGroupManager sharedInstance] modifyGroupMemberInfoSetCustomInfo:@"@TGS#2RYFSRXFV" user:@"user3000" customInfo:dict succ:^{

         NSLog(@"succ");

    } fail:^(int code, NSString \*msg) {

         NSLog(@"fail: code: %d, msg: %@", code, msg);

}];

获取自定义字段

[[TIMGroupManager sharedInstance] getGroupMembersInfo:@"@TGS#2RYFSRXFV" members:@[@"user3000"] succ:^(NSArray \*members) {

        for (TIMGroupMemberInfo \*MemberInfo in members) {

            for (NSString \*key in MemberInfo.customInfo) {

                NSData \*value = MemberInfo.customInfo[key];

                NSString\* stringValue = [[NSString alloc] initWithData:value encoding:NSASCIIStringEncoding];

                NSLog(@"keyandvalue = %@,%@", key, stringValue);

            }

        }

    } fail:^(int code, NSString \*msg) {

      NSLog(@"fail: code: %d, msg: %@", code, msg);

}];

群维度自定义字段

相关 API

/// 修改群自定义字段集合

- (int)modifyGroupCustomInfo:(NSString\*)groupId customInfo:(NSDictionary<NSString \*,NSData \*>\*)customInfo succ:(TIMSucc)succ fail:(TIMFail)fail;



/// 获取服务器存储的群组信息

- (int)getGroupInfo:(NSArray\*)groups succ:(TIMGroupListSucc)succ fail:(TIMFail)fail;



///获取本地存储的群组信息

- (TIMGroupInfo \*)queryGroupInfo:(NSString \*)groupId;

示例

修改自定义字段

NSString\* value = @"TestValue";

NSData \* customdata = [value dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary \*dict = @{@"imtest":customdata};

[[TIMGroupManager sharedInstance] modifyGroupCustomInfo:@"@TGS#2RYFSRXFV" customInfo:dict succ:^{

         NSLog(@"succ");

    } fail:^(int code, NSString \*msg) {

         NSLog(@"fail: code: %d, msg: %@", code, msg);

}];

获取自定义字段

[[TIMGroupManager sharedInstance] getGroupInfo:@[@"@TGS#2RYFSRXFV"] succ:^(NSArray \*groupList) {

        for (TIMGroupInfo \*info in groupList) {

            for (NSString \*key in info.customInfo) {

                NSData \*value = info.customInfo[key];

                NSString\* stringValue = [[NSString alloc] initWithData:value encoding:NSASCIIStringEncoding];

                NSLog(@"keyandvalue = %@,%@", key, stringValue);

            }

        }

    } fail:^(int code, NSString \*msg) {

        NSLog(@"fail: code: %d, msg: %@", code, msg);

}];

消息自定义字段

适用场景

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

相关API

/// 设置自定义整数,默认为 0

- (BOOL)setCustomInt:(int32\_t)param;



/// 获取 CustomInt

- (int32\_t)customInt;



///设置自定义数据,默认为""

- (BOOL)setCustomData:(NSData\*)data;



///获取 CustomData

- (NSData\*)customData;

示例

// 设置

imMsg.customInt = 1;

imMsg.customData = [@"string" dataUsingEncoding:NSUTF8StringEncoding];

// 获取

NSLog(@"%d,%@", imMsg.customInt, [[NSString alloc] initWithData:imMsg.customData encoding:NSASCIIStringEncoding]);

注意事项

  1. 消息的自定义字段仅存储于本地,不会同步到 Server,更换终端或删除消息将不会再获取到
  2. setCustomInt 和 setCustomData 这个接口的调用时机是需要发送成功之后调用

注意事项

TIMMessage 对象只会返回 getSenderNickname, 不能直接获取自定义字段, 在会话中不建议获取自定义字段, 一条消息就去拿会很频繁,给后台造成很大的压力

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 利用CocoaPods实现私有 TUIKit 组件

    集成 TUIKit 组件, 如果你发现 TUIKit 有 bug 需要修改, 或者因为公司业务需求需要在此基础上做二次开发, 那么就需要修改 TUIKit 源码...

    腾讯云 - zjiezhu
  • 关于 IMSDK 的几种消息的解释和对应接口

    离线消息是指未在客户端已读的消息, 即时通信 IM 支持离线消息缓存,即当用户不在线时,下次登录仍会拉取到离线消息, 通过 OnNewMessage 抛出. 默...

    腾讯云 - zjiezhu
  • 网络编程第三讲UDP编写

      UDP是面向无连接的.就是说数据传输会丢掉.网络延时比较大的情况下.会早上丢包.例如视频通话.就是UDP

    IBinary
  • JavaWeb - Servlet:重定向和转发,状态管理

    为了方便重用和便于维护等目的,经常会采用 DAO(Data Access Object)模式对数据库操作进行独立封装。

    RendaZhang
  • 使用模式构建:属性模式

    原文:Daniel Coupal and Ken W. Alger 译者:牟天磊

    MongoDB中文社区
  • 使用模式构建:属性模式

    原文:Daniel Coupal and Ken W. Alger 译者:牟天磊

    MongoDB中文社区
  • 什么是 Cookie 和 Session ?

    在现实生活中,当顾客在购物时,商城经常会赠送顾客一张会员卡,卡上记录客户的个人信息(姓名,手机号等),消费额度和积分额度等。顾客一旦接受了会员卡,以后每次光临该...

    cherishspring
  • 浅谈几种SLB技术的实现

    今天小普和大家分享下,在最近的学习过程中,关于几个负载均衡技术的理解,以及几个实现的原理和关键点,希望对各位读者朋友有收获。 1 http重定向协议实现负载均衡...

    企鹅号小编
  • Envoy 的健康检查

    本章节我们将学习如何添加一个健康检查,来检查集群中的服务是否可用于接收流量。启用健康检查后,如果服务崩溃了,则 Envoy 将停止发送流量。

    我是阳明
  • jsp指令和EL表达式

    1.page指令 1.pageEncoding 指定jsp的编码 2.contextType 设置响应头 这两个东西其实使用任意一个即可。 3.errorPag...

    lwen

扫码关注云+社区

领取腾讯云代金券