Выяснение того, понравилась ли пользователю страница Facebook. Использование Facebook C # SDK - PullRequest
4 голосов
/ 14 июня 2011

Я пытаюсь создать вкладку «фанат» на Facebook или «открыть» для страницы Facebook.

Вы знаете, как это происходит - когда пользователь заходит на страницу, ему показывается один бит контента, если он еще не нажал «Нравится», и другой, когда он это сделал.

I 'Я не PHP-парень, поэтому я пытаюсь сделать это с помощью Facebook C # SDK (http://facebooksdk.codeplex.com) в Visual Studio 2010. Я довольно новичок в .NET, поэтому я не очень хорошо с этим справляюсь!

Я должен признать, что вырезал и вставлял код из любого места, чтобы заставить это работать, и я думаю, что я почти на месте, но я не получаю эту ошибку:

Неверный подписанный запрос.

Строка 82: var DecodedSignedRequest = FacebookSignedRequest.Parse (текущий, 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<string, object>)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 верны.

Может кто-нибудь предложить мнеЛюбое понимание этого вопроса, пожалуйста? Есть ли лучший способ сделать это, что я еще ненашел?

Большое спасибо заранее за любую помощь.

Ответы [ 2 ]

3 голосов
/ 15 июня 2011

ОК, я разобрался - но я не уверен, почему. У меня такое ощущение, что Facebook C # SDK каким-то образом разворачивается с подписанным запросом. Если я получаю подписанный запрос, используя Request.Forms ["signature_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<string, object>)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";
       }
1 голос
/ 19 июля 2011

Это код, который я использовал, и он отлично работал для меня.

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