share_open_graph
方法获取FB.ui
,创建一个定制的分享对话框,其中包含不同的标题、描述和图片,根据用户在页面上的操作而不同。我的目标是,在测验结果显示时,它还应该有Facebook和Twitter共享按钮,这些按钮已经被自定义为包括适合于用户的测验结果的图片、标题和描述。 Twitter按钮很容易动态完成。我只需使用jQuery创建一个Twitter按钮,使用与任何地方相同的HTML,将我的动态描述作为data-text
属性提供,然后调用twttr.widgets.load();
来激活按钮。而Facebook分享按钮则存在问题,我尝试了许多方法但都无效。最终我选择了在弹出窗口中使用普通的分享对话框,虽然不理想但至少稳定可靠。我使用了https://developers.facebook.com/docs/sharing/reference/feed-dialog/v2.2,通过URL查询提供动态详细信息,比我最初在Buzzfeed上查看的sharer.php用法更加现代化。FB.ui({
method: 'feed',
name: "I got "+response.country+"! Which European are you destined to date?",
link: "http://advice.uk.match.com/quizzes/which-european-are-you-destined-date",
picture: response.image,
description: response.body
});
基本工作正常-图片、标题和描述都与测验结果一致(在这种情况下是"法国")-但Feed对话框不仅已过时,而且也远不如分享对话框(见下文)。我想做得更好。
尝试2:FB.ui({ method: "share" })
FB.ui({
method: 'share',
href: "http://advice.uk.match.com/quizzes/which-european-are-you-destined-date",
name: "I got "+response.country+"! Which European are you destined to date?",
picture: response.image,
description: response.body
});
与已弃用的Feed对话框相比,在设计和功能方面,Share对话框当前正在使用。但在这种基本用法中,它就像一个常规的共享按钮一样,尽管我试图提供额外的信息,但只使用了网址,并且页面上的通用Open Graph标签提供了内容。
第三次尝试:FB.ui({ method: "share_open_graph" })
这似乎是我必须使用的那个。我只需要找出如何使用!
* 我添加了:"quiz"作为对象类型到我的应用程序中(名称:matchadviceuk)。
* 我添加了:"Share a quiz"作为基于"quiz"选项和现有"Share"操作类型的故事类型到我的应用程序中。
* 我已经添加了:适当的Open Graph prefix=""
内容到我的 <head>
声明中。
按钮上的点击函数现在看起来像:
FB.ui({
method: 'share_open_graph',
action_type: 'matchadviceuk:share',
action_properties: JSON.stringify({
type: 'matchadviceuk:quiz',
url: "http://advice.uk.match.com/quizzes/which-european-are-you-destined-date",
title: "I got "+response.country+"! Which European are you destined to date?",
description: response.body,
image: response.image
})
});
单击后会生成以下内容:
所以我将上述代码中的url
更改为quiz
,结果出现:
这已经开始有点明白了-页面本身是一篇文章,不可能改变。因此,也许我根本不想使用这个新的“测验”对象类型。但是如果我回到上面的代码块,并仅将type
更改为matchadviceuk:article
,我们会收到关于“quiz”未定义的相同错误-此时就完全没有任何意义了,因为“quiz”对象类型现在已经不在代码中提到了!(Facebook缓存的受害者,这是额外的麻烦。)
这就是我陷入的困境,无法想出进一步的想法。我甚至尝试完全删除type
和url
属性,希望Facebook可以自己处理,但是不行。
我仍然不确定添加对象类型和故事类型到我的应用程序是否必要,但无论如何,我都无法让它起作用。请帮忙!
与之相比:
Buzzfeed经常做这种类型的测验,他们实际上使用了Facebook的sharer.php链接来进行补丁式工作,并将动态内容作为URL查询字符串的一部分提供,并手动强制它在新窗口中打开。这很丑陋,不“官方”,不太友好,我敢说在移动和平板浏览上可能会出现问题。由于所有这些原因,我更喜欢用FB.ui来做得体-不仅如此,而且sharer.php处于“它是否过时?”的不断变化中,甚至官方的FB开发人员线(由于没有声誉而无法添加链接)-表示它不会再像以前那样工作。
调研:
我做了大量的谷歌搜索和Stack Overflow搜索。没有什么与我的问题完全匹配(这让我感到惊讶,但我确实有额外的限制,例如需要在没有单独的PHP注入结果页面的情况下进行所有这些处理)。这个问题是“share_open_graph”的SO上唯一的结果,并使用FB.api创建对象,然后使用FB.ui发布-听起来不错,但事实是这会产生多篇帖子发布到用户的动态中,这将导致被Facebook封禁。这位用户能够依靠PHP,而我需要纯客户端交互性。