Бесшовный способ проверить, нравится ли пользователю страница

Итак, я использую iFrame на моей вкладке, и я делаю один из таких «подобных дорожных блоков», когда пользователю нужна страница, чтобы просмотреть секретный контент. Есть ли лучший и более простой способ сделать это, а затем попросить разрешения?

Я знаю, что для вкладок, построенных с помощью FBML, они не запрашивают разрешения, но я предполагаю, что это потому, что это не iframe.

Благодаря!

Конечно вы можете! Как упоминалось в документации , Facebook отправит вам дополнительную информацию в signed_request :

Когда пользователь перейдет на страницу Facebook, они увидели, что вкладка «Страница» добавлена ​​в следующую доступную позицию вкладки. В целом вкладка страницы загружается точно так же, как и на странице Canvas. Когда пользователь выбирает вкладку «Страница», вы получите параметр signed_request с одним дополнительным параметром, страницей. Этот параметр содержит объект JSON с идентификатором (идентификатор страницы текущей страницы), admin (если пользователь является администратором страницы) и понравился (если пользователю понравилась страница). Как и на странице Canvas, вы не получите всю информацию пользователя, доступную вашему приложению в signed_request, до тех пор, пока пользователь не разрешит ваше приложение.

Код, взятый из моего учебника, должен выглядеть примерно так:

 <?php if(empty($_REQUEST["signed_request"])) { // no signed request where found which means // 1- this page was not accessed through a Facebook page tab // 2- a redirection was made, so the request is lost echo "signed_request was not found!"; } else { $app_secret = "APP_SECRET"; $data = parse_signed_request($_REQUEST["signed_request"], $app_secret); if (empty($data["page"]["liked"])) { echo "You are not a fan!"; } else { echo "Welcome back fan!"; } } function parse_signed_request($signed_request, $secret) { list($encoded_sig, $payload) = explode('.', $signed_request, 2); // decode the data $sig = base64_url_decode($encoded_sig); $data = json_decode(base64_url_decode($payload), true); if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') { error_log('Unknown algorithm. Expected HMAC-SHA256'); return null; } // check sig $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); if ($sig !== $expected_sig) { error_log('Bad Signed JSON signature!'); return null; } return $data; } function base64_url_decode($input) { return base64_decode(strtr($input, '-_', '+/')); } ?> 

ОБНОВЛЕННЫЙ КОД: Пока работает предыдущий код. Я не проверял действительность запроса. Это означает, что кто-то может нарушить запрос и отправить вам ложную информацию ( например, установить для admin значение true ! ). Код обновлен в signed_request документом signed_request .