【问题标题】:FaceBook iOS - check if my facebook app is allready authorizedFacebook iOS - 检查我的 Facebook 应用程序是否已获得授权
【发布时间】:2011-11-07 12:54:59
【问题描述】:

我的问题是如何检查我的 Facebook 应用程序是否已获得用户发帖的授权,找不到任何相关信息。

我正在使用:

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

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

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

在该应用上发布注释。

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

感谢任何帮助。

谢谢。

【问题讨论】:

    标签: iphone objective-c ipad ios4 facebook-graph-api


    【解决方案1】:

    我也不得不处理这个问题。

    调用对话框方法时,您发送一个应符合 FBDialogDelegate 的委托,该委托有一个方法,当对话框因错误而无法加载时调用。但在应用程序未经授权的情况下,对话框会向用户显示登录屏幕,但在设置用户和密码后,会出现第二个表单,让用户知道发生了错误。委托也被调用,但收到的错误只是表明他的方法失败了,没有确切的原因,甚至没有错误号。这个方法应该在正确的错误被调用之前,所以应用程序可以采取相应的行动。

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

    在您需要测试应用程序是否仍被授权的地方添加以下行:

    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 将添加一种方法来检查这种特定情况,或者向代理添加一种新方法来处理未经授权的应用程序问题。

    【讨论】:

      【解决方案2】:

      我不确定如何使用 Facebook 的 SDK 来完成,但您可以使用 FQL 查询 permissions。查询 URL 类似于

      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 为真(或以某种方式自己在参数中提供access_token)。

      【讨论】:

        猜你喜欢
        • 2014-04-28
        • 2016-10-21
        • 2015-06-11
        • 1970-01-01
        • 2017-04-23
        • 2012-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多