2011-04-06 59 views
2

我的應用程序是作爲一個標籤在FaceBook中託管的,我希望在我的應用程序被添加到我的邏輯中時獲取頁面標識。 如何獲得頁面ID,我知道它存儲在URL中,但是當我試圖從頁面獲取它作爲服務器變量時,我沒有得到它,即使我的應用程序被配置爲iFrame?但這是獲取父URL的標準方式。如何在我的Facebook應用程序頁面中獲取頁面標識

C#:

string t= request.serverVariables("HTTP_REFERER"); 

//doesn't get FB page url even if your app is configured as iframe ?!! @csharpsdk #facebook devs 

任何幫助嗎?

非常感謝。

回答

3

Page ID未存儲在URL中;它會在signed_request表單參數中發佈到您的頁面。查看此開發人員blog post瞭解更多詳情。

您可以使用Facebook C#SDK中的FacebookSignedRequest.Parse方法來解析簽名請求(使用您的應用程序密鑰)。完成此操作後,您可以從頁面JSON對象中提取頁面ID,如下所示:

string signedRequest = Request.Form["signed_request"]; 

var DecodedSignedRequest = FacebookSignedRequest.Parse(FacebookContext.Current.AppSecret, SignedRequest); 
dynamic SignedRequestData = DecodedSignedRequest.Data; 

var RawRequestData = (IDictionary<string, object>)SignedRequestData; 

if (RawRequestData.ContainsKey("page") == true) 
{ 
    Facebook.JsonObject RawPageData = (Facebook.JsonObject)RawRequestData["page"]; 
    if (RawPageData.ContainsKey("id") == true) 
     currentFacebookPageID = (string)RawPageData["id"]; 
} 

希望這有助於您。

+1

我所有的dll的引用,但找不到FacebookSignedRequest和FacebookContext類。我錯過了什麼? – 2011-10-03 21:01:56

4

這是我如何做到這一點:

if (FacebookWebContext.Current.SignedRequest != null) 
{ 
    dynamic data = FacebookWebContext.Current.SignedRequest.Data; 
    if (data.page != null) 
    { 
    var pageId = (String)data.page.id; 
    var isUserAdmin = (Boolean)data.page.admin; 
    var userLikesPage = (Boolean)data.page.liked; 
    } 
    else 
    { 
    // not on a page 
    } 
} 
+0

謝謝!!!我一直在尋找這段代碼兩天了! – 2011-09-28 18:20:01

1

這是同樣的解決方案,安迪辛克萊在VB爲我工作:

Dim pageId as Int64 = 0 
Dim signed_request As String = Request.Form("signed_request") 
Dim req = FacebookSignedRequest.Parse(AppSettings("FacebookSecret"), signed_request) 
Dim data As IDictionary(Of String, Object) = req.Data 
If data.ContainsKey("page") Then 
    Dim RawPageData As Facebook.JsonObject = data("page") 
    If RawPageData.ContainsKey("id") Then 
     pageId = RawPageData("id") 
    End If 
End If 
相關問題