tim实践系列——如何使用TimPresence自定义各种用户状态

tim通过TimPresence协议进行用户在线信息通信,主要定义数字属性字段,可以用于用户在线状态信息的通讯。

TimPresence的字段:
数据类型是否必填作用值说明
id64位整型timPresence数据包idid值标识每一个timPrecence包,避免终端重复接收协议包
offline    布尔值是否离线该值由系统通知,表示对方已经下线
subStatus8位整型订阅状态该值由开发者自定义数值,用于订阅其他账号的状态
比如:1请求订阅 2已订阅并请求订阅3 不允许订阅 等等
该值非既定设定。
fromTidTid对象发送者
toTidTid对象目标对象
toList字符串数组多个目标对象账号
show        16位整型自定义显示类型开发者自定义显示类型,如chating,away,xa,dnd等
status            字符串自定义显示类型开发者自定义显示状态  如:我在打羽毛球
extend  字典扩展字段字典类型,键值对,键字符串  值字符串
extra  字典扩展字段字典类型,键值对,键字符串  值字节数组

使用timPrecence时,需要对timPresence进行赋值,一些字段不需要客户端赋值的,包括 id,offline,fromTid 这些字段是由服务器赋值发送到客户端,所以客户端对这些字段赋值是无效的。

timPrecence所有值都不会影响tim的业务逻辑,所有字段都没有既定的设定值,除了id,offline,fromTid 是由服务器赋值发送之外的字段,tim服务器会将客户端发送的值原样发送给目标用户,所以,如何显示状态需要开发者自定义设定。根据目前主流im的状态功能,timPrecence定义了相应的字段。

字段说明:

subStatus 可用于向其他账号订阅状态,如 tim的java客户端处理subStatus的demo程序片段:

final static byte SUBSTATUS_REQ = 1; //自定义订阅值
final static byte SUBSTATUS_ACK = 2; //自定义回复订阅值
//记录状态订阅者
Map<String, Byte> submap = new ConcurrentHashMap<>();
tc.BroadPresence(SUBSTATUS_REQ, (short) 0, "I am busy😄");//广播并订阅状态
tc.PresenceHandler((TimPresence tp) -> {
            Log.debug(tp.fromTid.node, " presence");
            if (tp.subStatus > 0) {
                if (tp.subStatus == SUBSTATUS_REQ) {  //对方账户订阅我的状态
                    tc.PresenceToUser(tp.fromTid.node, (short) 0, "", SUBSTATUS_ACK, null, null);//发送个人状态给对方
                }
                if ((tp.subStatus == SUBSTATUS_REQ) || (tp.subStatus == SUBSTATUS_ACK)) {
                   //记录订阅我的状态的好友账号
                    if (submap.containsKey(tp.fromTid.node)) {
                        submap.put(tp.fromTid.node, (byte) 0);
                    }
                }
            }
        });

toList 当需要发送状态给多个账号时,可以将账号赋值给toList


有任何问题或建议请Email:donnie4w@gmail.com或 https://tlnet.top/contact  发信给我,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值