我们正在尝试在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,<<” 照片“>>,[],[]}]}]}
答案 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