为什么用于Feed发布的Facebook iOS对话框在登录后会消失?

时间:2012-03-26 21:16:08

标签: ios facebook facebook-ios-sdk

我正在尝试使用Facebook iOS“提要”对话框来允许我的应用用户在他们的Facebook墙上分享内容。当未安装Facebook应用程序时,它会尝试让他们在应用程序中进行身份验证(可能是使用Web视图)。问题是这个对话框一旦验证就会消失。我期待Web视图返回到“feed”共享视图。

如何检测到他们已通过身份验证,以便重新打开Feed对话框?

我已将fbDidLogin添加到我的app委托,但它没有被调用。 (我不确定这通常是否会被调用,但我读了几个人推荐这个。)

    SBJSON *jsonWriter = [SBJSON new];

    // The action links to be shown with the post in the feed
    NSArray* actionLinks = [NSArray arrayWithObjects:[NSDictionary dictionaryWithObjectsAndKeys:
                                                      @"More Videos",@"name",@"http://www.example.com/",@"link", nil], nil];
    NSString *actionLinksStr = [jsonWriter stringWithObject:actionLinks];

    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"Test Caption", @"caption",
                                   @"Test Description", @"description",
                                   @"https://s3.amazonaws.com/example/images/test.png",
                                   @"source",
                                   self.video.blogLink, @"link",
                                   @"01234567890123", @"app_id",
                                   actionLinksStr, @"actions",
                                   nil];
    [delegate facebook].sessionDelegate = delegate;
    [[delegate facebook] dialog:@"feed" andParams:params andDelegate:self];

2 个答案:

答案 0 :(得分:1)

事实证明,问题与报告对话框立即消失的问题相同。 Facebook SDK中存在关于处理错误-999 with the solution described in this comment on SO

的错误

当我开始收听FBDialogDelegate的方法时,我终于意识到我遇到了同样的问题(尽管表现略有不同):

- (void)dialog:(FBDialog*)dialog didFailWithError:(NSError *)error

错误描述引用了上面提到的-999错误,引出了我的答案。幸运的是,检查到github的代码完美无缺。我只需将其拉入SDK代码库并重新编译.a lib文件,然后将其包含在我的项目中。

答案 1 :(得分:0)

您是否在视图控制器中实现了Facebook协议FBSession? 要检测该用户是否已通过身份验证,您必须调用isSessionValid:

if (![[self.fbAppDelegate facebook] isSessionValid]) {
    NSArray *permissions = [[NSArray alloc] initWithObjects:@"publish_stream",@"create_event",@"offline_access", nil];

    [[self.fbAppDelegate facebook] authorize:permissions];

}

并授权inApp:

[self authorizeWithFBAppAuth:NO safariAuth:NO];