我正在使用带有本机对话框的iOS SDK来尝试发布对象和操作。
当我拨打presentShareDialogWithOpenGraphAction
时,Facebook应用程序会打开,会在其中显示包含我帖子的对话框,然后返回我的应用程序并显示错误:
Could not generate preview text
我的代码如下所示:
NSDictionary* object = @{
@"fbsdk:create_object": @YES,
@"type": @"appsterbator.app_idea",
@"title": @"test",
@"url": @"http://test.com",
};
id<FBOpenGraphAction> action = (id<FBOpenGraphAction>)[FBGraphObject graphObject];
[action setObject:object
forKey:@"app_idea"];
[FBDialogs presentShareDialogWithOpenGraphAction:action actionType:@"app_idea.create"
previewPropertyName:@"app_idea"
handler:^(FBAppCall *call, NSDictionary *results, NSError *error) {
NSLog(@"%@", error);
}];
另外,是否可以发布一个实际上没有URL的Open Graph对象?
答案 0 :(得分:3)
我有相同的症状,但有不同的解决方法。 Facebook SDK 3.5。*自分享对话框出来以来。
我有一个自定义的Object Graph故事:Solve - &gt;难题。这是我第一次和OG一起工作,所以对于那些对它更熟悉的人来说这似乎是显而易见的,但它让我停滞了很长时间以至于我想分享。
我浏览了developer site上的Share Dialog示例,但Open Graph相关共享无法通过简单的复制粘贴工作。我想是因为OG对象与应用程序ID和URL主机等相关联。我设置了我的Web主机,以便我可以为我的对象提供OG数据,并配置我的应用程序以允许该主机等。
所以我开始调整示例代码以使用“opengraph / stories - &gt; Get Code”弹出窗口中的参数。将平台设置为iOS SDK,我为Create Action获得了以下内容:
NSMutableDictionary<FBGraphObject> *action = [FBGraphObject graphObject];
action[@"puzzle"] = @"http://samples.ogp.me/463417983744195";
[FBRequestConnection startForPostWithGraphPath:@"me/shapeshuffle:solve"
graphObject:action
completionHandler:^(FBRequestConnection *connection,
id result,
NSError *error) {
// handle the result
}];
我将我的故事和应用程序特定值交换到示例代码中,导致问题中描述的错误和症状。 我花费的时间比我更愿意承认摆弄托管我的OG对象的服务器,FB应用程序设置,弹出共享对话框的不同方式等。
问题的根源在于弹出对话框时,FB无法将动作和对象与我的应用程序中的配置相匹配 - 因此与生成预览文本相关的略微模糊的错误代码。 FB没有找到动作,因为“me / shapeshuffle:solve”(“获取代码”工具中的动作字符串)无法解决。如果我在“获取代码”工具中了解了我可以使用的所有不同选项,我可能已经避免了这一点,但请记住,我想要的只是弹出一个共享对话框。看似简单。
我通过这个有用的tutorial与Graph API资源管理器一起工作,并从我从FB工具获得的字符串到实际工作的字符串进行了以下映射:
<强>动作强>: me / shapeshuffle:solve =&gt; shapeshuffle:解决
3个小角色有很多痛苦。以下是我完成的代码:
NSString *objectUrl = [NSString stringWithFormat:@"%@puzzleId=%d", @"http://myhost.com/puzzle/object?", puzzleId];
id<FBOpenGraphAction> action = (id<FBOpenGraphAction>)[FBGraphObject graphObject];
[action setObject:objectUrl forKey:@"puzzle"];
[action setObject:timeString forKey:@"time"];
[FBDialogs presentShareDialogWithOpenGraphAction:action
actionType:@"shapeshuffle:solve"
previewPropertyName:@"puzzle"
handler:^(FBAppCall *call, NSDictionary *results, NSError *error) {
if(error) {
NSLog(@"Error: %@", error.description);
} else {
NSLog(@"Success!");
}
}];
答案 1 :(得分:1)
有同样的问题。确保基本信息中的应用程序域包含oAuth域。我发现的奇怪之处在于,为了添加它,您需要启用此功能,只有在启用Page Tab或Mobile Web或其他选项之一时才能添加。
答案 2 :(得分:0)
我想我可能知道(@“url”:@“http://test.com”) - &gt;这可能会使用facebook app开发者中心提供的原因。
和(@“type”:@“appsterbator.app_idea”) - &gt;这可能需要像这样使用 - &gt;(your_app_namespace:action_type)
祝你好运!答案 3 :(得分:0)
问题:“无法生成预览文本”来自尝试多次共享相同内容。 每次检查打开图表的功能时,请尝试更改共享的内容。
答案 4 :(得分:0)
导致此问题尚未描述的条件是操作和属性名称的区分大小写,必须为小写。为了说明,请注意以下内容中的“ must_be_lowercase ”:
id<FBOpenGraphAction> action = (id<FBOpenGraphAction>)[FBGraphObject graphObject];
[action setObject:@"http://link/" forKey:@"**must_be_lowercase**"];
[FBDialogs presentShareDialogWithOpenGraphAction:action
actionType:@"xxxx"
previewPropertyName:@"**must_be_lowercase**"
handler:^(FBAppCall *call, NSDictionary *results, NSError *error) {
if(error) {
NSLog(@"Error: %@", error.description);
} else {
NSLog(@"Success!");
}
}];
答案 5 :(得分:0)
这是一个可爱的通用错误消息!我遇到的另一个可能的原因是发布的OpenGraph图像的大小。
虽然Facebook文档说明图像必须是200x200px到1500x1500px,但我对350x350px图像的初始尝试失败,并显示“无法生成预览文本”错误。另一方面,600x600px的相同图像效果非常好。
-James