Facebook SDK 3.1 - com.facebook.sdk使用[facebook authorize:permissions]进行身份验证时出错5

时间:2012-11-21 15:00:59

标签: ios xcode facebook sdk authorization

使用以下授权方法进行身份验证时,我使用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];

2 个答案:

答案 0 :(得分:10)

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

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

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

所以你必须做这样的事情:

[FBSession setActiveSession:session];

会话是您之前设置的FBSession。

答案 1 :(得分:2)

以下解决方案为我工作。但是,如果您要存储永久访问令牌,则需要确保用户未删除应用程序权限,否则会出错。您可以使用requestWithGraphPath检查 - > “我/权限”。

应用程序初始化函数(例如:_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"]);
            }];