2013-06-20 3 views
3

Facebook 채팅을 구현하는 응용 프로그램을 만들려고합니다. 나는 모든 지식을 최대한 발휘하여 XMPP를 올바르게 설정했지만, 제대로 작동하지는 않는다.XMPP 인증은 예를 반환하지만 XMPPStreamDidAuthenticate는 결코 호출되지 않습니다.

사용자가 로그인하여 페이스 북에 인증 된 후 (FBSession 경유) 채팅 서비스에 연결하려고합니다. XMPP이 들어오는 곳 여기입니다 : 위의를 실행하는 경우

-(void)connect 
{ 
    [self setupStream]; 
    NSError *err; 

    [self.xmppStream connectWithTimeout:10.00 error:&err]; 
} 

-(void)setupStream 
{ 
    _xmppStream = [[XMPPStream alloc] initWithFacebookAppId:FACEBOOK_APP_ID]; 
    [self.xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()]; 
} 

- (void)xmppStreamDidConnect:(XMPPStream *)sender { 
    NSError *error; 
    NSError *err; 
    [self.xmppStream secureConnection:&err]; 
    bool authed = [self.xmppStream authenticateWithFacebookAccessToken: FBSession.activeSession.accessTokenData.accessToken error:&error]; 
    NSLog(@"%@", err); 
    NSLog(@"%@", [self.xmppStream authenticationDate]); 
    NSLog(@"%d, %@", authed, error); 
} 

- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender { 
    NSLog(@"did authenticate"); 
    [self goOnline]; 
} 

, 다 잘 갈 것 같다 xmppStreamDidConnect 짧은 대기 후라고하며 authed 항상 YES를 반환하고 오류가 항상 null입니다.

그러나 secureConnection을 반환합니다. 오류 도메인 = XMPPStreamErrorDomain 코드 = 1 "스트림이 연결될 때까지 기다려주십시오." UserInfo = 0xb23dc30 {NSLocalizedDescription = 스트림이 연결될 때까지 기다려주십시오.}authenticationDate은 항상 null입니다. 또한 xmppStreamDidAuthenticate을 포함하여 다른 대리자 메서드도 호출되지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

3

나는 결국 내 대답을 찾았습니다 !! 다른 사람이 저와 같은 문제에 부딪히는 경우 다음과 같습니다 :

openActiveSessionWithReadPermissions:allowLoginUI:completionHandler:을 호출하면 FBSession 개체가 실제로 페이스 북 서버와 통신하지 않거나 인증을 시도하지 않고 단순히 이전의 인증 토큰을로드합니다. 내 경우에는이 토큰이 무효화되었지만 그 사실을 깨닫지 못했고 아무 것도 말해주지 못했습니다. 마침내 토큰을 로깅하고 Facebook의 Access Token Debugger에 넣어서 알아 냈습니다. 토큰이 유효한지 확인하려면 [FBSession renewSystemCredentials:]으로 전화하여 결과를 기다려야합니다. 그런 다음 새 토큰을 생성하기 전에 수동으로 closeAndClearTokenInformation을 사용해야하는지 결정할 수 있습니다.

+2

실제 질문과 관련하여이 답변이 무엇입니까? – p0lAris

관련 문제