2012-01-11 156 views
0

我已經添加了Facebook(iFrame)選項卡的Facebook頁面。使用Facebook PHP SDK,我正在檢索SignedRequest信息。我正在使用這些信息來檢查用戶是否喜歡Facebook頁面。Facebook標籤中的子頁面的簽名請求信息

在主頁上,這工作正常,我檢索SignedRequest信息中的'頁面'數組,但是當我點擊一個子頁面(在同一子域上使用直接url)時,我無法再訪問這些信息。

如何在iFrame選項卡的子頁面上檢索此信息?

回答

1

看起來您只有在第一次加載選項卡時纔會收到簽名的請求。 最好的解決方案是將liked的狀態保存到會話中,並在其他子頁面中使用。

1

當facebook加載到您網站的內容中時(根據您在應用配置中提供的網址),您只能獲得signed_request對象。現在,該iframe中的任何鏈接或重定向都是您追蹤的責任。你可以通過多種方式做到這一點。 1)在您的服務器上運行會話。 2)丟棄一塊餅乾並觀察。 3)把一些東西放在查詢字符串中(但這是可以破解的)。

0

嘿,我剛剛發現了一個解決方案,在與這個問題鬥爭了幾天後完美地工作,所以我決定分享它。

它是由DMCS提出的解決方案的一部分 - 會話變量。

首先,你必須所有簽訂的請求信息存儲到電子書會話變量是這樣的:

session_start(): 

$signedRequest = $facebook->getSignedRequest(); 

if(isset($signedRequest)) $_SESSION['signedRequest'] = $signedRequest; 
else $signedRequest = $_SESSION['signedRequest']; 

然後你就可以訪問後一階段的所有信息(即標籤的子頁面爲例)。只需執行print_r($ signedRequest)來檢查如何訪問您需要的信息。例如,要檢查如果用戶喜歡的頁面只是做:

if (!$_SESSION['signedRequest']['page']['liked']) { 
//Content for users that haven't liked the page 
} 

這裏最重要的是存儲整個$ signedRequest在會話變量。我首先嚐試在會話變量中存儲我需要的信息,但這不起作用。我不知道爲什麼。

希望它有助於某人。