在离线用户的朋友请求中缺少元数据

时间:2015-12-06 19:21:15

标签: xmpp ejabberd xmppframework

我们正在尝试在XMPP(Ejabberd)中自定义好友请求,以便我们可以在好友请求中发送其他元数据,如下所示(显示在ejabberd.log文件中记录的请求)。问题是当朋友离线时,当朋友请求最终在线时,XMPP不会发送额外的元数据(jidValue,profileImageURL等)。但如果朋友在线,则在发送请求时,确实会传递所有其他元数据。有没有人知道为什么离线用户,没有发送额外的元数据以及如何解决它?

以下是日志文件内容:

  

2015-12-06 18:07:35.127 [debug]   < 0.1763.0> @ejabberd_receiver:process_data:349在流上接收的XML =   << “HTTPS://jabber.chatter.io/profiles/chatapp_profile56646b3323232.232323232.png \”   age = \“0 \”gender = \“\”message = \“\”>“>>

     

包   {xmlel,<< “存在” >> [{<< “类型” >>,<< “订阅” >>},{<< “到” >>,<< “17032345678jinglebells@chat.chatter.io” >>},{<< “jidValue” >>,<<“1408123467abcd@chat.chatter.io/ MCRJ “>>},{<<” profileImageURL “>>,<<”https://jabber.chatter.io/profiles/chatapp_profile56646b3323232.232323232.png “>>},{<<” 年龄“>> ,<< “0” >>},{<< “性别” >>,<<>>},{<< “消息” >>中<<>>}],[{xmlel,<< “×” >> [{<< “的xmlns” >>,<<“电子名片-温度: X:更新 “>>}],[{xmlel,<<” 照片“>>,[],[]}]}]}

2 个答案:

答案 0 :(得分:0)

当朋友不在线时,朋友请求不会按原样存储:存在不存储以供离线传送。相反,ejabberd会在用户连接时查找待处理请求并生成新请求。

我创建了一张支持ejabberd Github功能的票证:https://github.com/processone/ejabberd/issues/870

请注意,您的数据包是错误的,因为您似乎将扩展名放在属性上以方便使用。它们应该位于自定义子标签上,并带有自定义xmlns。你做的事无论如何都是无效的。自定义应与x xmlns vcard内容类似。 您添加的属性不是XMPP在jabber:client命名空间中所期望的。

答案 1 :(得分:0)

我从我的iOS客户端代码发送了以下XML发送给另一个离线的用户

<presence type="subscribe" to="918054824047thj@chat.domain.io">
<profile xmlns="custom:data">
<profileImageURL>https://jabber.domain.io/profiles/slocamo_profile5667ec5aea78e2.08175827.png</profileImageURL>
<age>0</age>
<gender/>
<message/>
<jidValue>918054824047jitu@chat.domain.io/jitu</jidValue>
</profile>
<x xmlns="vcard-temp:x:update"><photo/></x>
</presence>

但是当用户上线时,他只收到以下XML

<presence xmlns="jabber:client" from="918054824047thj@chat.domain.io" to="918054824047jitu@chat.domain.io" type="subscribe">
<status/>
</presence>

let me know how to fix this