2014-11-05 3 views
2

Я работаю над чат-приложением , где пользователь подключается к приложению. Я загрузил XMPPFramework из GitHub XMPPFramework. Я пытаюсь подключить XMPP рамки с сервером Openfire, следуя this tutorial. Вот мой код для подключения XMPP к openfire.Не удается подключить XMPPFramework к серверу Openfire в iOS

- (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

Множество возможностей.

Попробуйте добавить точки останова на xmppStreamDidConnect и xmppStreamDidAuthenticate.

Если xmppStreamDidConnect не был достигнут, соединение не установлено; вы должны исправить имя хоста.

Если xmppStreamDidAuthenticate не достигнут, пользователь не аутентифицирован; вы должны исправить свои учетные данные, то есть имя пользователя и/или пароль.

Одна из распространенных ошибок заключается в отсутствии @domainname в конце имени пользователя i.e. [email protected], например. [email protected] где доменное имя openfireserver.

+0

Выполнено с этим. Но как отправить, получить и принять запрос друга с помощью XMPP? –

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. Большинство API XMPP является асинхронным.
    Вы должны установить делегат потока для получения событий. Проверьте XMPPStreamDelegate и XMPPStream#addDelegate

Если вы не хотите, чтобы пройти через код самостоятельно XMPPStream.h , вы можете реализовать все методы XMPPStreamDelegate и журнала событий. Это поможет вам понять, как работает структура.

Надеюсь, это поможет, Ярон

Смежные вопросы