为啥 Facebook iOS 的 feed 发布对话框在登录后消失?

Posted

技术标签:

【中文标题】为啥 Facebook iOS 的 feed 发布对话框在登录后消失?【英文标题】:Why does Facebook iOS dialog for feed publish disappear after login?为什么 Facebook iOS 的 feed 发布对话框在登录后消失? 【发布时间】:2012-03-26 21:16:08 【问题描述】:

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

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

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

    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];

【问题讨论】:

我前段时间在玩 Facebook sdk 时也遇到了这个问题,并且可以找到解决方案。 【参考方案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 文件,然后将其包含到我的项目中。

【讨论】:

【参考方案2】:

您是否在视图控制器中实现了 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];

【讨论】:

感谢您的回复。即使您没有尝试授权应用代表用户行事,也就是说,您只是想允许用户根据需要在他们的墙上分享,所有这一切都是真的吗?

以上是关于为啥 Facebook iOS 的 feed 发布对话框在登录后消失?的主要内容,如果未能解决你的问题,请参考以下文章

与 Facebook Graph API /user-id/feed (iOS) 一起使用的 viewController

在 ios xcode 4.3(故事板)中弹出 facebook feed 对话框(用于墙贴)

如何在 iOS 中使用 Facebook SDK 避免“已达到 Feed 操作请求限制”错误? [关闭]

Unity Facebook SDK FB.Feed 未发布

是否可以在不运行我自己的服务器的情况下将 opengraph 发布到用户的墙/feed/ticker 上?

是否可以使用 Feed 对话框和直接 URL 发布 Facebook Open Graph Story?