#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. Это новое приложение, которое вы используете? новым приложениям не сообщается, нравится ли страница пользователю, а старые приложения сохраняют эту функциональность только до ноября