Перенаправление в приложение facebook через веб-сайт приложения

Я сделал приложение в виде вкладки страницы. Мне нужно перенаправить на facebook-приложение, если кто-то открывает URL-адрес веб-сайта напрямую. Для этого мне нужно проверить содержимое адресной строки, и если в ней нет www.facebook.com, я перенаправлю на URL-адрес приложения facebook. Но проблема в том, что внутри iframe facebook я не могу получить содержимое адресной строки.

Не могли бы вы рассказать мне хороший способ включить перенаправление на fb-приложение, если кто-то напрямую обращается к URL-адресу моего сайта?


person akshay3004    schedule 24.01.2012    source источник


Ответы (3)


Вероятно, самый простой способ добиться этого — выполнить следующую проверку в JavaScript:

if (window.top !== window){
  window.location = 'http://facebook.com/YOUR_PAGE?sk=v_YOUR_APP_ID'
}
person Juicy Scripter    schedule 24.01.2012
comment
Я сделал ошибку в исходном коде, должно быть ===, а не !== - person Juicy Scripter; 24.01.2012

Если вы хотите перенаправить на вкладку, более полный способ сделать это — проверить параметр «страница», который отправляется только в подписанном запросе на вкладку страницы.

Причина в том, что только проверка подписанного запроса позволит пользователям получить доступ к вашему приложению с вкладками размером 520 пикселей на холсте Facebook (например, https://apps.facebook.com/yourapp, что может вам не подойти.

Так например

    $fb = new Facebook( array(
                          'appId' => <your_app_id>, 
                          'secret' => <your_app_secret>); 
    $sr = $fb -> getSignedRequest();

А затем перенаправить пользователя, когда он попадет на страницу

    if (!($sr['page'])) {
        die('<script>window.top.location = "<your_tab_url>"</script>');
    };
person Joe T    schedule 24.01.2012

Facebook публикует подписанный параметр запроса, когда вы открываете приложение на фан-странице.

Вы можете проверить, является ли этот параметр нулевым или нет.

В php,

if(isset($_REQUEST["signed_request"]){
// Opened in facebook
}else{

//opened outside facebook.
}

В asp.net

    if(Request.Form["signed_request"] !=null)
    { 
      // Opened in facebook
}
else
{
// opened outside facebook.
}
person Jashwant    schedule 24.01.2012
comment
но я не думаю, что это можно использовать на каждой странице моего приложения, поскольку подписанный запрос находится только на первой странице, не так ли? - person akshay3004; 24.01.2012
comment
Установите файл cookie, когда получите подписанный_запрос. И проверьте его на последующих страницах. - person Jashwant; 24.01.2012