2

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

4

6 回答 6

3

我有相同的症状,但不同的解决方法。Facebook SDK 3.5.*,因为共享对话框从测试版出来。

我有一个自定义的对象图故事:解决 -> 拼图。这是我第一次与 OG 合作,所以对于更熟悉它的人来说这似乎很明显,但它让我停滞了很长时间,以至于我想分享。

我浏览了开发者网站上的共享对话框示例,但与开放图相关的共享无法通过简单的复制粘贴来工作。我想是因为 OG 对象与 App ID 和 URL 主机等相关联。我设置了我的网络主机,以便我可以为我的对象提供 OG 数据,并将我的应用程序配置为允许该主机等。

因此,我着手调整示例代码以使用“opengraph / stories -> Get Code”弹出窗口中存在的参数。将平台设置为 iOS SDK,我得到以下创建操作:

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”(“获取代码”工具中的操作字符串)无法解析。如果我了解获取代码工具中可用的所有不同选项,我可能会避免这种情况,但请记住,我想要的只是弹出一个共享对话框。看起来很简单。

我通过这个有用的教程使用了 Graph API 资源管理器,并从我从 FB 工具获得的字符串到实际工作的内容进行了以下映射:

动作:我/shapeshuffle:solve => shapeshuffle:solve

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!");
                                             }
                                         }];
于 2013-06-28T17:49:23.733 回答
1

有同样的问题。确保 Basic Info 中的 App Domains 包含 oAuth 域。我发现奇怪的是,为了添加它,您需要启用它,只有在启用 Page Tab 或 Mobile Web 或其他选项之一时才能添加。

于 2013-06-07T04:42:50.203 回答
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!");
                                             }
                                         }];
于 2013-09-11T10:12:11.910 回答
0

这是一个可爱的通用错误消息!我遇到的另一个可能的原因是发布的 OpenGraph 图像的大小。

尽管 Facebook 文档声明图像必须为 200x200 像素到 1500x1500 像素,但我最初尝试使用 350x350 像素的图像失败并出现“无法生成预览文本”错误。另一方面,600x600px 的相同图像效果很好。

-詹姆士

于 2013-09-12T13:02:19.090 回答
0

我想我可能知道 (@"url":@" http://test.com ")-> 这可能使用 facebook 应用开发者中心提供的原因。

  1. 单击打开图表
  2. 点击故事
  3. 然后您将在右侧看到您的自定义故事
  4. 点击获取代码,您将获得您需要的网址!

和 (@"type": @"appsterbator.app_idea")->这可能需要像这样使用->(your_app_namespace:action_type)

祝你好运!

于 2013-07-15T11:49:07.987 回答
0

问题:“无法生成预览文本”来自多次共享相同内容的尝试。每次检查打开图表的功能时,尝试更改您共享的内容。

于 2013-08-27T13:31:30.980 回答