#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 между представлениями.