2013-06-15 2 views
2

Я прочесываю интернет, пытаясь найти решение этой проблемы. Я понимаю основную идею о том, как она должна работать, но я не могу заставить реализацию работать, и я не могу найти достойных примеров, чтобы помочь мне. До сих пор мне удалось войти в систему с помощью механизма проверки подлинности iOS 6, но я не могу понять, как аутентифицировать пользователя на сервере Jabber. Вот что у меня есть:Почему я не могу аутентифицироваться в чате Facebook в приложении iOS?

После того как пользователь вошел в систему connect не называется

-(void)connect 
{ 
    [self setupStream]; 
    NSError *error = nil; 
    [_xmppStream authenticateWithFacebookAccessToken: FBSession.activeSession.accessTokenData.accessToken error:&error]; 
    NSLog(@"%@", error); 
    [NSString stringWithFormat:@"%@", self]; 
} 

-(void)newSetupStream 
{ 
    _xmppStream = [[XMPPStream alloc] initWithFacebookAppId:@"611051652253156"]; 

#if !TARGET_IPHONE_SIMULATOR 
{ 
    xmppStream.enableBackgroundingOnSocket = YES; 
} 
#endif 


    _xmppReconnect = [[XMPPReconnect alloc] init]; 


    _xmppRosterStorage = [[XMPPRosterCoreDataStorage alloc] init]; 

    _xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:_xmppRosterStorage]; 
    _xmppRoster.autoFetchRoster = YES; 
    _xmppRoster.autoAcceptKnownPresenceSubscriptionRequests = YES; 


    _xmppvCardStorage = [XMPPvCardCoreDataStorage sharedInstance]; 
    _xmppvCardTempModule = [[XMPPvCardTempModule alloc] initWithvCardStorage:_xmppvCardStorage]; 
    _xmppvCardAvatarModule = [[XMPPvCardAvatarModule alloc] initWithvCardTempModule:_xmppvCardTempModule]; 


    _xmppCapabilitiesStorage = [XMPPCapabilitiesCoreDataStorage sharedInstance]; 
    _xmppCapabilities = [[XMPPCapabilities alloc] initWithCapabilitiesStorage:_xmppCapabilitiesStorage]; 
    _xmppCapabilities.autoFetchHashedCapabilities = YES; 
    _xmppCapabilities.autoFetchNonHashedCapabilities = NO; 


    [_xmppReconnect   activate:_xmppStream]; 
    [_xmppRoster   activate:_xmppStream]; 
    [_xmppvCardTempModule activate:_xmppStream]; 
    [_xmppvCardAvatarModule activate:_xmppStream]; 
    [_xmppCapabilities  activate:_xmppStream]; 


    [_xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()]; 
    [_xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()]; 
} 

Независимо от того, что я стараюсь всегда возвращает ту же ошибку: Error Domain=XMPPStreamErrorDomain Code=4 "The server does not support X-FACEBOOK-PLATFORM authentication."

Я не невероятно знакомы ни с XMPP или API Facebook, поэтому я уверен, что есть что-то простое, что мне не хватает, но я работал над этим навсегда и не смог добиться какого-либо прогресса. Есть идеи?

ответ

1

Я нашел свой ответ. В случае, если кто-то еще сталкивается с этой проблемой: я никогда не говорил, что мой XMPPStream подключается. Я уже пробовал все способы подключения, но они никогда не работали. Теперь я понимаю, что я просто не дождался их завершения. Вот что я в итоге изменил:

NSError *error; 
NSError *err; 
[_xmppStream connectWithTimeout:10.00 error:&err]; 

[_xmppStream authenticateWithFacebookAccessToken: FBSession.activeSession.accessTokenData.accessToken error:&error]; 
while (error) 
{ 
    sleep(1); 
    [_xmppStream authenticateWithFacebookAccessToken: FBSession.activeSession.accessTokenData.accessToken error:&error]; 
} 

Я понимаю, что это не самое элегантное решение, но оно работает.

0

убедитесь, что вы используете chat.facebook.com или facebook.com в качестве имени хоста.

Вы также должны открыть сеанс с разрешением xmpp_login.

Для меня указанное имя хоста работает 100% штраф

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