2014-11-05 61 views
2

我正在使用iOS聊天应用程序,其中用户登录到应用程序。我已经从GitHub XMPPFramework下载了XMPPFramework。我试图通过以下this tutorial连接XMPP框架与Openfire服务器。这里是我将XMPP连接到openfire的代码。无法将XMPPFramework连接到iOS中的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的问题,并尝试使用Google搜索,但找不到任何相关解决方案。如何将它连接到Openfire服务?如果我在代码中做错了任何事情,请使用一段代码或一个教程来提示我做到这一点。

回答

2

许多可能性。

尝试在xmppStreamDidConnect和​​处添加断点。

如果没有达到xmppStreamDidConnect,连接没有建立;你必须纠正你的hostName。

如果没有达到​​,则用户没有被认证;您必须纠正您的凭据,即用户名和/或密码。

一个常见的错误是在用户名后面省略@domainname,即[email protected]例如, [email protected]其中域名是openfireserver

+0

做到这一点。但是如何使用XMPP发送,接收和接受朋友请求? – 2014-11-29 06:44:24

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

如果你不想通过代码自己XMPPStream.h ,你可以实现的XMPPStreamDelegate所有方法和记录的事件。这将帮助您了解框架的工作原理。

希望这有助于亚龙

相关问题