Вкладка приложения Facebook → Внешнее связывание с PHP
В настоящее время у меня есть приложение на вкладке Facebook, и мне интересно, есть ли способ для меня глубоко связать элемент с этой вкладкой приложения. Пример:
Пользователь находится в приложении (которое ищет книги), находит книгу, которая им нравится, и хочет поделиться ею с другом. Они щелкают, чтобы поделиться им, и я могу вытащить всю информацию, однако у меня нет глубокой ссылки, поэтому, когда она отправляется по электронной почте, facebooked, ect.., она отправляет пользователя непосредственно на страницу с ней на нем.
Возможно ли это на вкладке Application? Я знаю, что на холсте я мог бы глубоко подключиться... но ища способ сделать это на вкладке App.
Спасибо за ваши мысли и ответы.
Ответы
Ответ 1
Здесь мы глубоко привязываемся к подстраницам на вкладке "Страница приложения".
Когда ваше приложение будет находиться внутри вкладки "Страница", Facebook вычеркнет все параметры GET, кроме app_data
. Он проходит app_data
внутри параметра signed_request
данных POST.
Дополнительная информация в документах: https://developers.facebook.com/docs/authentication/signed_request/
Поэтому, когда мы создаем ссылки на подстраницы, он будет выглядеть примерно так:
http://www.facebook.com/myfanpage?sk=app_XXXXXX&app_data=%2Fmainpage%2Fsubpage
Затем в нашем коде страницы индекса мы проверяем параметр app_data
. Если он существует, то простое перенаправление 302 делает трюк.
$request = parse_signed_request($_POST['signed_request']);
if ($request['app_data'])
{
header('HTTP/1.1 302 Found');
header('Location: {$request['app_data']}');
exit;
}
Примечание. Вы можете передать более 1 парама в app_data
с помощью URL-кодированного JSON-массива или что-то в этом роде.
Ответ 2
Может быть.
Для страниц холста приложений Facebook пересылает любую дополнительную информацию URI на ваш обратный вызов.
Например, если ваша страница приложения http://apps.facebook.com/testapp
и ваш обратный вызов canvas http://facebook.example.com/testapp/canvas
Тогда переход в http://apps.facebook.com/testapp/foo?bar=baz
приведет к тому, что серверы facebook будут атаковать вас так, как будто http://facebook.example.com/testapp/canvas/foo?bar=baz
.
Я никогда не тестировал его, чтобы увидеть, поддерживают ли вкладки приложений такое поведение, но это стоит того. Если это так, вы можете просто использовать информацию URI, чтобы управлять дефлексией.
Кроме того, вы должны знать о предстоящих изменениях на вкладках приложений.
Ответ 3
Для тех, кому нужен полный (хотя и минимальный рабочий) пример (например, я), здесь index.php, который делает глубокую связь, когда это необходимо. Убедитесь, что вы загрузили Facebook PHP SDK и что ваш путь require
указывает на него. (Очевидно, вам также нужно заменить $app_id
и $app_secret
на свою собственную информацию о приложении.)
<?php
require 'facebook-php-sdk/src/facebook.php';
$app_id = "YOUR_APP_ID_HERE";
$app_secret = "YOUR_APP_SECRET_ID_HERE";
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $app_secret
));
$signed_request = $facebook->getSignedRequest();
// Get app_data from signed request POST
$app_data = $signed_request["app_data"];
// Parse app_data & Re-direct
if ($app_data) {
header("HTTP/1.1 302 Found");
header("Location: {$app_data}");
exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns:fb="http://www.facebook.com/2008/fbml" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Title Here</title>
</head>
<body>
<h1>Landing Page</h1>
</body>
</html>
Кроме того, убедитесь, что в настройках вашего приложения FB все URL-адреса (т.е. URL холста, URL-адрес страницы и т.д.) заканчиваются обратным слэшем, иначе вы получите 301 ошибку переадресации.
Как только ваше приложение настроено и вы добавили его на страницу вашего поклонника, вы можете глубоко связать с чем-то вроде:
http://www.facebook.com/pages/MYFANPAGE/XXXXX?sk=app_XXXXX&app_data=sub/another.php
Возможно, вам придется проанализировать фактическое значение app_data перед его использованием, но для меня это работает так же, как указано выше.
Надеюсь, что это помогает другим. Конечно, Facebook может изменить все это в любое время.
Ответ 4
До сих пор мы не могли глубоко привязываться к вкладке приложения с использованием параметров URL.
Мы можем получить информацию о window.location со страницы приложения (например, http://apps.facebook.com/testapp/foo?bar=bar
)
Это работает не на вкладке приложения (например, http://www.facebook.com/testpage?v=app_1234&bar=bar
)
Аналогично, мы не можем использовать $_GET['foo']
, чтобы попытаться захватить его на стороне сервера, если мы находимся на вкладке Facebook.
Если кому-то удалось обойти это, я бы хотел узнать это решение.