2012-03-21 2 views
7

Facebook에서 offline_access 권한을 제거한 후 문제가 있습니다. 페이스 북에 의해 제안 내가 전화를 만드는 중이라서Facebook의 확장 액세스 토큰이 제대로 작동하지 않습니다.

  1. :

    2 일을 시도.

    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. 가 나는 또한 확장 된 액세스 토큰을 얻기 위해 의도를 사용하는 안드로이드 SDK, 시도 : 내 응용 프로그램을 설정 developers.facebook.com에서

    intent.setClassName("com.facebook.katana", "com.facebook.katana.platform.TokenRefreshService"); 
    

을에 "기본/데스크톱 ".

앱 설정에서도 offline_access을 사용 중지했습니다.

시도하기 전에 Facebook 계정에서 이전 권한을 제거했습니다.

두 가지 방법 모두 24 시간 토큰을 제공합니다. 어쩌면 누군가가 60 일 토큰을 얻기 위해 전화를 걸 때 나를 도울 수 있습니까?

이 문제에 대한 버그 보고서를 많이 보았지만 문제가 해결되었습니다. 내 사건이 아닌 것처럼 보입니다.

+1

어쩌면 당신은 물어 봐야 페이스 북 지원 이것에 관해서. – kapa

답변

0

토큰이 24 시간 이상 지속되는지 테스트 해 보셨습니까? 토큰이 동일하게 유지하면서 문서에 따르면, 일부의 경우 만 유효 시간이 업데이트됩니다 그러나,

반환 access_token이는 신선한 긴 수명 만료 시간이있을 것이다 , access_token과 자체 월 또는 5 월 이전에 부여 된 long-lived access_token과 같지 않아야합니다.

0

페이스 북 SDK를 사용하고 있다고 가정 할 때, 페이스 북 SDK는 완전히 이미 빌드 된 메소드를 가지고 있습니다.

facebook.extendAccessTokenIfNeeded(this, null); 

이는 serviceListener 인 컨텍스트입니다.

당신은뿐만 아니라 extendAccessToken을 사용할 수 있습니다, 기능 다음과 같은 주요

+2

실제로 현재 Android SDK 버전은 com.facebook.katana 서비스 만 사용합니다. 즉, 사용자가 앱을 설치하지 않으면 토큰이 새로 고쳐지지 않습니다. – Cristian

1

사용 확장 액세스 토큰을 얻을 수 있습니다 : 공공 기능 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']; 

}

관련 문제