我已将“book”定义为我的Facebook应用中的开放图形对象。书籍是一个逻辑单元,用户可以在应用程序中以多种不同的方式查看书籍。但是,我的应用中没有一个与任何一本书相对应的网址。
我以为我能够拥有一个URL,在幕后向Facebook发布开放图元数据。例如,http://www.example.com/opengrpah/object_book.php?id=3265会返回书籍的标题,作者和其他信息,但实际上并不是用户可见的。
然而,似乎Facebook使用对象URL来处理涉及该对象的动作。如果我创建了与书籍相关的操作(例如添加书籍),那么如果有人点击了自动收录器中的链接,他们将转到object_book.php网址,而不是实际的应用页面。因此,他们将看到元数据,但没有任何用处。
这是设计的吗?当然,对象不应该对应于单个用户可见页面。我们可以不从一个URL中提取对象数据,但是在应用程序的上下文中将该对象显示给用户吗?
答案 0 :(得分:2)
如何只是从Open Graph Object URL重定向到实际的应用页面?或者如何设计应用页面以提供Open Graph元数据?
我认为这可能是一个棘手的解决方案。
答案 1 :(得分:0)
在我正在处理的应用程序中,我们遇到了类似的问题,因为它是一个FB Canvas应用程序,所以如果我们的对象的og:url类似于http://apps.facebook.com/our_namespace/?my_first_obj=0,那么FB会看到应用程序本身而不是在应用程序中加载的对象。这是我们最终希望人们登陆的地方,但我们必须提供一个直接的URL到我们的应用程序,提供适当的元标记,就像你的情况。我只是把它放在那些页面的头部:
<script>
try {
if (top.location.href === window.location.href) {
window.location.replace("http://apps.facebook.com/our_namespace/"+window.location.search);
}
} catch(e) {}
</script>
因此,如果有人直接发送到该页面,他们会立即被重定向到我们的Canvas应用程序,但Facebook的刮刀仍然可以获得有关该对象的正确元数据。
答案 2 :(得分:0)
我遇到了类似的问题,最终我的对象有2层。一个是“主”对象,实际上是对象(在你的情况下是书,我的目标)。 然后,我有另一个“用户”对象,它实际上是主对象和用户之间的关联。这个用户对象有像mysite / user / object这样的url,这就是我用“添加”动作发布到fb图形的内容。