使用Open Graph操作创建对象时“无法生成预览文本”错误

时间:2013-05-24 06:43:39

标签: ios facebook opengraph facebook-opengraph fbnativedialogs

我正在使用带有本机对话框的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对象?

6 个答案:

答案 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开发者中心提供的原因。

  1. 点击打开图表
  2. 点击故事
  3. 然后您将在右侧看到您的自定义故事
  4. 点击获取代码,然后您将获得所需的网址!
  5. 和(@“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