Facebook iOS SDK 4.2.0 - 共享自托管 Open Graph 故事时出错
Facebook iOS SDK 4.2.0 - Error when sharing self-hosted Open Graph story
过去几天我一直在为此苦苦挣扎,似乎找不到解决方案。
问题出在这里:我正在尝试从我的 iOS 应用程序发布 Open Graph 故事,并让 Facebook 抓取提供的 url 以获取额外的 Open Graph 标签。这在以前的 SDK (3.x) 中运行良好,但对于我的生活,我无法弄清楚为什么它停止使用 4.2.0。
我收到的错误是:
对象缺少必需的值:URL“http://samples.ogp.me/487842374583398”处的 'routieapp:activity' 类型的对象无效,因为必需的 属性'og:title' 类型 'string' 未提供。
我已经包含了 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 设置:track 是动作,activity 是对象。
有什么解决办法吗?我会很高兴!因为我已经用这个问题碰壁了将近一个星期,而且我 运行 没有想法。你(Stack Overflow 上的人)是我最后的希望!非常感谢您。
已解决! :)
但你不会相信问题出在哪里。这一行:
[action setNumber:@(duration) forKey:@"activity_duration"];
造成了这一切。涉及操作时没有 activity_duration 参数。很遗憾错误消息没有更具描述性。
此外,如果您需要共享 Open Graph 对象,有比我在问题代码中所做的更好的方法 - 您可以使用此方法:
FBSDKShareOpenGraphAction *action = [FBSDKShareOpenGraphAction actionWithType:@"routieapp:track" objectURL:objectURL key:@"routieapp:activity"];
过去几天我一直在为此苦苦挣扎,似乎找不到解决方案。
问题出在这里:我正在尝试从我的 iOS 应用程序发布 Open Graph 故事,并让 Facebook 抓取提供的 url 以获取额外的 Open Graph 标签。这在以前的 SDK (3.x) 中运行良好,但对于我的生活,我无法弄清楚为什么它停止使用 4.2.0。
我收到的错误是:
对象缺少必需的值:URL“http://samples.ogp.me/487842374583398”处的 'routieapp:activity' 类型的对象无效,因为必需的 属性'og:title' 类型 'string' 未提供。
我已经包含了 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 设置:track 是动作,activity 是对象。
有什么解决办法吗?我会很高兴!因为我已经用这个问题碰壁了将近一个星期,而且我 运行 没有想法。你(Stack Overflow 上的人)是我最后的希望!非常感谢您。
已解决! :)
但你不会相信问题出在哪里。这一行:
[action setNumber:@(duration) forKey:@"activity_duration"];
造成了这一切。涉及操作时没有 activity_duration 参数。很遗憾错误消息没有更具描述性。
此外,如果您需要共享 Open Graph 对象,有比我在问题代码中所做的更好的方法 - 您可以使用此方法:
FBSDKShareOpenGraphAction *action = [FBSDKShareOpenGraphAction actionWithType:@"routieapp:track" objectURL:objectURL key:@"routieapp:activity"];