是否可以通过应用程序共享整个Fb app Canvas页面?

时间:2013-10-07 07:20:42

标签: facebook iframe facebook-apps

我正在制作一个照片竞赛fb应用,以便在粉丝专页选项卡中运行。用户应该能够共享照片,以便其他人投票。 假设特定照片的iframe中的图片链接为http://example.com/image.php?id=1,按下共享将通过iframe分享此链接。这导致主机应用程序本身。 我需要的是在其Iframe中打开http://example.com/image.php?id=1分享整个fb应用标签页网址。 这有可能吗? 感谢帮助。

2 个答案:

答案 0 :(得分:2)

为了给@Lix的答案提供“替代”,该答案专注于画布应用,这里是页面标签应用的模拟方式:

出于某种原因,Facebook决定针对页面选项卡应用程序采取不同的做法 - 与使用画布应用程序不同,您不能将任何GET参数传递到您的应用程序,方法是将它们附加到您应用的facebook.com地址,但是您有使用app_data参数。

您可以使用https://www.facebook.com/YourPage?v=app_1234567890&app_data=foo形式调用/链接到您的应用 - 无论您为参数app_data添加什么值,您都可以在signed_request参数中找到Facebook POST给您的应用初始(!)加载到iframe。

所以你parse the signed_request(或者让PHP SDK为你做这个),然后你在那里找到app_data值。如果你想传递多个单个值,你可以f.e.还将JSON编码数据放在那里 - 然后你必须在从签名请求中读取app_data值后再解码它。

文档just shortly mention the app_data parameter,但原则本身很简单。


现在,当谈到分享这些链接时,我发现当你使用上述形式的地址时,Facebook会倾向于从URL中删除参数,并将整个链接视为公正指向您的Facebook页面的链接 - 它显示页面的图片和描述,甚至不会传递您的页面选项卡应用程序,更不用说app_data参数了。

我发现最可靠的方法是不直接链接到Facebook上的页面标签,而是链接到您自己的应用程序的URL。刮刀访问时,您会提供相关的OG信息。当它是真正的用户访问时,您将它们重定向到您的页面选项卡应用程序,通过app_data参数传递您需要的数据,如上所述。重定向可以是服务器端(info on how to detect the scraper server-side via its User-Agent header),也可以是客户端的JavaScript(刮刀不会“说话”)。

答案 1 :(得分:1)

当然可以。您所要做的就是从应用程序画布URL中提取信息。如果您的画布URL是这样的:

https://apps.facebook.com/ImadBakir

然后你可以在那里放置更多信息,如下所示:

https://apps.facebook.com/ImadBakir?photo_id=123

用户将共享该链接,现在在您的应用程序中,您可以解析该photo_id参数并进行所需的HTML更改,以便在页面和应用程序加载时在iframe中显示正确的图像。

关于解析URL参数,假设你将使用JavaScript,你可以在这篇文章中阅读更多相关内容:
How can I get query string values in JavaScript?