Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用新的Facebook PHP SDK 3.0.0使用离线访问登录?_Facebook_Facebook Graph Api_Facebook Php Sdk - Fatal编程技术网

如何使用新的Facebook PHP SDK 3.0.0使用离线访问登录?

如何使用新的Facebook PHP SDK 3.0.0使用离线访问登录?,facebook,facebook-graph-api,facebook-php-sdk,Facebook,Facebook Graph Api,Facebook Php Sdk,对于旧的(2.x)SDK,我使用它来记录具有脱机访问权限的用户: $session = array ( 'uid' => $userdata['fb_uid'], 'sig' => $userdata['fb_sig'], 'access_token' => $userdata['fb_access_token'] ); $facebook->setSession($session); 在新的SDK中,此功能不再存在。我想我需要使用以下方式登录

对于旧的(2.x)SDK,我使用它来记录具有脱机访问权限的用户:

$session = array
(
    'uid' => $userdata['fb_uid'],
    'sig' => $userdata['fb_sig'],
    'access_token' => $userdata['fb_access_token']
);

$facebook->setSession($session);
在新的SDK中,此功能不再存在。我想我需要使用以下方式登录:

setPersistentData($key,$value)

但是这个函数是受保护的,我不知道“代码”是什么?我是否需要这个来让用户登录?“sig”是怎么回事?我不再需要这个了吗

希望有人已经解决了这个问题,因为文档真的没有帮助

对于PHPSDK2.0(我想),我只是像这样使用它

$data = $facebook->api( '/me', 'GET', array( 'access_token' => $userdata['fb_access_token'] ) );

这应该适用于新的,因为它似乎是一个更干净的方法,而不是由我们自己设置会话。您可以试试吗?

使用Facebook PHP SDK v3(),非常简单。要使用
offline\u access
权限登录某人,请在生成登录URL时询问。下面是你如何做到这一点

获取脱机访问令牌 首先检查用户是否已登录:

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));

$user = $facebook->getUser();

if ($user) {
  try {
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    // The access token we have is not valid
    $user = null;
  }
}
如果他不是,您将生成“使用Facebook登录”URL,请求
脱机访问
权限:

if (!$user) {
    $args['scope'] = 'offline_access';
    $loginUrl = $facebook->getLoginUrl($args);
}
然后在模板中显示链接:

<?php if (!$user): ?>
    <a href="<?php echo $loginUrl ?>">Login with Facebook</a>
<?php endif ?>
使用脱机访问令牌 要在用户未登录时使用脱机访问令牌,请执行以下操作:

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));

$facebook->setAccessToken("...");
现在您可以为该用户进行API调用:

$user_profile = $facebook->api('/me');

希望有帮助

昆汀的回答很好,但我认为不完整。它工作得很好,但我(例如)在那段时间内没有工作,因为userId(即
getUser()
返回)被缓存了

我创建了一个新方法来清除所有缓存并持久保存

public function setPersistentAccessToken($access_token) {
  $this->setAccessToken($access_token);
  $this->user = $this->getUserFromAccessToken();
  $this->setPersistentData('user_id', $this->user);
  $this->setPersistentData('access_token', $access_token);
  return $this;
}

嗯。。。似乎您只需要使用$facebook->setAccessToken()设置access_令牌,就这样……这很有用,谢谢,但是PHP SDK是在代码之外的其他地方记录的吗?中没有关于PHP SDK的文档。您可以阅读代码,阅读SDK提供的示例,并在internet上找到其他一些示例。您是否需要其他特定内容?如何在不手动登录的情况下生成
脱机访问
令牌?Andrew,用户必须手动登录。如果用户未登录,
$facebook->getAccessToken()
将不会返回访问令牌。
public function setPersistentAccessToken($access_token) {
  $this->setAccessToken($access_token);
  $this->user = $this->getUserFromAccessToken();
  $this->setPersistentData('user_id', $this->user);
  $this->setPersistentData('access_token', $access_token);
  return $this;
}