找出用户是否喜欢Facebook页面。 使用Facebook C#SDK

我正在尝试为Facebook页面构建Facebook“fangate”标签或“显示”标签。

你知道它是怎么回事 – 当用户访问该页面时,如果他们还没有点击“喜欢”,则会显示一些内容。

我不是一个PHP人,所以我试图在Visual Studio 2010中使用Facebook C#SDK( http://facebooksdk.codeplex.com )。我也是.NET的新手,所以我不是做得好!

我不得不承认我一直在剪切和粘贴来自各地的代码以使其工作,我想我几乎就在那里,但我没有收到这个错误:

签名请求无效。

第82行:var DecodedSignedRequest = FacebookSignedRequest.Parse(current,FacebookWebContext.Current.SignedRequest.Data.ToString());

这是我的代码:

var settings = ConfigurationManager.GetSection("facebookSettings"); var current = settings as IFacebookApplication; var DecodedSignedRequest = FacebookSignedRequest.Parse(current, FacebookWebContext.Current.SignedRequest.Data.ToString()); dynamic SignedRequestData = DecodedSignedRequest.Data; var RawRequestData = (IDictionary)SignedRequestData; string currentFacebookPageID = current.AppId; bool currentFacebookPageLiked = false; 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"]; } if (currentFacebookPageLiked) { //Do some stuff for fans } else { //Do some stuff for non-fans } 

所有的Facebook设置都在我的web.config文件中,我已经检查过AppID和AppSecret是否正确。

任何人都可以向我提供有关此问题的任何见解吗? 有没有更好的方法来做到这一点,我还没有找到?

非常感谢您的帮助。

好的,我把它整理出来 – 但我不确定为什么。 我有一种感觉,Facebook C#SDK以某种方式解决了签名请求。 如果我使用Request.Forms [“signed_request”]获得签名请求,那么一切似乎都有效。

我将分享我的工作代码,希望它能帮助其他人解决同样的问题。

  //Pull in the facebook app settings from the web.config file var settings = ConfigurationManager.GetSection("facebookSettings"); var current = settings as IFacebookApplication; //Set up some stuff for later string currentFacebookPageID = current.AppId; bool currentFacebookPageLiked = false; //Get the signed request FacebookSignedRequest SignedRequest = FacebookSignedRequest.Parse(current, Request.Form["signed_request"]); dynamic SignedRequestData = SignedRequest.Data; //extract what we need from the request var RawRequestData = (IDictionary)SignedRequestData; //Check to see if we've got the data we need if (RawRequestData.ContainsKey("page") == true) { //We do, lets examine it and set the boolean as appropriate 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"]; } if (currentFacebookPageLiked) { //Do some stuff for fans lblName.Text = "Hi " + result.first_name + " - You are a fan"; } else { //Do some stuff for non-fans lblName.Text = "Hi " + result.first_name + " - please click the like button"; } 

这是我使用的代码,它对我很有用。

  protected bool IsPageLiked() { var current = ConfigurationManager.GetSection("facebookSettings") as IFacebookApplication; dynamic signedRequest = FacebookSignedRequest.Parse(current, Request); try { return signedRequest.Data.page.liked; } catch (Exception) { return false; } }