XMPP身份验证返回yes,但从未调用XMPPStreamDidAuthenticate

时间:2013-06-20 15:25:25

标签: iphone ios objective-c facebook xmpp

我正在尝试创建一个实现Facebook Chat的应用程序。据我所知,我已经正确设置了所有XMPP内容,但是我无法让它工作。

用户登录并通过Facebook验证后(通过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];
}

运行上述内容时,一切似乎都很顺利:短暂等待后调用xmppStreamDidConnectauthed始终返回YES,其错误始终为null

但是,secureConnection返回错误域= XMPPStreamErrorDomain Code = 1“请等到流连接完毕。” UserInfo = 0xb23dc30 {NSLocalizedDescription =请等待直流连接。} authenticationDate也始终为null。此外,没有调用任何其他委托方法,包括xmppStreamDidAuthenticate。我做错了什么?

1 个答案:

答案 0 :(得分:3)

我终于找到了答案!!在这里,如果有其他人遇到与我相同的问题:

当调用openActiveSessionWithReadPermissions:allowLoginUI:completionHandler: FBSession对象实际上没有与Facebook服务器通信或尝试与它们进行身份验证时,它只是加载以前的authenticationToken。在我的情况下,这个令牌已经变得无效,但我没有意识到这一点,没有任何东西可以告诉我。我终于通过记录令牌并将其放入Facebook的Access Token Debugger来弄明白了。要检查您的令牌是否有效,您必须致电[FBSession renewSystemCredentials:]并等待结果。然后,您可以在尝试创建新令牌之前确定是否需要手动closeAndClearTokenInformation