【问题标题】:Facebook SDK 3.1 - com.facebook.sdk Error 5 when authenticating with [facebook authorize:permissions]Facebook SDK 3.1 - com.facebook.sdk 使用 [facebook authorize:permissions] 进行身份验证时出现错误 5
【发布时间】:2012-11-09 20:47:24
【问题描述】:

使用以下授权方法进行身份验证时,我收到了带有 startWithGraphPath 和 startForMeWithCompletionHandler 的 com.facebook.sdk 错误 5,但不是 requestWithGraphPath。我成功地获得了令牌(在 didLogin 中打印)并通过 requestwithGraphPath 获得了我想要的任何东西,但我无法使用其他方法。如果有人遇到同样的问题或类似的事情或有任何想法,如果你分享我会很高兴。

谢谢

方法:

NSArray *permissions = [[NSArray alloc] initWithObjects: @"user_likes",@"offline_access",@"read_stream",@"publish_stream",nil];
[_facebook authorize:permissions];

【问题讨论】:

    标签: ios xcode facebook sdk authorization


    【解决方案1】:

    startWithGraphPath 和其他 start* 方法可能不会获取活动会话。这些方法依赖于设置的活动会话。见:

    https://developers.facebook.com/docs/reference/ios/3.1/class/FBRequestConnection#startWithGraphPath%3AcompletionHandler%3A

    "请求使用[FBSession activeSession]表示的活动会话。"

    所以你必须这样做:

    [FBSession setActiveSession:session];
    

    其中 session 是您之前设置的 FBSession。

    【讨论】:

    • 所以,我需要在我的会话委托中创建我自己的会话。如何仅使用授权方法结果的令牌设置新的会话对象?
    • 我想出了如何做到这一点。无论如何,请让我放松一下。
    【解决方案2】:

    以下解决方案对我有用。但是,如果您要存储永久访问令牌,则需要确保用户没有删除应用程序权限,否则会出错。您可以使用 requestWithGraphPath -> "me/permissions" 进行检查。

    应用程序初始化函数(例如:didFinishLaunchingWithOptions/或您初始化 Facebook 对象的位置同时需要为 fbsessiondelegate

    ...    
    NSArray* permissions = [[NSArray alloc] initWithObjects:@"user_likes",@"offline_access", nil];
    
            FBSession*oursession = [[FBSession alloc] initWithPermissions:permissions];
    ...
    

    FBDidLogin 函数:

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
        [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
        [defaults synchronize];
    

    图api请求函数示例:

    NSUserDefaults *userDefaults =[NSUserDefaults standardUserDefaults];
            NSString *key = [userDefaults stringForKey:@"FBAccessTokenKey"];
    
        FBRequest* ourcon = [[FBRequest alloc] initWithSession:oursession graphPath:@"me/likes" parameters:params HTTPMethod:@"GET"];
    
                [ourcon startWithCompletionHandler: ^(FBRequestConnection *connection, id<FBGraphUser> result, NSError *error){
                    if(error)
                    {
                        //NSLog(error.code);
                        return;
                    }
    
                    NSArray* collection = (NSArray*)[result data];
                    NSLog(@"You have %d like", [collection count]);
    
                    NSDictionary* name = [collection objectAtIndex:14];
                    NSLog(@"Like Name: %@", [name objectForKey:@"name"]);
                }];
    

    【讨论】:

      猜你喜欢
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多