2011-05-04 23 views
1

我使用Facebook的SDK喜歡CodePlex從如果頁面在我的Facebook應用程序

我試過在How to get the Page Id in my Facebook Application page

這建議如何得到是這樣的:

​​

但我的data.page爲空。

我是否需要在授權或其他方面要求額外的權限?

也試過這個FQL在 http://blog.woodylabs.com/2010/09/facebook-graph-api-is-user-a-fan-of-page-id-using-fql-and-opengraph-to-mimic-pages-isfan/

建議,但我只有一個AppID不是頁面ID。

任何想法?

回答

0

這是怎麼了,我得到了答案,我渴望聽到的話,任何人有更好的建議

FacebookWebClient fbApi = new FacebookWebClient(FacebookWebContext.Current.AccessToken); 

dynamic peramaters = new ExpandoObject(); 
peramaters.method = "pages.isFan"; 
peramaters.page_id = ConfigurationManager.AppSettings["PageId"]; 

dynamic likes = fbApi.Get(peramaters); 

if (!(bool)likes) // do stuff 
1

您不需要任何額外的權限或授權。根據此Facebook blog post.提供signed request中的「喜歡」信息每次用戶在頁面選項卡上單擊您的iFrame應用程序時,都會發布該信息。

我認爲你缺少的步驟是解碼簽名的請求(使用你的Facebook應用程序的祕密)。

您可以使用Facebook C#SDK中的FacebookSignedRequest.Parse方法解析已簽名的請求(通過將Facebook應用程序的祕密應用於其中)。一旦你做到了這一點,你可以提取「喜歡」從頁面JSON對象標誌如下:

var DecodedSignedRequest = FacebookSignedRequest.Parse(FacebookContext.Current.AppSecret, FacebookWebContext.Current.SignedRequest.Data); 
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"]; 
    if (RawPageData.ContainsKey("liked") == true) 
     currentFacebookPageLiked = (bool)RawPageData["liked"]; 
} 

或者你也可以,按照my other answer,使用由Facebook上張貼到您的iframe應用程序的singed_request表單變量。

希望這會有所幫助。

+0

嗨,謝謝你的迴應,我可以得到單一的請求,但它只有數據對象只有以下密鑰算法,過期,issued_at,oauth_token,user和user_id。 ...沒有頁面 – Axe 2011-05-07 05:37:01

1

就想通了這一點,在FacebookWebContext.Current.SignedRequest對象頁的數據中只填入當在查看完整應用程序(無左側面板)時,Canvas應用程序將被視爲頁面選項卡(左右側面板),因此不存在任何頁面數據。

+0

感謝@Mark,它很高興能夠理解這一點。 – Axe 2011-06-22 09:57:22

相關問題