2014-11-05 5 views
2

iOS 채팅 앱에서 사용자가 앱에 로그인하는 중입니다. GitHub XMPPFramework에서 XMPPFramework을 다운로드했습니다. 나는 Openfire 서버와 함께 XMPP 프레임 워크를 this tutorial에 연결하려고합니다. 다음은 XMPP를 openfire에 연결하는 코드입니다. iOS에서 Openfire 서버에 XMPPFramework를 연결할 수 없습니다.

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

가능성이 있습니다.

xmppStreamDidConnectxmppStreamDidAuthenticate에 중단 점을 추가해보십시오.

xmppStreamDidConnect에 도달하지 않으면 연결이 설정되지 않습니다. hostName을 수정해야합니다.

xmppStreamDidAuthenticate에 도달하지 않으면 사용자가 인증되지 않습니다. 사용자 이름 및/또는 암호와 같은 자격 증명을 수정해야합니다.

일반적인 실수 중 하나는 사용자 이름의 뒤쪽에 @domainname (예 : [email protected])을 생략하는 것입니다. [email protected] 여기서 도메인 이름은 openfireserver입니다.

+0

이걸로 끝내십시오. 하지만 XMPP로 친구 요청을 보내고 받고 받아 들일 수 있습니까? –

2

희망 사항이 여전히 적절하고, 그렇지 않을 경우 다른 사람들에게 도움이되기를 바랍니다. 코드 몇 가지 문제가 있습니다 : 내가 연결하는 전화가 표시되지 않습니다

  1. , 당신은 이런 식으로 뭔가를 추가해야 다음 XMPP의 API의 대부분

    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. 비동기입니다.
    이벤트를 받으려면 스트림 대리자를 설정해야합니다. 당신이 코드를 직접 XMPPStream.h 통과하지 않으려면 XMPPStreamDelegateXMPPStream#addDelegate

을 확인 , 당신은 XMPPStreamDelegate의 모든 메소드를 구현하고 이벤트를 기록 할 수 있습니다. 이렇게하면 프레임 워크가 어떻게 작동하는지 이해하는 데 도움이됩니다.

희망이 있으시면, Yaron

관련 문제