3

我正在更新我的应用程序以使用新的 iOS 版 Facebook SDK (3.0)。但是,我在尝试使用提要对话框时遇到了问题。我按照Facebook 开发者网站上关于如何将提要对话框与新 SDK 一起使用的说明进行操作,但在显示对话框时出现此错误

API 错误代码:110
API 错误描述:无效的用户 ID
错误消息:缺少用户 cookie(用于验证会话用户)

这是我的代码:

Facebook *facebook = [[Facebook alloc] initWithAppId:FBSession.activeSession.appID andDelegate:nil];

facebook.accessToken = FBSession.activeSession.accessToken;
facebook.expirationDate = FBSession.activeSession.expirationDate;

NSMutableDictionary *feedParams = [[NSMutableDictionary alloc] init];

[feedParams setObject:self.video.alternateLink.href
               forKey:@"link"];
// link title = video title
[feedParams setObject:self.video.title.stringValue
               forKey:@"name"];
// link picture = video thumbnail
[feedParams setObject:self.video.mediaGroup.highQualityThumbnail.URLString
               forKey:@"picture"];

NSDictionary *privacyDict = [NSDictionary dictionaryWithObjectsAndKeys:@"CUSTOM", @"value", @"SELF", @"friends", nil];
SBJSON *jsonWriter = [[SBJSON alloc] init];

[feedParams setObject:[jsonWriter stringWithObject:privacyDict error:NULL]
               forKey:@"privacy"];

[jsonWriter release];

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

[feedParams release];

self.facebook = facebook;
[facebook release];

这似乎是一个身份验证问题,但我将一个有效的访问令牌传递给 Facebook 对象,所以我不确定问题是什么。如果有人可以帮助我,那就太好了。谢谢。

4

1 回答 1

2

如您所展示的,在与旧版 Facebook 类集成时,您可以使用 FBSession.activeSession。当您使用 activeSession 而不是直接实例化会话对象时,一个可能的问题是它可能未打开。这是一个简单的示例,显示了将 Facebook 类与活动会话集成的表单:

if (FBSession.activeSession.isOpen) {
    // Create a Facebook instance
    Facebook *facebook = [[Facebook alloc] initWithAppId:FBSession.activeSession.appID
                                             andDelegate:nil]; // commonly self

    // Set the session information for the Facebook instance
    facebook.accessToken = FBSession.activeSession.accessToken;
    facebook.expirationDate = FBSession.activeSession.expirationDate;

    // Put together the dialog parameters
    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"I'm using the the Facebook SDK for iOS", @"name",
                                   @"Facebook for iOS", @"caption",
                                   @"Check out the Facebook SDK for iOS!", @"description",
                                   @"https://developers.facebook.com/ios", @"link",
                                   @"http://www.facebookmobileweb.com/hackbook/img/facebook_icon_large.png", @"picture",
                                   nil];

    // Invoke the dialog
    [facebook dialog:@"feed" andParams:params andDelegate:nil];

    [facebook release];
}

如果活动会话未打开,那么您将遇到与您所看到的一样的失败。在您的逻辑中较早的地方进行如下调用,可以解决此问题:

[FBSession openActiveSessionWithAllowLoginUI:YES];

希望这可以帮助!

于 2012-08-07T17:01:14.540 回答