我正在使用iOS
聊天应用,用户可以登录应用。我已从GitHub XMPPFramework下载了XMPPFramework
。我正在尝试按照this tutorial将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服务?如果我在我的代码中做错了什么,请建议我使用一段代码或教程来实现这一目标。
答案 0 :(得分:2)
一系列可能性。
尝试在xmppStreamDidConnect
和xmppStreamDidAuthenticate
添加断点。
如果未达到xmppStreamDidConnect
,则表示未建立连接;你要纠正你的hostName。
如果未达到xmppStreamDidAuthenticate
,则用户未经过身份验证;您需要更正您的凭据,即用户名和/或密码。
一个常见的错误是在用户名后面省略了@domainname
,例如username@domainname
,例如keithoys@openfireserver
,其中域名为openfireserver
。
答案 1 :(得分:2)
希望这仍然相关,如果没有,希望它会帮助别人。 您的代码存在一些问题:
我没有看到连接的调用,你应该添加如下内容:
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