ios - 使用 Open Graph 操作创建对象时出现 "Could not generate preview text"错误

标签 ios facebook facebook-opengraph fbnativedialogs

我正在使用带有 native 对话框的 iOS SDK 来尝试发布对象和操作。

当我调用 presentShareDialogWithOpenGraphAction 时,Facebook 应用程序将打开,简要显示包含我的帖子的对话框,然后返回到我的应用程序并显示错误:

无法生成预览文本

我的代码如下所示:

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 对象?

最佳答案

我有相同的症状,但修复方法不同。 Facebook SDK 3.5.* 自共享对话框结束测试版以来。

我有一个自定义对象图故事:解决 -> 谜题。这是我第一次使用 OG,所以这对于更熟悉它的人来说可能看起来很明显,但它让我停滞了足够长的时间,以至于我想分享。

我浏览了 developer site 上的共享对话框示例,但 Open Graph 相关共享无法通过简单的复制粘贴进行。我想是因为 OG 对象与应用程序 ID 和 URL 主机等相关联。我设置了 Web 主机,以便可以为我的对象提供 OG 数据,并配置我的应用程序以允许该主机等。

因此,我开始调整示例代码以使用“opengraph/Stories -> 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 工具获得的字符串到实际工作的映射:

操作: 我/shapeshuffle:解决=> 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!");
                                             }
                                         }];

关于ios - 使用 Open Graph 操作创建对象时出现 "Could not generate preview text"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16729067/

相关文章:

android - 如何通过 ContactsContracts API 从用户那里获取 facebook id?

ios - FBSDKSharing 回调不返回结果

facebook - w3c 验证器显示 Facebook 打开图错误

facebook-graph-api - 获取拥有更多好友的前10名粉丝,他们是该页面的粉丝

android - Firebase Android/iOS 缓存 Firestore 集合

ios - 如何订阅全局委托(delegate)事件?

facebook - 不同的身份验证对话框取决于用户

facebook - 在 Facebook 上分享 - 第一次没有显示缩略图

ios - 在 Swift 中匀场

ios - 在 iOS 游戏中禁用 iOS 可达性滑动手势