使用 Strophe.js 名册插件和 Ejabberd 接收“订阅”状态

Posted

技术标签:

【中文标题】使用 Strophe.js 名册插件和 Ejabberd 接收“订阅”状态【英文标题】:Receive 'subscribe' presences with Strophe.js Roster plugin and Ejabberd 【发布时间】:2016-08-23 15:45:20 【问题描述】:

我使用 Strophe.js Roster plugin 和 Ejabberd 作为 XMPP 服务器。当我使用Adium 或其他一些 XMPP 客户端时,我可以在我的名册中添加一些其他帐户。当我发送邀请时,其他帐户收到出席type=='subscribe'

Wit Strophe.js 名册,我从来没有收到type == 'subscribe' 的任何出席! 我尝试了一切...我添加了一些处理程序...我“过滤”了 ...

这是我的代码:

HTML 包括

    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js'></script>
    <script src='../strophe.js'></script>
    <script src="../strophe.muc.js"></script>
    <script src="../strophe.register.js"></script>
    <script src="../strophe.roster.js"></script>
    <script src='my-code.js'></script>

my-code.js

var jid;
$(document).ready(function () 
    connection = new Strophe.Connection(BOSH_SERVICE, 'keepalive': true);
    //connection.rawInput = rawInput;
    //connection.rawOutput = rawOutput;

    connection.addHandler(onPresence, null, 'presence', null, null, null);
    connection.roster.registerRequestCallback(onRequest);


    // Manage connection
    try 
        $('#connect').get(0).value = 'disconnect';
        connection.restore(null, onRegister);
     catch(e) 
        if (e.name !== "StropheSessionError")  throw(e); 
        $('#connect').get(0).value = 'connect';
    
    $('#connect').bind('click', function () 
       var button = $('#connect').get(0);
       if (button.value == 'connect') 
           button.value = 'disconnect';

           jid = $('#jid').get(0).value;
           connection.connect(jid, $('#pass').get(0).value, onConnect, 10);
        else 
           button.value = 'connect';
           connection.disconnect();
       
   );
);


function onPresence(stanza)

    log("PRESENCE");
    console.log(stanza);

    return true;


function onRequest(req) 

    console.log("Request");
    console.log(req);

    return true;

我错过了什么吗?

【问题讨论】:

在这里查看我的答案:***.com/questions/34994662/strophe-register-plugin/… 也许它可以帮助你。 【参考方案1】:

我的问题解决了!

我们必须在连接状态为 Strophe.Status.CONNECTING

function onConnect(status)

    if (status == Strophe.Status.CONNECTING) 
        log('Strophe is connecting.');
     else if (status == Strophe.Status.CONNFAIL) 
        log('Strophe failed to connect.');
     else if (status == Strophe.Status.DISCONNECTING) 
        log('Strophe is disconnecting.');
     else if (status == Strophe.Status.DISCONNECTED) 
        log('Strophe is disconnected.');
     else if (status == Strophe.Status.CONNECTED) 
        log('Strophe is connected.');


        // Send a presence to the server
        connection.send($pres().tree());

    

【讨论】:

以上是关于使用 Strophe.js 名册插件和 Ejabberd 接收“订阅”状态的主要内容,如果未能解决你的问题,请参考以下文章

使用 strophe.js 在 eJabberd 服务器上获取具有名称的特定花名册

在登录时检索一个人的名册联系人列表

仅限 Openfire 名册通信

XMPP:如何查询特定名册的存在

Strophe.js 注册插件不起作用

strophe.js 聊天状态通知