我已经尝试在Facebook's Open Graph Tutorial之后构建我们下一个应用程序的基础但由于某种原因,无论我如何尝试发布操作,我都会收到错误。
我会尽可能深入到这里,因为我希望所有开发人员能够掌握新的时间轴非常有用。
我在设置每个操作时使用默认设置定义了战斗操作和英雄对象。 beyondndgame 是我的命名空间。
$id
是Facebook用户的用户ID(我尝试使用/ me /,对我来说,直接ID在过去一直没有问题)。
$herourl
是一个urlencoded字符串,指向具有以下内容的单独网页:
<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# transcendgame: http://ogp.me/ns/fb/transcendgame#">
<meta property="fb:app_id" content="[my id]">
<meta property="og:type" content="transcendgame:hero">
<meta property="og:url" content="http://apps.facebook.com/transcendgame/">
<meta property="og:title" content="Hercules">
<meta property="og:description" content="As this game is still in development, you can ignore this feed post!">
<meta property="og:image" content="[an image url]">
应用程序画布页面包含以下代码。它应该将一个新的动作事件发布到用户的时间线,但是一直给我“出错”。我也用样本英雄对象(samples.ogp.me ...)尝试了同样的问题。
<script>
function doTest()
{
FB.api('/<?=$id?>/transcendgame:battle' +
'?hero=<?=$herourl?>','post',
function(response) {
if (!response || response.error) {
alert('Error occured');
} else {
alert('Post was successful! Action ID: ' + response.id);
}
});
}
</script>
<a href="#" onclick="doTest(); return false">Test fb post</a>
我正在调用JS SDK并正确运行fb.init。老实说,我不知道问题出在哪里,更不用说如何修复它了。
编辑:我已正确将用户的访问令牌添加到API调用中:
FB.api('/me/transcendgame:battle' +
'?hero=<?=$herourl?>&access=<?=$token?>','post',
但是,我收到以下错误:
Type: OAuthException
Message: (#3502) Object at URL [url] has og:type of 'game'. The property 'hero' requires an object of og:type 'transcendgame:hero'.
这很奇怪,因为网页肯定有正确的og:类型设置,如本问题前面所列。这是我需要解决的一些Facebook打嗝吗?
第二次编辑:修正了最后的问题。
og:url 我曾假设指回应用程序画布的URL,但它需要引用本身。例如,如果您的对象位于mydomain.com/object1.php上,则代码必须为:
<meta property="og:url" content="http://www.mydomain.com/object1.php">
希望这有助于其他人。
答案 0 :(得分:2)
我遇到了同样的问题,我将回调更改为更有帮助:
var fb_url = '/me/YOUR_NAMESPACE?key=value';
FB.api(fb_url,'post',
function(response) {
console.log(response);
if (!response || response.error) {
var msg = 'Error occured';
if (response.error) {
msg += "\n\nType: "+response.error.type+"\n\nMessage: "+response.error.message;
}
alert(msg);
} else {
alert('Post was successful! Action ID: ' + response.id);
}
}
);
更新
我终于在时间轴上发了帖子,我必须做的改变是使用BETA版本的JavaScript SDK。 (https://developers.facebook.com/support/beta-tier/)
使用此:
<script src="//connect.beta.facebook.net/en_US/all.js#appId=xxx&xfbml=1"></script>
而不是:
<script src="//connect.facebook.net/en_US/all.js#appId=xxx&xfbml=1"></script>
答案 1 :(得分:1)
我最初也有一些难以发布的帖子。 我的问题是该操作的配置设置。 确保将您的操作设置为确切对象。 以下是我设置和工作的一些屏幕:
如果这些设置正确,请检查从Facebook返回的错误代码,在此处发布,我可以为您提供进一步的帮助。
答案 2 :(得分:1)
关于og:url的最后一点 - 这是正确的。您通常可以将OG URL视为&#34;主键&#34;图中的一个对象。
答案 3 :(得分:0)
要澄清一些可能的混淆,og:url
与您的HAVE
页面的URL
“url
”不是object1.php
“URL
。需要注意的重要一点是,无论您在那里引用META
,都必须在页面的html <head>
中包含URL
个标记。
META
放在那里,这样当有人点击时间轴上的动作中的超链接时,就会打开该页面。只要对象的'Get Code'
链接中的{{1}}信息在头部,您就不会收到错误。