3

我試着建立我們的下一個應用程序的基礎下面Facebook's Open Graph Tutorial但由於某種原因,我收到錯誤拋出我無論我如何嘗試發佈操作。難度發佈操作到時間線

我會盡可能地深入,因爲我希望它對於所有開發人員掌握新時間表非常有用。

我已經定義了一個戰鬥行動,並建立每個時使用默認設置的英雄對象。 超越遊戲是我的名字空間。

$id是Facebook用戶的用戶名(我嘗試使用/ 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:type設置正確,正如此問題前面所列。這是我需要解決的一些Facebook呃逆?

SECOND EDIT:修復了最後的問題。

OG:URL我曾以爲重新指向應用程序的畫布的URL,但它需要引用本身來代替。例如,如果您的對象在mydomain.com/object1.php上,則代碼必須爲:

<meta property="og:url"   content="http://www.mydomain.com/object1.php"> 

希望這有助於他人。

回答

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); 
     } 
    } 
); 

UPDATE

我終於得到了一個職位到時間軸上,我不得不做出改變是使用BETA版本的JavaScript SDK。(https://developers.facebook.com/support/beta-tier/

使用此:

<script src="//connect.beta.facebook.net/en_US/all.js#appId=xxx&amp;xfbml=1"></script> 

取而代之的是:

<script src="//connect.facebook.net/en_US/all.js#appId=xxx&amp;xfbml=1"></script> 
+0

希望測試版本也爲我修復它!我欣賞你使用的擴展JS片段,我是死硬的PHP,但對JS毫無頭緒。抓取並追加訪問令牌解決了這個問題,但現在我又有了一個沒有多大意義的問題。我將編輯我的原始問題以詳細說明。 –

+1

我有og:url設置爲頁面本身的URL,所以試着看看它是否有效。 – Teddy

1

我遇到了一些困難張貼最初爲好。 我的問題說謊行動的配置設置。 確保您的操作設置爲針對確切的對象。 下面是我所建立和工作的一些畫面:

如果這些設置是否正確,檢查來自Facebook的回錯誤代碼,它張貼在這裏,我可以進一步幫助您。

+0

我仍然收到錯誤,我的錯誤代碼是「3502」 – Invincible

1

關於og:url的最後一點 - 這是正確的。通常可以將OG URL視爲圖中對象的「主鍵」。

0

澄清一些可能的混亂,og:url不「HAVE」是相同的URL爲您object1.phpurl。重要的是要注意的是,無論您在那裏參考的URL,它都必須在頁面的html &lt;head&gt;中有META標記。

例如,我把一個畫布頁的URL放在那裏,這樣當有人在時間軸上點擊動作中的超鏈接時,它就會打開那個頁面。只要對象的'Get Code'鏈接的META信息在頭部,您就不會收到錯誤。