Отсутствует вкладка страницы Facebook App signed_request app_data

#javascript #facebook

#javascript #Facebook

Вопрос:

Я разрабатываю приложение для вкладки страницы Facebook — с использованием Javascript SDK — которое при загрузке должно отображать содержимое signed_request, отправленного Facebook в мое приложение. Этот signed_request должен содержать параметр «app_data», который передается в URL, например:

http_//www.facebook.com/pages/MyPage-Сообщество/SOME_ID?sk=MY_APP_IDamp;app_data=this_is_my_data

Ссылка:

  • MyPage-Сообщество — это временная фан-страница, которая публикуется
  • SOME_ID — это, я полагаю, идентификатор страницы
  • MY_APP_ID содержит идентификатор приложения, указанный Facebook
  • app_data=this_is_my_data (то, что мне нужно)

Примечания:

  • Само приложение НЕ находится в режиме разработки, поэтому оно общедоступно
  • Я использую localhost для тестирования приложения
  • Я тестировал с учетной записью разработчика и с реальной обычной учетной записью (заданной как тестировщик приложений, таким образом авторизованный)

Теперь, в коде приложения (javascript), я вызываю FB.getLoginStatus(…), который выдает мне объект authResponse, который содержит, среди прочего, свойство signedRequest — это свойство при декодировании показывает мне эти пары ключ / значение:

[алгоритм] => HMAC-SHA256

[code] => SOME_CODED_STRING

[issued_at] => 1403183583

[идентификатор пользователя] => XXXXXXXXXXXXXXX (мой идентификатор пользователя)

Как вы можете видеть, свойство app_data отсутствует, как предполагалось, — как и страница, но мне это действительно не нужно. Есть идеи, почему это происходит? Нигде не могу найти ответ. Может быть, это потому, что я использую localhost? Кажется, все остальное работает (хотя я получаю сообщение об ошибке, когда пытаюсь «лайкнуть» страницу из приложения).

Спасибо!

Ответ №1:

Я думаю, вы путаете подписанный запрос, который отправляется в ваше приложение, и signedRequest параметр ответа на метод JS SDK getLoginStatus — это не одно и то же, но они называются одинаково, потому что у них схожая цель

JS SDK возвращает значения, более или менее эквивалентные тем, которые вы получаете в приложении Facebook canvas, но это не тот источник данных или механизм доставки, и у него не будет одинаковых полей

Чтобы прочитать фактический подписанный запрос с page помощью and app_data , вам нужно сделать это на стороне сервера — инструкции для этого здесь: https://developers.facebook.com/docs/facebook-login/using-login-with-games#checklogin (Это относится как к приложениям вкладки страницы, так и к приложению canvas)

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

1. Хммм… Я потратил некоторое время, пытаясь сделать это и просматривая документы Facebook и некоторые другие источники, и в итоге я подумал, что signed_request и signedRequest дадут мне те же данные. Итак, вы уверены в этом? Если это так, я изменю свое приложение, чтобы использовать сценарии на стороне сервера (PHP) в качестве отправной точки, я полагаю. Но, если возможно, я хотел бы избежать этого, поскольку я разрабатываю приложение с использованием AngularJS. Спасибо за ваш ответ!

2. Я принимаю ваш ответ как правильный, потому что, насколько я вижу, он правильно отвечает на мой вопрос. Кстати: я только что изменил свой index.html чтобы index.php и добавил необходимый PHP-код, чтобы получить signed_request и присвоить значение app_data переменной javascript. Я также изменил настройки приложения (URL страницы вкладки), чтобы отразить это изменение, и все материалы AngularJS, похоже, работают просто отлично, так что теперь я могу использовать переменную app_data для отображения определенного контента пользователю в приложении вкладки моей страницы. Еще раз спасибо!

3. как вы получили параметр signed_request в php, я использую codeigniter и в $ _REQUEST я не могу найти signed_request

4. Это новое приложение, которое вы используете? новым приложениям не сообщается, нравится ли страница пользователю, а старые приложения сохраняют эту функциональность только до ноября