2014-04-26 1 views
1

저는 XMPPFramework를 사용하여 iOS 클라이언트를 작성하고 있습니다. 나는 사용자를 재가동시킬 수 없다. 나는 ejabberd 서버를 구성했으며 이것이 실행 중이다. 나는 그것으로 어떤 문제도 가지지 않는다. Ejabberd의 웹 포털에서 사용자를 등록 할 수 있습니다. 하지만 문제는 iOS 클라이언트에서 사용자를 등록하려고 할 때 발생합니다. 서버 로그는 다음과 같습니다.XMPPFramework을 사용하여 Ejabberd에 사용자를 등록 할 수 없습니다.

=INFO REPORT==== 2014-04-26 12:06:43 === 
I(<0.380.0>:ejabberd_listener:281) : (#Port<0.3865>) Accepted connection {{211,28,44,250},49742} -> {{172,31,0,235},5222} 

=INFO REPORT==== 2014-04-26 12:06:44 === 
I(<0.424.0>:ejabberd_c2s:802) : ({socket_state,gen_tcp,#Port<0.3865>,<0.423.0>}) Failed authentication for [email protected] 

authmethod는 odbc입니다. 데이터와 메시지 저장을 위해 mysql을 사용하기 때문에. I 클라이언트에서 캡처

로그는

2014-04-25 20:46:49:384 iPhoneXMPP[1971:90b] SEND: <auth  xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="DIGEST-MD5"/> 
2014-04-25 20:46:49:620 iPhoneXMPP[1971:650b] RECV: <challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">bm9uY2U9IjMzNzkzODUwOTEiLHFvcD0iYXV0aCIsY2hhcnNldD11dGYtOCxhbGdvcml0aG09bWQ1LXNlc3M=</challenge> 
2014-04-25 20:46:49:621 iPhoneXMPP[1971:650b] SEND: <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">dXNlcm5hbWU9ImlvYzEiLHJlYWxtPSJsb2NhbGhvc3QiLG5vbmNlPSIzMzc5Mzg1MDkxIixjbm9uY2U9IkMzN0U0NjlBLTg0RUUtNEY3RS1CNTEzLTM5RUJFREU0NzQ3NCIsbmM9MDAwMDAwMDEscW9wPWF1dGgsZGlnZXN0LXVyaT0ieG1wcC9sb2NhbGhvc3QiLHJlc3BvbnNlPTQzYTY5OTVlZmY2Y2UwNzA0YmJkNWM4OWZiNGU5ZDQ1LGNoYXJzZXQ9dXRmLTg=</response> 
2014-04-25 20:46:49:865 iPhoneXMPP[1971:4953] RECV: <failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure> 
2014-04-25 20:46:49:865 iPhoneXMPP[1971:90b] iPhoneXMPPAppDelegate: xmppStream:didNotAuthenticate: 
2014-04-25 20:46:49.865 iPhoneXMPP[1971:90b] num--680 
2014-04-25 20:46:49.866 iPhoneXMPP[1971:90b] elements--(
"<username>[email protected]</username>", 
"<password>ioc</password>", 
"<name>[email protected]</name>", 
"<accounttype>1</accounttype>", 
"<devicetoken>680</devicetoken>", 
"<email>[email protected]</email>" 
) 

중요한 라인 아래에 있지 않은

2014년 4월 25일 아래 20 : 46 : 49 : 865 iPhoneXMPP [1971 4953] RECV :

나는 registerwithpassword 메서드를 사용하고 있는데 왜 내가 등록 할 수 없는지 혼란 스럽다. auth_method는 로그인 할 때 인증 메커니즘이 필요하기 때문에 로그인 할 때만 작동합니다. 하지만 여기서 나는 단지 등록 할 뿐이다. 왜 내가 등록 할 수 없습니까? 나는 "@localhost에 대한 인증 실패"라는 로그 라인을 얻고 있기 때문에 호스트 이름에 문제가 없다고 생각합니다.

이는 서버를 때리는 것을 의미합니다. 나를 막고있는 ejabberd.cfg 파일에 누락 된 것이 있습니까?

참고 : 또한, 나는 (도움말에 언급되어 있지만이 mnesia 관련이있다 - DB에 내장 내가 MySQL을 사용하고있다) 내부로 authmethod 시도하고 여전히 같은 문제를 가지고 나는 클라이언트가 아닌 생각 일부 연결 설정으로 인해 사용자를 등록 할 수 있습니다.

문제가 클라이언트 쪽인지 서버 쪽인지. 나를 안내 해줘. 시간 내 줘서 고마워.

+0

iOS 클라이언트에서 등록을 시도하기 전에 XMPP 스트림에 연결해야합니다. – iRuth

+0

@ iRuth- 답장을 보내 주셔서 감사합니다. XMPP 스트림에 연결할 수없는 경우 서버에 로그인 할 수 있습니까? 알려 주시기 바랍니다 –

+0

안녕하세요 전체 - 나는 아직 해결책을 찾지 못했습니다. 그러나 잠재적 인 문제는이 문제에 대한 XMPP 서버의 INBAND 등록 기능 일 수 있습니다. 서버에서 등록을 지원하기 위해 XMPP 서버를 변경했지만 여전히 문제에 직면했습니다. 이는 문제가 발생하여 문제를 해결할 수있는 사람들에게 도움이 될 수 있습니다. –

답변

2

등록이 작동하려면 스트림이 연결되어 있는지 확인해야합니다. 아래에 사용자 등록 방법의 샘플이 나와 있습니다.

- (IBAction)signUpButtonPressed:(UIButton *)sender { 
    // when the sign up button is pressed, set the JID for the xmpp stream 
    [self.xmppStream setMyJID:[XMPPJID jidWithString:jid]]; 
    // check that the stream is not disconnected 
    if([self.xmppStream isDisconnected]){ 
      // stream is not connected, attempt to connect 
     if (![self.xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error]) { 
      NSlog(@"Error connecting: %@", error); 
      } 
      // after stream connects, call [self beginRegistration] in xmppStreamDidConnect delegate method 
    } else { 
      [self beginRegistration]; 
    } 
}  

-(void) beginRegistration { 
    // check if inband registration is supported 
    if (self.xmppStream.supportsInBandRegistration) { 
     if (![self.xmppStream registerWithPassword:password error:&error]) { 
      NSlog(@"Registration error: %@", error); 
     } 
    } else { 
     NSlog(@"Inband registration is not supported"); 
    } 
} 

는 그 등록이 성공적으로 확인 xmppStreamDidRegister:(XMPPStream *)senderxmppStream:(XMPPStream *)sender didNotRegister:(NSXMLElement *)error 위임 방법을 사용합니다.

도움이 될지 알려주세요.

+1

이 코드는 이상하게 여겼습니다. 고마워요. 제가 근무한 이후로 일찍 시험하고 대답 할 수 없었습니다. 아름다운 답변에 다시 한번 감사드립니다. 희망이 많은 pthers 문제를 해결할 것입니다 –