检查我的Facebook应用程序是否已获得授权

我的问题是如何检查我的FaceBook应用程序是否已被用户授权发布,无法找到任何信息。

我在用着:

 Facebook* facebook = [[Facebook alloc] initWithAppId:@"1234567"];
 [facebook authorize:[NSArray arrayWithObjects:@"read_stream", @"offline_access",nil] delegate:self];

弹出一个对话框,要求我授权该应用程序,完成后我可以做一个:

 [facebook dialog:@"feed" andDelegate:self];

在该应用上发布笔记。

但是,如果用户阻止或删除应用程序,我想在显示发布对话框之前再次进行授权,在调用授权之前无法找到获取此类信息的方法。

任何帮助表示赞赏。

谢谢。


我也必须处理这个问题。

当调用对话框方法时,你发送一个委托符合FBDialogDelegate,它有一个方法,当对话由于错误而加载失败时会调用该方法。 但是,如果应用程序未经授权,对话框会向用户显示一个登录屏幕,但在设置用户和密码后,会出现另一个表单,让用户知道发生了错误。 代表也被称为,但收到的错误只是表明他的方法失败,没有确切的原因,甚至错误的数字。 应该在任何事情之前用正确的错误调用此方法,以便应用程序可以相应地采取行动。

所以我找到了一个解决办法,也许这不是最好的方法,但它确实有效。 如果应用程序未经用户授权,您通过请求对Facebook图形API进行的任何调用都将失败。 所以我所做的是在调用feed对话框方法之前检查它。

在需要测试应用程序是否仍被授权的情况下,添加以下行:

if ([facebook isSessionValid])
    //isSessionValid only checks if the access token is set, and the expiration date is still valid. Lets make a call and see if we really are authorized to post to this user from this app.     
    [facebook requestWithGraphPath:@"me" andDelegate:self];
else
    //authorize Facebook connect

这只会调用返回用户基本信息的方法。 如果一切正常,将从代理调用以下方法:

- (void)request:(FBRequest *)request didLoad:(id)result
{
   //Everything is ok. You can call the dialog method. It should work.
}

如果该应用程序已被用户授权,则将从该委托中调用以下方法:

- (void)request:(FBRequest *)request didFailWithError:(NSError *)error;
{        
    NSString *type = [[[error userInfo] objectForKey:@"error"] objectForKey:@"type"];

    if (type)
    {
        if ([type isEqualToString:@"OAuthException"]) //aha! 
        {
            //user has unauthorized the app, lets logout from Facebook connect. Also clear the access and expiration date tokens
            [facebook logout:self];


            //Call the authorize method again. Or let the user know they need to authorize the app again.
        }
    }
}

所以,正如我之前所说,不是最好的方式,而是完成工作。 希望Facebook会添加一个方法来检查这个特定的场景,或者向处理未授权应用程序问题的代理添加一个新方法。


我不确定如何用Facebook的SDK做到这一点,但你可以使用FQL来查询权限。 查询网址看起来像

https://api.facebook.com/method/fql.query?query=SELECT+uid,+read_stream,+offline_access+FROM+permissions+WHERE+uid=me()&access_token=...

它看起来像requestWithMethodName:andParams:andHttpMethod:andDelegate:传递fql.query作为方法是要走的路,只要你可以安排isSessionValid为true(或者以某种方式自己提供access_token在params中)。

链接地址: http://www.djcxy.com/p/6037.html

上一篇: check if my facebook app is allready authorized

下一篇: config xml file usable inside of it?