无法将XMPPFramework连接到iOS中的Openfire服务器

我正在使用iOS聊天应用程序,用户登录到应用程序。 我从GitHub XMPPFramework下载了XMPPFramework 。 我正在尝试按照本教程将XMPP框架与Openfire服务器连接起来。 这是我将XMPP连接到openfire的代码。

 - (BOOL)connect { [self setupStream]; [xmppStream setHostName:@"192.168.1.5"]; [xmppStream setHostPort:5222]; NSString *jabberID = [[NSUserDefaults standardUserDefaults] stringForKey:@"userID"]; NSString *myPassword = [[NSUserDefaults standardUserDefaults] stringForKey:@"userPassword"]; if (![xmppStream isDisconnected]) return YES; if (jabberID == nil || myPassword == nil) return NO; [xmppStream setMyJID:[XMPPJID jidWithString:jabberID]]; password = myPassword; NSError *error = nil; if (![xmppStream isConnected]) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:@"Can't connect to server %@", [error localizedDescription]] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alertView show]; return NO; } return YES; } 

问题是当我运行应用程序时,它显示警报can't connect to server 。 我已经在StackOverflow上检查了很多问题,并尝试使用谷歌搜索,但找不到任何相关的解决方案。 如何将它连接到Openfire服务? 如果我在我的代码中做错了什么,请建议我使用一段代码或教程来实现这一点。

许多可能性。

尝试在xmppStreamDidConnectxmppStreamDidAuthenticate添加断点。

如果未到达xmppStreamDidConnect ,则表示未建立连接; 你要纠正你的hostName。

如果未达到xmppStreamDidAuthenticate ,则不对用户进行身份validation; 你要纠正你的凭证,即用户名和/或密码。

一个常见的错误是在用户username@domainname后面省略了@domainname ,即username@domainname例如keithoys@openfireserver ,其中域名是keithoys@openfireserver

希望这仍然相关,如果没有,希望它会帮助别人。 您的代码存在一些问题:

  1. 我没有看到连接的调用,你应该添加这样的东西:

     NSError *error = nil; if (![_xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error]) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error connecting" message:@"Msg" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alertView show]; } 
  2. 大多数XMPP API都是异步的。
    您必须设置流委托才能接收事件。 查看XMPPStreamDelegateXMPPStream#addDelegate

如果您不想自己编写代码XMPPStream.h ,则可以实现XMPPStreamDelegate所有方法并记录事件。 这将有助于您了解框架的工作原理。

Yaron,希望这会有所帮助