发布XMPP框架(iOS)和EJabberd服务器



我想创建一个使用Ejabberd作为服务器的聊天应用程序。我在我的笔记本电脑Ubuntu 12.04上设置了ejabberd,并将其转发到我的公共ip。我尝试使用Pidgin(Ubuntu),Adium(MacOS),IM+(Andriod,IOS)。他们所有人都可以互相联系和聊天。

然而,当我在这里学习教程时http://mobile.tutsplus.com/tutorials/iphone/building-a-jabber-client-for-ios-xmpp-integration/建立我自己的聊天应用程序。我遇到了很多问题,无法让我与其他帐户聊天。

以下是发送和接收的消息:

2012-07-19 11:59:59:749 XMPPStream[49107:403] RosterController: awakeFromNib
2012-07-19 11:59:59:973 XMPPStream[49107:403] AppDelegate: applicationDidFinishLaunching:
2012-07-19 12:00:06:460 XMPPStream[49107:4603] SEND: <?xml version='1.0'?>
2012-07-19 12:00:06:460 XMPPStream[49107:4603] SEND: <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' to='xxx.xxx.xxx.xxx'>
2012-07-19 12:00:06:464 XMPPStream[49107:4603] RECV: <stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" id="1582664547" from="xxx.xxx.xxx.xxx" version="1.0" stream:lang="en"/>
2012-07-19 12:00:06:465 XMPPStream[49107:4603] RECV: <stream:features xmlns:stream="http://etherx.jabber.org/streams"><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>SCRAM-SHA-1</mechanism></mechanisms><c xmlns="http://jabber.org/protocol/caps" hash="sha-1" node="http://www.process-one.net/en/ejabberd/" ver="wwrSvLFOLzC92POh074kJuEqYxE="/><register xmlns="http://jabber.org/features/iq-register"/></stream:features>
2012-07-19 12:00:06:465 XMPPStream[49107:403] RosterController: xmppStreamDidConnect:
2012-07-19 12:00:06:466 XMPPStream[49107:403] SEND: <auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="DIGEST-MD5"/>
2012-07-19 12:00:06:468 XMPPStream[49107:3e0b] RECV: <challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">bm9uY2U9IjIxNTYzMTM4ODEiLHFvcD0iYXV0aCIsY2hhcnNldD11dGYtOCxhbGdvcml0aG09bWQ1LXNlc3M=</challenge>
2012-07-19 12:00:06:468 XMPPStream[49107:3e0b] SEND: <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">dXNlcm5hbWU9Imt3ZWluZXIxIixyZWFsbT0iMjAzLjIwNS4xMC4xMjciLG5vbmNlPSIyMTU2MzEzODgxIixjbm9uY2U9Ijg1RUU5MTczLTQ0RTEtNDNDMS1CNzFBLTY3OEE5NTQ2MjU1MiIsbmM9MDAwMDAwMDEscW9wPWF1dGgsZGlnZXN0LXVyaT0ieG1wcC8yMDMuMjA1LjEwLjEyNyIscmVzcG9uc2U9NzMwZWZjNzUxOWIwNzNiNDEzMGU0NjFjMmVmMjliNmIsY2hhcnNldD11dGYtOA==</response>
2012-07-19 12:00:06:502 XMPPStream[49107:4603] RECV: <challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">cnNwYXV0aD00YzRjMDk4ZGJhYjk2NmNiMTg3MzVhOTMyYTZhMDkxYw==</challenge>
2012-07-19 12:00:06:502 XMPPStream[49107:4603] SEND: <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>
2012-07-19 12:00:06:854 XMPPStream[49107:4603] RECV: <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>
2012-07-19 12:00:06:854 XMPPStream[49107:4603] SEND: <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' to='xxx.xxx.xxx.xxx'>

以下是我观察到的:

  • 当我关闭ejabberd服务器时,客户端应用程序将停止工作。这意味着它试图连接到服务器
  • 在Android、Ubuntu和MacOS上,每次登录都会要求接受证书。但我在我的iOs应用程序上看不到它
  • 似乎在成功之后,它重新谈判,却没有得到任何回应
  • 在ejabberd的网络管理员上,我没有看到任何在线用户。然而,我看到日志中有请求。在iOS上调试XMPP应用程序应该遵循哪些文档和步骤

我在Ubuntu(Linux 32位)上使用XCode 4.3.2 iOS 5.1 Ejabberd 2.1.11。我试着调试和谷歌了两天,但没有线索

我深入研究了这个框架,并在这里提出了一个修复方案。https://github.com/robbiehanson/XMPPFramework/issues/81

它现在正在工作。希望能节省其他人的时间。

最新更新