Вкладка Facebook, найти, если понравилось - PullRequest
0 голосов
/ 31 октября 2011

У меня есть следующий код, чтобы проверить, понравилась ли моя вкладка пользователю:

        protected bool IsPageLiked()
    {
        try
        {
            var current = ConfigurationManager.GetSection("facebookSettings")
                          as IFacebookApplication;
            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;
                if (userLikesPage)
                    return true;
            }
        }
        catch (Exception ex)
        {
            return false;
        }
        return false;
    }

Это работает правильно, когда я загружаю свою вкладку изначально. Однако, если я пытаюсь вызвать тот же код после изменения страницы на вкладке, я получаю следующую ошибку:

{"Предварительное условие не выполнено:! String.IsNullOrEmpty (signatureRequestValue)"}

Есть ли способ заставить этот код работать после первой страницы?

Я знаю, что могу проверить, нравится ли вкладка на первой странице, и поместить это в объект сеанса или что-то в этом роде, но я бы предпочел не делать этого.

Мое приложение само по себе MVC 3

Спасибо

EDIT

Я думаю, что происходит, когда я меняю страницу (я использую метод RedirectToAction), он теряет строку запроса signature_request, поэтому я получаю ошибку.

Редактировать 2

Не уверен, что выше все-таки происходит, так как я не вижу значений строки запроса на начальной странице? Он все еще не может получить подписанный запрос.

Похоже, что sign_request является объектом формы (Request.Form ["signature_request"] возвращает строку на начальной странице, но не на второй странице).

1 Ответ

1 голос
/ 31 октября 2011

Вкладки страницы - это просто ваше приложение в iframe на странице, как вы заметили, что подписанный запрос размещен на вкладке при загрузке страницы.

Когда вы изменяете страницу на вкладке, внешняя рамка Facebook не перезагружается, поэтому подписанный запрос не публикуется повторно на вашей вкладке, поэтому вы не можете получить к ней доступ снова.

Вам нужно будет либо передать подписанный запрос с одной страницы на другую самостоятельно, либо убедиться, что все ссылки используют target = "_ top", чтобы вся страница каждый раз перезагружалась и вы все равно получали POST.

Чтобы определить, какую страницу вы хотите, чтобы ваша вкладка загружалась, вы можете использовать дополнительный параметр app_data в URL-адресе вашей вкладки, например,

http://www.facebook.com/MY_PAGE?sk=app_MY_APP_ID&app_data=A_STRING_OF_DATA

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

...