0

我通过 PHP SDK 3.2.2 获得了扩展的身份验证令牌。

$facebook->setExtendedAccessToken();
$access_token = $_SESSION["fb_".$cfg['app_id']."_access_token"];
$facebook->setAccessToken($access_token);
$accessToken = $facebook->getAccessToken();

我现在明白了,我可以用这个查询$accessToken

但是,在画布应用程序中 2 小时后,Play the game再次弹出一个要求弹出的窗口。我尝试查看$facebook->getSignedRequest(),它的属性oauth_token不等于$accessToken但更旧,长度为 2 小时。

我应该采取哪些步骤来保持用户授权并避免弹出窗口询问用户是否想玩。

4

2 回答 2

0

修复库中setExtendedAccessToken()方法的错误。base_facebook.php

在该方法的底部找到此代码:

$this->destroySession();

$this->setPersistentData(
  'access_token', $response_params['access_token']
);

紧随其后添加这一行:

$this->accessToken = $response_params['access_token'];

如果没有该行,访问令牌仅存储在持久数据中。我认为您试图将其从 中取出Session[...],但它仍一定不是正确的标记。

我遇到了完全相同的问题,无论我做什么,我都无法获得扩展令牌。我添加了上面的行,然后通过重新进入应用程序,apps.facebook.com这样它就会生成一个签名请求。我的每个测试用户都正确地选择了这个并在会话中存储了一个令牌,有效期为 60 天。

于 2014-04-18T14:32:56.897 回答
0

现在我不确定除了使用 PHP 之外,您是否还在使用 Facebook JavaScript SDK,但您可以做的是FB.getLoginStatus()定期使用(比如每 10 分钟一次)以使会话在 Facebook 结束时保持活跃。

在我们创建的游戏中,我们遇到了超时问题,我们发现定期 ping Facebook 的 API 可以让用户的会话保持活跃。

于 2013-09-13T18:48:38.980 回答