我正在使用带有 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/