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

时间:2014-11-05 05:29:23

标签: ios objective-c xmpp openfire xmppframework

我正在使用iOS聊天应用,用户可以登录应用。我已从GitHub XMPPFramework下载了XMPPFramework。我正在尝试按照this tutorialXMPP框架与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服务?如果我在我的代码中做错了什么,请建议我使用一段代码或教程来实现这一目标。

2 个答案:

答案 0 :(得分:2)

一系列可能性。

尝试在xmppStreamDidConnectxmppStreamDidAuthenticate添加断点。

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

如果未达到xmppStreamDidAuthenticate,则用户未经过身份验证;您需要更正您的凭据,即用户名和/或密码。

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

答案 1 :(得分:2)

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

  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

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

    希望这有帮助,Yaron