Facebook的扩展访问令牌无法正常工作

时间:2012-03-21 11:43:35

标签: android facebook facebook-access-token

自从Facebook删除了offline_access权限后,我遇到了麻烦。

尝试了两件事:

  1. 我按照Facebook的建议拨打电话。

    https://graph.facebook.com/oauth/access_token?             
        client_id=APP_ID&
        client_secret=APP_SECRET&
        grant_type=fb_exchange_token&
        fb_exchange_token=EXISTING_ACCESS_TOKEN 
    
  2. 我还尝试了Android SDK,它使用intent获取扩展访问令牌:

    intent.setClassName("com.facebook.katana", "com.facebook.katana.platform.TokenRefreshService");
    
  3. 在developers.facebook.com我将我的应用设置为“Native / Desktop”。

    我也在应用设置上禁用了offline_access

    我在尝试之前从我的Facebook帐户中删除了旧权限。

    这两种方法都为我提供了24小时的令牌。也许有人可以帮助我拨打正确的电话获得60天的代币?

    我看到了很多有关此问题的错误报告,但也解决了这些问题。看起来不像我的情况。

3 个答案:

答案 0 :(得分:1)

使用以下函数获取扩展访问令牌: public function getExtendedAccessToken(){

try {
    // need to circumvent json_decode by calling _oauthRequest
      // directly, since response isn't JSON format.
    $access_token_response =
        $this->_oauthRequest(
            $this->getUrl('graph', '/oauth/access_token'),
            $params = array(    'client_id' => $this->getAppId(),
                                'client_secret' => $this->getApiSecret(),
                                'grant_type'=>'fb_exchange_token',
                                'fb_exchange_token'=>$this->getAccessToken(),
                          ));

} catch (FacebookApiException $e) {
  // most likely that user very recently revoked authorization.
  // In any event, we don't have an access token, so say so.
  return false;
}

if (empty($access_token_response)) {
  return false;
}

$response_params = array();
parse_str($access_token_response, $response_params);
if (!isset($response_params['access_token'])) {
  return false;
}

return $response_params['access_token'];

}

答案 1 :(得分:0)

您是否测试过令牌是否持续超过24小时?根据文档,在某些情况下,只有在令牌保持不变的情况下才更新到期时间:

  

返回的access_token将具有新的长期到期时间,但是,   access_token本身可能与先前授予的长期access_token相同或不同。

答案 2 :(得分:0)

假设您正在使用Facebook SDK,那么它已经准确地构建了一个方法。

facebook.extendAccessTokenIfNeeded(this, null);

这是上下文,null是serviceListener。

您也可以使用extendAccessToken,相同的主体