我如何使用iPhone中的xmppstream对象验证Facebook访问令牌

时间:2012-07-12 11:13:56

标签: iphone xmpp

我正在使用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];        
}

当我运行此应用程序时,我收到了错误的错误

didNotAuthenticate

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

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分: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开发人员的门户网站制作应用程序,当您获得应用程序的唯一ID时,称为API密钥。 然后,当您想要将用户登录到Facebook时,您可以在Web浏览器中转到以下URL:      https://graph.facebook.com/oauth/authorize?     client_id = [您的API密钥]&     REDIRECT_URI = http://www.facebook.com/connect/login_success.html&     scope = [你想要的扩展权限]&     键入= USER_AGENT&安培;     显示触摸= 用户将看到标准的Facebook登录页面,他们可以输入用户名和密码,并提供所需的任何权限。 您不需要自己实现redirect_uri - 您可以使用Facebook中的预设,如上所示。预设回调将返回一个访问令牌,这是您将来所有请求所需要的。 当用户登录时,Facebook会在cookie中存储有关登录的一些信息。因此,下次尝试登录时,如果cookie未过期,登录将自动完成,无需用户干预!