我正在开发一个在粉丝页面标签中运行的摄影比赛 fb 应用程序。用户应该能够分享照片,以便其他人为他们投票。假设特定照片的图片链接iframe
为http://example.com/image.php?id=1,按分享将通过 分享此链接iframe
。这导致主机应用程序本身。我需要的是与 http://example.com/image.php?id=1在它的Iframe
. 这有可能吗?感谢帮助。
2 回答
因此,要给出@Lix 的答案的“替代方案”,它专注于画布应用程序,这里是页面选项卡应用程序的模拟方式:
出于某种原因,Facebook 决定对页面选项卡应用程序做不同的事情 - 与画布应用程序不同,您不能通过将任何 GET 参数附加到应用程序的 facebook.com 地址来将它们传递给您的应用程序,但您必须使用app_data
参数。
您在表单中调用/链接到您的应用程序https://www.facebook.com/YourPage?v=app_1234567890&app_data=foo
- 无论您为参数设置什么值app_data
,您都会在signed_request
Facebook 在初始(!)加载到 iframe 时发布到您的应用程序的参数中找到。
因此,您解析signed_request
(或让 PHP SDK 为您解析),然后您app_data
在其中找到值。如果你想传递多个单一的值,你也可以把 JSON 编码的数据放在那里——然后你必须在从签名请求中读取 app_data 值后再次解码。
文档只是简短地提到了app_data
参数,但原理本身很简单。
现在,当谈到分享 这些链接时,我发现当你使用上述形式的地址时,Facebook 倾向于从 URL 中删除参数,并将整个链接视为一个指向你 Facebook 页面的链接——它显示了页面的图片和描述,甚至不传递您的页面选项卡应用程序,更不用说 app_data 参数了。
我发现解决此问题的最可靠方法不是直接链接到 Facebook 上的页面选项卡,而是链接到您自己的应用程序的 URL。当爬虫访问它时,您传递相关的OG信息。当它是真正的用户访问时,您将他们重定向到您的页面选项卡应用程序,通过上述app_data
参数传递您需要的数据。重定向可以在服务器端(有关如何通过其 User-Agent 标头检测刮板服务器端的信息)或通过 JavaScript(刮板不会“说话”)在客户端完成。
是的。您所要做的就是能够从您的应用程序画布 URL 中提取信息。如果您的画布 URL 是这样的:
https://apps.facebook.com/ImadBakir
然后您可以在其中放置更多信息,如下所示:
https://apps.facebook.com/ImadBakir?photo_id=123
用户将共享该链接,现在在您的应用程序中,您可以解析该photo_id
参数并进行所需的 HTML 更改,以便在页面和应用程序加载时在 iframe 中显示正确的图像。
关于解析 URL 参数,假设您将使用 JavaScript 进行解析,您可以在这篇文章中了解更多信息:
如何在 JavaScript 中获取查询字符串值?