Я бы не хотел показывать кнопку входа на моей веб-странице и сделать ее автоматической, поэтому, если кто-то посещает мой сайт, он показывает ему контент с Facebook напрямую, не нажимая кнопку входа каждый раз. Вы можете мне помочь?
Я использую Facebook PHP SDK4 API.
Ниже приведен мой код:
<?php
// Must pass session data for the library to work (only if not already included in your app)
session_start();
// Autoload the required files
require_once('phpsdk4/autoload.php');
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\Entities\AccessToken;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\HttpClients\FacebookHttpable;
// Facebook app settings
$app_id = '123456';
$app_secret = 'appsecretpassword';
$redirect_uri = 'mywebpageaddress';
// Initialize the SDK
FacebookSession::setDefaultApplication( $app_id, $app_secret );
?>
<!DOCTYPE html>
<html lang="it">
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
<title>Facebook SDK test</title>
</head>
<body>
<?php
$helper = new FacebookRedirectLoginHelper($redirect_uri, $app_id, $app_secret);
try {
$session = $helper->getSessionFromRedirect();
}
catch(FacebookRequestException $ex) { }
catch(\Exception $ex) { }
$loggedIn = false;
if (isset($session))
{
if ($session)
{
$loggedIn = true;
try
{
// Logged in
$user_photos = (new FacebookRequest($session, 'GET', '/me/statuses'))->execute()->getGraphObject(GraphUser::className());
$user_photos = $user_photos->asArray();
echo "<pre>";
print_r($user_photos);
echo "</pre>";
}
catch(FacebookRequestException $e)
{
echo "Exception occured, code: " . $e->getCode();
echo " with message: " . $e->getMessage();
}
}
}
if (!$loggedIn)
{
//$loginUrl = $helper->getLoginUrl();
$loginUrl = $helper->getLoginUrl(array('user_status'));
echo '<a href="' . $loginUrl . '">Login</a>';
}
?>
</body>
</html>
Я предлагаю использовать FB.getLoginStatus из JavaScript SDK — это самый простой способ проверить, авторизован ли уже вернувшийся пользователь: https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus
Он обновляет токен пользователя без необходимости обновления страницы — что вы должны сделать с PHP SDK afaik.
Также, FB Логин проще обрабатывать логин. Используйте PHP SDK только в том случае, если вам нужно что-то делать на сервере, и если нет другого способа с JavaScript SDK. Вам также не нужно обновлять какую-либо библиотеку, если вы используете JavaScript SDK, кстати.
О каналах на вашем веб-сайте: не используйте профиль пользователя для этого, токен расширенного доступа пользователя действителен только в течение 60 дней, после чего вам придется обновить его вручную. Вы не можете сделать это без взаимодействия с пользователем, поэтому не имеет значения, используете ли вы PHP SDK или JS SDK. Лучше создать страницу в Facebook и прочитать статусы этой страницы с помощью маркера расширенного доступа к странице (действует вечно). Дополнительная информация о токенах доступа:
Других решений пока нет …