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 中加载为空的主要内容,如果未能解决你的问题,请参考以下文章
iOS 5 中的 Facebook SDK 3.5 需要 Social.framework