1

我正在尝试检索有关允许我的应用收集有关他们的数据(生日、位置等)的用户的个人资料信息。当且仅当用户实际访问我的应用程序并通过令牌交换向 Facebook 进行身份验证时,这才有效。

但是,我希望能够定期检查用户位置是否没有改变,如果用户在 FB 上添加有关自己的信息,我想将其与我的应用程序“同步”,以便信息保持不变。

所以我保存了用户访问令牌,然后,通过一个 cron 作业,我使用该令牌来获取他的个人资料:

$user = mysql_query ... <- get data from mysql

接着:

$user_profile = $facebook->api('/'.$user['uid']);

当然,它可以工作,但是我想要使用扩展权限的所有数据 - 只是没有显示出来!

offline_access 的诅咒是否禁用?或者我是否需要使用不同的方式来获取此类数据。我尝试在查询末尾添加 ?fields=birthday 等,但它仍然不起作用。

4

2 回答 2

1

不确定这是否是您所说的“禁用offline_access”的意思,但是正如您在路线图中看到的那样,Facebook 正在弃用offline_access:

http://developers.facebook.com/roadmap/

您可以在此处阅读有关弃用的更多信息:

http://developers.facebook.com/roadmap/offline-access-removal/

另外,您是否正确设置了从数据库接收到的访问令牌?

$facebook->setAccessToken($user['access_token']);
于 2012-04-24T12:31:46.013 回答
1

了解如何实现这一点 - 访问令牌必须作为附加参数传递给 api 查询,如下所示:

$user_profile = $facebook->api('/'.$user['uid'].'', array('access_token' => $session['access_token']));

万一有人想知道这个页面,这里有一种使用保存的访问令牌的方法,可以访问有关您想要的用户的完整信息,而无需进行身份验证:

<?

require "facebook.php";

$facebook = new Facebook(array(
    'appId'  => your_app_id,
    'secret' => your_app_secret
));

// get the saved user details 
$user = mysql_fetch_assoc(mysql_query('SELECT * FROM `facebook_tokens` WHERE `id` = "1"'));

$session = array(
    'access_token' => $user['access_token'],
    'secret' => $user['secret'],
    'session_key' => $user['session_key'],
    'uid' => $user['uid']
);

$sig = '';
foreach($session as $key => $value) {
    $sig .= implode('=', array($key, $value));
} 
$session['sig'] = md5($sessionStr.'Your App Secret');

$facebook->setSession($session, false);

$user_profile = $facebook->api('/'.$session['uid'], array('access_token' => $session['access_token']));

echo '<pre>';
print_r($user_profile);
echo '</pre>';  

?>
于 2012-04-25T15:04:30.850 回答