Javascript 具有昵称的JsJAC订阅请求

Javascript 具有昵称的JsJAC订阅请求,javascript,xmpp,openfire,Javascript,Xmpp,Openfire,我正在使用OpenFire和JsJAC开发一个内部聊天系统。我希望每个登录的人都能自动成为彼此的朋友,但由于没有好的方法自动成为每个人的朋友,所以我决定使用订阅插件,并将订阅请求发送给您名册之外的任何人。订阅插件自动接受请求 这是现在的工作,但我无法设置新名册条目的昵称 以下是我正在使用的代码: //Send friend request var subscribe_packet = "<presence to='"+this.sender+"@"+chatManager.

我正在使用OpenFire和JsJAC开发一个内部聊天系统。我希望每个登录的人都能自动成为彼此的朋友,但由于没有好的方法自动成为每个人的朋友,所以我决定使用订阅插件,并将订阅请求发送给您名册之外的任何人。订阅插件自动接受请求

这是现在的工作,但我无法设置新名册条目的昵称

以下是我正在使用的代码:

    //Send friend request
    var subscribe_packet = "<presence to='"+this.sender+"@"+chatManager.args()['domain']+"' from='"+chatManager.args()['username']+"@"+chatManager.args()['domain']+"' type='subscribe'>";
    subscribe_packet += "<nick xmlns='http://jabber.org/protocol/nick'>TestTest</nick>";
    subscribe_packet += "</presence>";

    console.log("Subscribe packet: "+subscribe_packet);
    con._sendRaw(subscribe_packet);
//发送好友请求
var subscribe_packet=“”;
订阅_数据包+=“TestTest”;
订阅_数据包+=“”;
console.log(“订阅包:“+Subscribe\u包”);
con.\u sendRaw(订阅数据包);
这将给出以下XML输出作为示例:

<presence to='targetuser@domain.com' from='sourceuser@domain.com'><nick xmlns='http://jabber.org/protocol/nick'>TestTest</nick></presence>
TestTest
这将发送订阅请求,但OpenFire未发送或未正确解释昵称


有什么想法吗?

Jason,XEP 0172不涉及服务器采取的任何操作。你需要让你的客户处理这个昵称。要执行此操作,请在收到订阅请求时检查给定的昵称,然后在将新订阅的用户添加到花名册时使用此昵称


顺便说一句:使用_sendRaw不是一个好主意(它是一个私有方法,因此_)。一个更干净的解决方案是使用getNickname和setNickname方法扩展JSJaCPresence原型。

这花了我很长时间才找到!我使用的是xmpphp,但通过使用jquery Strophe获得了解决方案

首先要做:

<iq type='set' xmlns='jabber:client' id='9155:sendIQ'>
        <query xmlns='jabber:iq:roster'>
                <item jid='user@localhost' name='usernickname'/>
        </query>
</iq>

其次是:

<presence to='user@localhost' type='subscribe' xmlns='jabber:client'/>

然后再次重命名:

<iq type='set' xmlns='jabber:client' id='9155:sendIQ'><query xmlns='jabber:iq:roster'><item jid='kafkav2@localhost' name='kafkav2RENAME'/></query></iq>


希望这能有所帮助,因为我使用的XML与您在上面使用的XML相同,但不起作用。

结果表明,这不是JsJac的问题。Openfire似乎没有遵循XEP-0172,特别是“在订阅请求中包含昵称”。有人有解决办法吗?