4

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

谢谢

方法:

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

2 回答 2

10

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

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

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

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

[FBSession setActiveSession:session];

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

于 2012-11-21T20:43:39.397 回答
2

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

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

...    
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"]);
            }];
于 2012-11-23T12:57:30.063 回答