7

我正在使用 xmppframework 开发 Facebook 聊天应用程序。我获得了 Facebook 访问令牌,但
此访问权限未通过 xmppstream 对象进行身份验证:

这是我的setupStream方法

- (void)setupStream
{
   XMPPStream *xmppStream=[[XMPPStream alloc] initWithFacebookAppId:@"443170809037796"];
}   

这是我的连接方法

-(BOOL)connect1
{
    NSLog(@"connect1");
    NSError *error = nil;
    if(![xmppStream isDisconnected]) 
    {
        NSLog(@"isDisconnected");
        return YES;
    } 
    if (![xmppStream connect:&error])
    {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error connecting fb" 
                                                            message:@"See console for error details."
                                                           delegate:nil
                                                  cancelButtonTitle:@"Ok" 
                                                  otherButtonTitles:nil];
        [alertView show];   
        return NO;
    }
    return YES;
}

这是我xmppStreamDidconnect的身份验证委托方法

- (void)xmppStreamDidConnect:(XMPPStream *)sender
{
    isXmppConnected = YES;
    NSError *error = nil;
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [xmppStream authenticateWithFacebookAccessToken:[defaults             objectForKey:@"FBAccessTokenKey"] error:&error];        
}

当我运行这个应用程序时,我得到了休闲错误

没有验证

任何人都可以解决我的问题。

4

2 回答 2

1

facebook 聊天使用安全连接,因此连接方法应如下所示

- (void)xmppStreamDidConnect:(XMPPStream *)sender
{
    DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD);

    isXmppConnected = YES;

    NSError *error = nil;
    //facebook connection
    if (_streamType == AAConnectStreamTypeFacebook) {

        if (![xmppStream isSecure])
        {

            NSError *error = nil;
            BOOL result = [xmppStream secureConnection:&error];

            if (result == NO)
            {
                DDLogError(@"%@: Error in xmpp STARTTLS: %@", THIS_FILE, error);

            }
        }
        else
        {

            NSError *error = nil;
            BOOL result = [xmppStream authenticateWithFacebookAccessToken:FBSession.activeSession.accessTokenData.accessToken error:&error];

            if (result == NO)
            {
                DDLogError(@"%@: Error in xmpp auth: %@", THIS_FILE, error);

            }
        }
    }
    else if (![[self xmppStream] authenticateWithPassword:password error:&error])
    {

        DDLogError(@"Error authenticating: %@", error);
    }
}
于 2013-04-13T18:54:06.937 回答
0
http://benbiddington.wordpress.com/2010/04/23/facebook-graph-api-getting-access-tokens/


 http://www.raywenderlich.com/1488/how-to-use-facebooks-new-graph-api-from-your-iphone-app

如何使用 Graph API 对用户进行身份验证

OAuth 身份验证如何工作 为了向 Facebook 验证用户身份,Graph API 使用新的 OAuth 2.0 协议。别担心——这个名字听起来很壮观,但它的工作方式实际上很简单。这个想法是您使用 Facebook 开发人员的门户制作一个应用程序,当您这样做时,您会为您的应用程序获得一个称为 API 密钥的唯一 ID。然后,当您想将用户登录到 Facebook 时,您可以在 Web 浏览器中访问以下 URL: https://graph.facebook.com/oauth/authorize?client_id=[您的 API 密钥]& redirect_uri= http://www.facebook.com/connect/login_success.html& scope=[您想要的扩展权限]& type=user_agent& display=touch 用户将看到一个标准的 Facebook 登录页面,他们可以输入他们的用户名和密码,并提供所需的任何权限。您不需要自己实现 redirect_uri - 您可以使用 Facebook 的预设,如上所示。预设回调将返回给您一个访问令牌,这是您发出所有未来请求所需要的。当用户登录时,Facebook 会在 cookie 中存储一些有关登录的信息。所以下次尝试登录时,如果 cookie 没有过期,登录将自动完成,无需用户干预!

于 2013-03-26T11:40:29.097 回答