如何在我的Facebook应用程序页面中获取页面

时间:2011-05-04 16:37:06

标签: facebook-c#-sdk

我正在使用来自codeplex的Facebook sdk

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

尝试了这个建议

这是:

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

但我的data.page为null。

我是否需要对授权或其他东西要求一些额外的权限?

也尝试了这个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。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您不需要任何额外的权限或授权。 signed request按照Facebook blog post.提供“喜欢”的信息。每次用户点击页面标签上的iFrame应用程序时,都会发布该信息。

我认为您缺少的步骤是解码已签名的请求(使用您的Facebook应用程序密钥)。

您可以使用Facebook C#SDK中的FacebookSignedRequest.Parse方法来解析已签名的请求(通过将Facebook应用程序密钥应用于此)。完成此操作后,您可以从Page JSON对象中提取“likes”标志,如下所示:

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表单变量。

希望这有帮助。

答案 1 :(得分:1)

刚刚想到这一点,FacebookWebContext.Current.SignedRequest对象中的页面数据仅在Canvas应用程序被视为页面选项卡(左侧和右侧面板)时才会填充,当查看完整的应用程序时(没有左侧)面板)然后没有页面数据。

答案 2 :(得分: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