1

我一直在网上搜索,试图找到解决这个问题的方法。我了解它应该如何工作的基本想法,但我无法让实现工作,我找不到任何体面的例子来帮助我。到目前为止,我已经成功地能够使用 iOS 6 身份验证机制登录用户,但我无法弄清楚如何从那里向 Jabber 服务器验证用户身份。这是我所拥有的:

用户登录后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 或 Facebook API 都不是非常熟悉,所以我确信我缺少一些简单的东西,但我一直在努力解决这个问题并且无法取得任何进展。有任何想法吗?

4

2 回答 2

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];
}

我意识到这不是最优雅的解决方案,但它确实有效。

于 2013-06-19T14:28:44.503 回答
0

确保使用 chat.facebook.com 或 facebook.com 作为主机名。

您还必须使用xmpp_login权限打开会话。

对我来说,上面的主机名可以 100% 正常工作

于 2013-12-30T12:12:44.370 回答