无法将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服务? 如果我在我的代码中做错了什么,请建议我使用一段代码或教程来实现这一点。
许多可能性。
尝试在xmppStreamDidConnect
和xmppStreamDidAuthenticate
添加断点。
如果未到达xmppStreamDidConnect
,则表示未建立连接; 你要纠正你的hostName。
如果未达到xmppStreamDidAuthenticate
,则不对用户进行身份validation; 你要纠正你的凭证,即用户名和/或密码。
一个常见的错误是在用户username@domainname
后面省略了@domainname
,即username@domainname
例如keithoys@openfireserver
,其中域名是keithoys@openfireserver
。
希望这仍然相关,如果没有,希望它会帮助别人。 您的代码存在一些问题:
-
我没有看到连接的调用,你应该添加这样的东西:
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]; }
-
大多数XMPP API都是异步的。
您必须设置流委托才能接收事件。 查看XMPPStreamDelegate
和XMPPStream#addDelegate
如果您不想自己编写代码XMPPStream.h ,则可以实现XMPPStreamDelegate
所有方法并记录事件。 这将有助于您了解框架的工作原理。
Yaron,希望这会有所帮助