Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook 打开的图形对象是否必须对应于用户可见的页面?_Facebook_Facebook Graph Api_Facebook Opengraph - Fatal编程技术网

Facebook 打开的图形对象是否必须对应于用户可见的页面?

Facebook 打开的图形对象是否必须对应于用户可见的页面?,facebook,facebook-graph-api,facebook-opengraph,Facebook,Facebook Graph Api,Facebook Opengraph,我在Facebook应用程序中将“book”定义为一个开放的图形对象。书籍是一个逻辑单元,用户可以在应用程序中以多种不同的方式查看书籍。然而,在我的应用程序中没有一个URL对应于任何一本书 我想我可以有一个URL,在幕后向Facebook吐出开放的图形元数据。例如,将返回一本书的标题、作者和其他信息,但实际上用户不可见 然而,Facebook似乎将对象URL用于涉及该对象的操作。如果我创建了一个与该书相关的操作(例如添加一本书),那么如果有人单击股票代码中的链接,他们将转到object_book

我在Facebook应用程序中将“book”定义为一个开放的图形对象。书籍是一个逻辑单元,用户可以在应用程序中以多种不同的方式查看书籍。然而,在我的应用程序中没有一个URL对应于任何一本书

我想我可以有一个URL,在幕后向Facebook吐出开放的图形元数据。例如,将返回一本书的标题、作者和其他信息,但实际上用户不可见

然而,Facebook似乎将对象URL用于涉及该对象的操作。如果我创建了一个与该书相关的操作(例如添加一本书),那么如果有人单击股票代码中的链接,他们将转到object_book.php URL,而不是实际的应用程序页面。因此,他们将看到元数据,但没有什么有用的


这是故意的吗?当然,对象不必对应于单个用户可见的页面。我们可以不从一个URL中提取对象数据,而是在应用程序的上下文中向用户显示该对象吗?

将打开的图形对象URL重定向到实际的应用程序页面如何?或者,如何设计应用程序页面以提供开放图形元数据


我认为这可能是一个棘手的解决方案。

在我正在开发的应用程序中,我们遇到了类似的问题,因为它是FB Canvas应用程序,因此如果对象的og:url类似,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>

试一试{
如果(top.location.href==window.location.href){
window.location.replace(“http://apps.facebook.com/our_namespace/“+window.location.search);
}
}捕获(e){}

因此,如果有人被直接发送到该页面,他们会立即重定向到我们的Canvas应用程序,但Facebook的scraper仍然可以获得有关该对象的正确元数据。

我也遇到了类似的问题,我的对象有两层。一个是“主”对象,它实际上就是对象(你的书,我的目标)。
然后,我有另一个“用户”对象,它实际上是主对象和用户之间的关联。这个用户对象有一个类似于mysite/user/object的url,我通过“添加”操作将其发布到fb图中

重定向在技术上是可行的,但它是丑陋的,我宁愿避免它。在应用程序中提供开放图形元数据需要完全重新设计,因为它是一个AJAX应用程序,每个对象没有固定页面。我有点惊讶于开放图中明显的隐式假设,即对象页面映射到用户页面。这在1995年是有意义的,当时网络是静态的,但现在有了动态内容就没有了。根据你的评论,我认为你应用程序中的对象(可能是书)无法通过特定的“URL”访问。对吗?如果是这样,那就意味着你的设计是错误的。我认为你在评论中提到的Facebook的设计决定是完全正确的。“对象”应该能够被特定的URL访问,并且您可以在URL处理程序中提供关于该对象的元数据。AJAX并不意味着您不需要为对象提供URL。Semun,AJAX绝对意味着您不必为对象提供用户可访问的URL。例如,在我的应用程序中,书籍列表显示在一个页面上,但单个书籍显示在页面上的浮动div中,该页面由AJAX调用填充。另一个例子是,一个游戏中可能有许多对象,这些对象应该作为开放图形对象存在,但是没有与它们对应的用户可见页面。我认为AJAX与URL方案没有绝对的关系。如果Facebook允许你将他们发送到你的实际应用页面,你会向点击了股票行情中图书链接的用户展示什么?只是书单?不是那本书吗?嗯,你应该用一个特定的图书URL向用户显示点击的图书。我在这里遇到了同样的问题。最后,你是怎么做到的?克索尔,我没有找到答案。我正在重新构建我的应用程序,使每个对象有1个页面。我认为这是一个错误的设计,但我必须这样做,以便能够用户的时间表。看起来没有办法实现我们现在想要的,至少。我最终为我的所有OG对象使用了一个特定的控制器,然后通过JS进行重定向。似乎是现在唯一的办法