Facebook iOS SDK 4.2.0 - 共享自托管Open Graph故事时出错

时间:2015-06-03 07:32:49

标签: ios facebook facebook-opengraph facebook-ios-sdk

过去几天我一直在努力解决这个问题,似乎无法找到解决方案。

问题在于:我正在尝试从我的iOS应用程序发布Open Graph故事,并让Facebook抓取提供的其他Open Graph标记的URL。这在之前的SDK(3.x)中运行良好,但对于我的生活,我无法弄清楚为什么它停止使用4.2.0。

我得到的错误是:

对象缺少必需的值:'routieapp:activity'类型的URL'http://samples.ogp.me/487842374583398'上的对象无效,因为未提供类型为'string'的必需属性'og:title'。< /强>

我已经包含了Facebook提供的Open Graph行动的示例OpenGraph页面,只是为了查看问题是否在我的实时网站中包含标签,但很明显,因为它甚至在他们的网站上都失败了,这不是情况下。

您可以从示例网站的来源看到它确实包含所有Open Graph标记:

<meta property="fb:app_id" content="202373013130337" />
<meta property="og:title" content="Sample Activity" />
<meta property="og:image" content="https://s-static.ak.fbcdn.net/images/devsite/attachment_blank.png" />
<meta property="og:url" content="http://samples.ogp.me/487842374583398" />
<meta property="og:type" content="routieapp:activity" />

以下是我用来启动共享的代码:

FBSDKShareOpenGraphObject *object = [FBSDKShareOpenGraphObject objectWithProperties:@{@"og:url": @"http://samples.ogp.me/487842374583398", @"og:type": @"routieapp:activity"}];


FBSDKShareOpenGraphAction *action = [[FBSDKShareOpenGraphAction alloc] init];
action.actionType = @"routieapp:track";

[action setString:[GSDateFormatter ISO8601StringFromDate:[route.startLocation timestampAsDate]] forKey:@"start_time"];
[action setString:[GSDateFormatter ISO8601StringFromDate:[route.endLocation timestampAsDate]] forKey:@"end_time"];
NSTimeInterval duration = [[route.endLocation timestampAsDate] timeIntervalSinceDate:[route.startLocation timestampAsDate]];
[action setNumber:@(duration) forKey:@"activity_duration"];

[action setObject:object forKey:@"routieapp:track"];

FBSDKShareOpenGraphContent *content = [[FBSDKShareOpenGraphContent alloc] init];
content.action = action;
content.previewPropertyName = @"routieapp:track";

FBSDKShareAPI *shareObject = [[FBSDKShareAPI alloc] init];
shareObject.shareContent = content;
shareObject.message = route.name;
shareObject.delegate = self;
[shareObject share];

[FBSDKShareAPI shareWithContent:content delegate:self];

现在关于我的Open Graph设置:跟踪是操作,活动是对象。

任何想法如何解决这个问题?我很激动!因为我已经用这个打了近一个星期,我已经没有想法。你(Stack Overflow上的人)是我最后的希望!非常感谢你提前。

1 个答案:

答案 0 :(得分:1)

解决! :)

但你不会相信问题出在哪里。这一行:

[action setNumber:@(duration) forKey:@"activity_duration"];

引起了一切。在动作方面没有activity_duration参数。令人遗憾的是,错误消息不是更具描述性。

此外,如果您需要共享Open Graph对象,有一种更好的方法来执行此操作,而不是在问题中的代码中执行此操作 - 您可以使用此方法:

FBSDKShareOpenGraphAction *action = [FBSDKShareOpenGraphAction actionWithType:@"routieapp:track" objectURL:objectURL key:@"routieapp:activity"];