带有昵称的JsJAC订阅请求

时间:2011-07-11 20:53:07

标签: javascript xmpp openfire

我正在使用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);

这提供了以下XML输出作为示例:

<presence to='targetuser@domain.com' from='sourceuser@domain.com'><nick xmlns='http://jabber.org/protocol/nick'>TestTest</nick></presence>

这会发送订阅请求,但昵称未被OpenFire发送或未正确解释。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这让我永远找到了!我使用的是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,但是没有用。

答案 1 :(得分:0)

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

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