FacebookのOpenGraphチュートリアルに従って次のアプリの基盤を構築しようとしましたが、アクションのPOSTをどのように試みても、何らかの理由でエラーがスローされます。
新しいタイムラインを理解するすべての開発者にとって非常に役立つことを願って、ここでできる限り深く掘り下げていきます。
バトルアクションとヒーローオブジェクトは、それぞれを設定するときにデフォルト設定を使用して定義しました。transcendgameは私の名前空間です。
$id
はFacebookユーザーのユーザーIDです(/ me /を使用してみましたが、これまで直接IDの問題はほとんどありませんでした)。
$herourl
次のコンテンツを含む別のWebページを指す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]">
アプリケーションのキャンバスページには、次のコードが含まれています。新しいアクションイベントをユーザーのタイムラインにPOSTする必要がありますが、常に「エラーが発生しました」と表示されます。同じ問題のサンプルヒーローオブジェクト(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'.
この質問の前半にリストされているように、Webページには間違いなくog:typeが正しく設定されているため、これは奇妙なことです。これは私が回避する必要のあるFacebookの問題ですか?
2番目の編集:最後の問題を修正しました。
アプリのキャンバスのURLを指すと想定していたog:urlですが、代わりにそれ自体を参照する必要があります。たとえば、オブジェクトがmydomain.com/object1.phpにある場合、コードは次のようになります。
<meta property="og:url" content="http://www.mydomain.com/object1.php">
これが他の人に役立つことを願っています。