Facebook iOS SDK 3.5 模式提要对话框在 iPhone 中加载为空

Posted

技术标签:

【中文标题】Facebook iOS SDK 3.5 模式提要对话框在 iPhone 中加载为空【英文标题】:Facebook iOS SDK 3.5 modal feed dialog loads empty in iPhone 【发布时间】:2013-04-26 12:20:51 【问题描述】:

我使用此代码来呈现共享对话框:

if (![[FBSession activeSession] isOpen]) [self login]; return;

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       @"name", @"name",
                                       @"caption", @"caption",
                                       @"description", @"description",
                                       @"http://cnn.com", @"link",
                                       @"http://cnn.com/.png", @"picture",
                                       nil];

  [FBWebDialogs presentFeedDialogModallyWithSession:nil
                                           parameters:params
                                              handler:
     ^(FBWebDialogResult result, NSURL *resultURL, NSError *error) 
         if (error) 
             NSLog(@"Error publishing story.");
          else 
             if (result == FBWebDialogResultDialogNotCompleted) 
                 NSLog(@"User canceled story publishing (clicked the 'x' icon)");
              else 
                 // Handle the publish feed callback
                 NSLog(@"Handle the publish feed callback");
             
         
     ];

我已向 Info.plist 添加了正确的条目(根据 sdk 文档需要):

以及处理 facebook 重定向的 AppDelegate 方法:

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation 
    // attempt to extract a token from the url
    return [FBAppCall handleOpenURL:url
                  sourceApplication:sourceApplication
                    fallbackHandler:^(FBAppCall *call) 
                        NSLog(@"In fallback handler");
                    ];


-(void)applicationWillTerminate:(UIApplication *)application

    [FBSession.activeSession close];


我还添加了 ios Facebook 3.5.1 SDK 所需的框架:

它提供空对话框(在真实设备和模拟器上),加载指示器永远旋转:

日志等中没有显示错误...我可以轻松地将其关闭(使用正确的处理程序日志)。

我认为 FBSession 已正确启动并打开(我可以通过重定向到 Safari 成功授权并返回应用程序 - 这让我认为重定向工作正常)。

为什么会这样?我错过了什么?顺便说一句:为什么没有错误日志?

这太令人沮丧了,因为我之前已经多次实施 facebook 集成,但在这个应用程序中,我想尝试最新的 SDK,它被宣传为:'变得前所未有的简单'。

【问题讨论】:

您是否已将 FacebookDisplayName 参数添加到您的 plist 文件中?在此处查看升级文档:developers.facebook.com/docs/tutorial/iossdk/… 另外,您能否将您的代码与我们的任何执行相同操作的示例进行比较。有几个示例是 SDK 的一部分,然后您可以在此处查看单独的操作方法 (github.com/fbsamples)。 是的。我已将 FacebookDisplayName 和 FacebookAppID 添加到 info.plist。我使用基于 iOS SDK 示例的代码 sn-ps。 我明白了。如果您有有效的会话,它会重现吗?另外,如果您要通过 nil 会话,则必须在 webview 上进行身份验证,对吗?在 webview 登录后,你得到这个空白屏幕? 是的,我的身份验证正确并成功重定向回应用程序,然后在两种情况下我都会得到这个黑色的模式共享屏幕:当我为 [FBSession activeSession] 的会话传递 nil 时。反正应该是一样的。 在移动设备上遇到同样的问题,而不是在模拟器上。更喜欢不涉及使用 ShareKit 的解决方案。 【参考方案1】:

尝试ShareKit 并按照此处的安装说明进行操作:http://getsharekit.com/install/

它通常开箱即用。

【讨论】:

这可能不是直接的解决方案,但在这个问题上挣扎了太久之后,我决定(绝望地)听从你的建议。它就像一个魅力,我免费获得了 twitter 和其他共享选项。【参考方案2】:

您是否尝试将 activeSession 设置为提要对话框的参数?:

//...
[FBWebDialogs presentFeedDialogModallyWithSession:[FBSession activeSession]
                                       parameters:params
                                          handler:
^(FBWebDialogResult result, NSURL *resultURL, NSError *error) 
//...

【讨论】:

是的,我第一次尝试解决这个问题。【参考方案3】:

好的,然后检查您是否有发布权限,如果没有,请请求他们:

if([FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound)
   [FBSession.activeSession requestNewPublishPermissions:[NSArray arrayWithObject:@"publish_actions"]
                                         defaultAudience:FBSessionDefaultAudienceEveryone
                                       completionHandler:
                                       ^(FBSession *session, NSError *error) 

                                        if (!error) 
                                            //Here call your method to publish again so you have granted the active session has publish permissions.
                                        
             ];

我还没有完成网络提要对话框,如果它适合你,请告诉我。

【讨论】:

【参考方案4】:

我也遇到了同样的问题。但最终这个错误是由 params 字典中的 @"picture" 键引起的。所以我的建议是用 Facebook 示例中的字典替换你的 params 字典

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"Sharing Tutorial", @"name",
                                   @"Build great social apps and get more installs.", @"caption",
                                   @"Allow your users to share stories on Facebook from your app using the iOS SDK.", @"description",
                                   @"https://developers.facebook.com/docs/ios/share/", @"link",
                                   @"http://i.imgur.com/g3Qc1HN.png", @"picture",
                                   nil];

然后一步一步从你的字典中找出哪个键会导致黑屏。

【讨论】:

【参考方案5】:

在这里我遇到了同样的问题。我的解决方案是:

1.AppDelegate 上删除 [FBAppEvents activateApp]; [FBAppCall handleDidBecomeActive]; 来自- (void)applicationDidBecomeActive:(UIApplication *)application[FBSession.activeSession close]; 也来自- (void)applicationWillTerminate:(UIApplication *) application

2. 将显示名称与 FB Id 一起放在 info.plist 上。

3. 删除旧框架,然后添加新框架 v3.15.1(最新)。请记住标记将项目复制到目标组的文件夹添加目标

【讨论】:

以上是关于Facebook iOS SDK 3.5 模式提要对话框在 iPhone 中加载为空的主要内容,如果未能解决你的问题,请参考以下文章

Facebook iOS SDK 3.2 获取用户新闻提要

使用 SDK 3.5 在 iOS 上连接 Facebook

iOS 5 中的 Facebook SDK 3.5 需要 Social.framework

iOS Facebook SDK 3.2.1 提要发布错误

通过 Facebook iOS Sdk iphone 以编程方式对新闻提要进行喜欢/评论

使用 iOS 版 Facebook SDK 3.5 时更改键盘外观