使用Android应用程序在XMPP Openfire服务器中进行聊天过程

时间:2015-09-22 05:57:28

标签: xmpp openfire smack

我正在使用Openfire XMPP服务器来安装Android聊天应用程序。我可以使用我的应用程序连接并登录服务器。

现在我想知道如何在此聊天应用程序中发送好友请求和接受好友请求。

我可以从服务器获取所有用户,但我想知道开始聊天的过程。

提前致谢。

1 个答案:

答案 0 :(得分:2)

这些过程比添加/接受朋友请求要复杂一些,你需要对presenceroster iq节进行一些操作。

我将尝试通过以下联系人操作向您说明发送/接收的节目。

1. Add contact
    To add a contact you need to send a `subscribe` stanza. 
    <presence xmlns="jabber:client" to="you@app.com/123" id="9VO8j-1" type="subscribe" from="me@app.com/1234" />
    1.1. Request accepted
        When adding a contact and the other app "accepts the request" you receive two stanzas:
            1. <presence xmlns="jabber:client" from="you@app.com/123" id="9VO8j-1" type="subscribed" to="me@app.com/1234" />
            2. <presence xmlns="jabber:client" from="you@app.com/123" id="9VO8j-2" type="subscribe" to="me@app.com/1234" />
            3. <presence xmlns="jabber:client" from="me@app.com/1234" id="9VO8j-3" type="subscribed" to="you@app.com/123" />

    1.2. Request Denied
        When the request is denied you receive an "UNSUBSCRIBED" stanza.
            Example: <presence xmlns="jabber:client" from="you@app.com/123" id="9VO8j-1" type="unsubscribed" to="me@app.com/1234" />

2. Accept contact request
    1. <presence xmlns="jabber:client" from="me@app.com/1234" id="9VO8j-1" type="subscribed" to="you@app.com/123" />
    2. <presence xmlns="jabber:client" from="me@app.com/1234" id="9VO8j-2" type="subscribe" to="you@app.com/123" />

3. Deny contact request
    <presence xmlns="jabber:client" from="me@app.com/1234" id="9VO8j-1" type="unsubscribed" to="you@app.com/123" />

4. Remove contact
    When you "Delete" a contact you should be in fact be "deleting" it locally in your app and from the roster. 
    This is done by sending two stanzas:
        1. <presence xmlns="jabber:client" from="me@app.com/1234" id="9VO8j-3" type="unsubscribe" to="you@app.com/123"/>
        2. <iq from='me@app.com/1234' id='ah382g67' to='you@app.com/123' type='set'>
             <query xmlns='jabber:iq:roster' ver='ver34'>
               <item jid='you@app.com/123' subscription='remove'/>
             </query>
            </iq>

注意: 上述用例不包含与之关联的所有 iq:roster presence节。subscription节。当联系人更改ask(change?[NSKeyValueChangeNewKey]?.boolValue)!类型时,服务器会自动发送这些内容。

为了更好地了解这些工作流程的工作原理,我建议您阅读最新的RFC(由您的服务器实现)。您可以在office site上找到它。

请参阅 3部分。管理名册