APP移动端向Imserver发送文本消息,如何扩展业务想要的字段?

mazhj 3天前 92

  1. APP移动端向Imserver发送文本消息,如何扩展业务想要的字段?
  2. android-chat MessagePayload.binaryContent 作用是啥?是否可以用作扩展属性?
最新回复 (18)
  • x86 3天前
    引用 2
    1. 可以通过 extra 字段扩展,建议采用 json 格式,保留扩展性
    2. binaryContent 字段用来保存二进制格式的消息内容,具体是什么数据,需要看具体消息 encode 的 encode 方法,比如文本消息时,binaryContent 保存的是引用相关信息。

  • mazhj 3天前
    引用 3
    1. binaryContent 保存是TextMessageContent对象中的内容?
    2. binaryContent 可以代替extra 扩展属性吗?
  • x86 3天前
    引用 4
    1. 不是,你看下 TextMessageContent 的 encode 方法,针对文本消息,binaryContent 是用来保存引用信息
    2. 不可以,binaryContent 会内部使用到,比如文本消息,就用来保存引用信息;图片消息,用来保存缩略图。
  • mazhj 3天前
    引用 5
    1. binaryContent 保存的是【引用相关信息】,还是只是针对的消息类型为1的文本消息 content的二进制编码?或者可以解释一下【文本消息】的具体定义和内容
  • x86 3天前
    引用 6
    mazhj 1. binaryContent 保存的是【引用相关信息】,还是只是针对的消息类型为1的文本消息 content的二进制编码?或者可以解释一下【文本消息】的具体定义和内容
    针对文本消息才是那样

    文本消息的定义,你看下客户端的Textmessageconten类
  • mazhj 3天前
    引用 7

    比如这种组织形式,JSONObject 中的name/gender/jobStatus等属性,能被imserver解析吗?

  • x86 3天前
    引用 8
    im-server是不会去解析消息,也不需要解析消息。

    你们是希望其他服务,解析从数据库读出来的消息?还是其他什么意思
  • mazhj 3天前
    引用 9
    我的意思是:比如这种组织形式,JSONObject 中的name/gender/jobStatus等属性,能被imserver中的WFMessage.Message对象解析吗?
  • x86 3天前
    引用 10
    可以,看这儿:https://bbs.wildfirechat.cn/thread-2421.htm
  • mazhj 3天前
    引用 11
    我跟踪到是被解析到WFCMessage.Message对象,用这个WFCMessage.Message.parseFrom(data)解析报错
  • HeavyRain 2天前
    引用 12
    mazhj 我的意思是:比如这种组织形式,JSONObject 中的name/gender/jobStatus等属性,能被imserver中的WFMessage.Message对象解析吗?
    不能被IM服务解析,IM服务是透传的,把发送方发送的数据原封不动的发给接收方
  • mazhj 2天前
    引用 13
    HeavyRain 不能被IM服务解析,IM服务是透传的,把发送方发送的数据原封不动的发给接收方
     如果通过长连接请求imserver,而且能被解析,是使用payload哪个属性?payload.binaryContent?payload.extra作为透传参数?
  • x86 2天前
    引用 14
    IM-Server 不会解析消息,是透传。

    你们到底是要做什么?
  • mazhj 2天前
    引用 15
    我们的问题时:通过长连接发送文本类型的消息时,同时带上我们自定义的属性和值
  • x86 2天前
    引用 16
    1 楼,通过 extra 字段就能解决这个问题的
  • mazhj 2天前
    引用 17
    android-chat MessagePayload.binaryContent 作用是啥?是否可以代替extra用作扩展属性?
  • x86 2天前
    引用 18
    1楼也回你了
  • mazhj 18小时前
    引用 19

    解析MessagePayload.binaryContent 的终极方案,测试有效,不容反驳
     OutputMessageData outputMessageData = OutputMessageData.fromProtoMessage(message, null);
     byte[] base64 = Base64Utils.decodeFromString(outputMessageData.getPayload().getBase64edData());
     System.err.println("parse base64 ==> "+ new String(base64));
返回