Вкладка Facebook, поиск, если понравилось

#facebook #asp.net-mvc-3 #facebook-c#-sdk

#Facebook #asp.net-mvc-3 #facebook-c #-sdk

Вопрос:

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

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

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

{«Сбой предварительного условия: !Строка.IsNullOrEmpty(signedRequestValue)»}

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

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

Само мое приложение — MVC 3

Спасибо

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

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

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

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

Похоже, что signed_request является объектом формы (запрос.Форма [«signed_request»] возвращает строку на начальной странице, но не на второй странице).

Ответ №1:

Вкладки страниц — это, по сути, просто ваше приложение в iframe на странице, как вы заметили, подписанный запрос ПУБЛИКУЕТСЯ на вкладке при загрузке страницы.

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

Вам нужно будет либо передать signed_request с одной страницы на следующую самостоятельно, либо убедиться, что все ссылки используют target=»_top», чтобы каждый раз перезагружалась вся страница, и вы все равно получали сообщение.

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

http://www.facebook.com/MY_PAGE?sk=app_MY_APP_IDamp;app_data=A_STRING_OF_DATA

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

Комментарии:

1. Я передал signed_request между представлениями.