在获得扩展身份验证令牌后,如何让用户在facebook canvas应用程序中登录?

在获得扩展身份验证令牌后,如何让用户在facebook canvas应用程序中登录?,facebook,canvas,facebook-php-sdk,facebook-access-token,Facebook,Canvas,Facebook Php Sdk,Facebook Access Token,我通过PHPSDK3.2.2获得了一个扩展的身份验证令牌 $facebook->setExtendedAccessToken(); $access_token = $_SESSION["fb_".$cfg['app_id']."_access_token"]; $facebook->setAccessToken($access_token); $accessToken = $facebook->getAccessToken(); 我知道现在我可以用这个$accessToken

我通过PHPSDK3.2.2获得了一个扩展的身份验证令牌

$facebook->setExtendedAccessToken();
$access_token = $_SESSION["fb_".$cfg['app_id']."_access_token"];
$facebook->setAccessToken($access_token);
$accessToken = $facebook->getAccessToken();
我知道现在我可以用这个
$accessToken

但是,在canvas应用程序中运行2小时后,会再次弹出一个窗口,要求
玩游戏。
我尝试查看
$facebook->getSignedRequest()
,它有一个属性
oauth_token
,该属性不等于
$accessToken
,但较旧,长度为2小时


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

现在我不确定除了使用PHP SDK之外,您是否还使用Facebook JavaScript SDK,但您可以做的是定期使用(比如每10分钟一次)使会话在Facebook端保持活动状态


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

修复
base\u Facebook.php
库中
setExtendedAccessToken()
方法中的错误。

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

$this->destroySession();

$this->setPersistentData(
  'access_token', $response_params['access_token']
);
在紧跟其后添加此行:

$this->accessToken = $response_params['access_token'];
没有该行,访问令牌只存储在持久数据中。我认为您试图将其从会话[…]中取出,但它一定不是正确的令牌


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

谢谢。但,这是否意味着,若用户在2小时内保持浏览器打开而不刷新,然后返回,他会看到facebook弹出窗口?这正常吗?这就是使用周期间隔的想法;当用户在你的Facebook画布应用程序上时,它可以触发(按你指定的时间间隔)。您可以使用Javascript函数
setInterval
来执行请求。。如果他们关闭浏览器,那么很遗憾,你无法控制。由Facebook决定他们的会话持续多长时间。你可以做的是确保你要求用户向你的应用程序授予正确的权限,以便他们在Facebook和你的应用程序上都被识别为返回用户。好的,谢谢。我接受你的回答,假设我可以保存扩展访问令牌,将用户保存到数据库中,忘记facebook的会话和cookies,依靠我自己的会话和cookies,通过其api使用facebook 60天,并在60天之后注销我系统中的用户,比如10分钟:)tnx。顺便说一句,facebook已经确认这确实是一个bug: