Как получить, если Страница понравилась в моей странице приложения Facebook - PullRequest
1 голос
/ 04 мая 2011

Я использую SDK Facebook от codeplex

Я попробовал предложение на Как получить Идентификатор страницы в моей странице приложения Facebook

что это:

 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 пуста.

Нужно ли запрашивать дополнительные разрешения на авторизацию или что-то в этом роде?

Также пробовал это 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/

Но у меня есть только приложение, а не идентификатор страницы.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 22 июня 2011

Только что это выяснили, данные страницы в объекте FacebookWebContext.Current.SignedRequest заполняются только тогда, когда приложение Canvas просматривается как вкладка страницы (так, как на левой, так и на правой боковых панелях), при просмотре полного приложения (без левой стороны панель), то данные страницы отсутствуют.

1 голос
/ 05 мая 2011

Вам не нужны никакие дополнительные разрешения или авторизация.Информация «Понравилось» доступна в подписанном запросе согласно этому сообщению в блоге Facebook. Она публикуется каждый раз, когда пользователь нажимает на ваше приложение iFrame на вкладке страницы.

Я думаю, что пропущенный шаг - это расшифровка подписанного запроса (с использованием секрета вашего приложения Facebook).

Вы можете использовать метод FacebookSignedRequest.Parse в SDK Facebook C # для анализаподписанный запрос (приложив к нему секретную заявку Facebook).Сделав это, вы можете извлечь флаг «Мне нравится» из объекта Page 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"];
}

Или вы можете, согласно моему другому ответу , использовать форму singed_requestпеременная, которая публикуется в вашем приложении IFrame на Facebook.

Надеюсь, это поможет.

0 голосов
/ 07 мая 2011

Вот как у меня есть ответ, я хотел бы услышать, если у кого-то есть лучшие предложения

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