2013-08-16 9 views

답변

1

나는 새로운 토큰 된 토큰을 교환하기 위해이 같은 짓을 : 여전히 유효한 경우에도 액세스 토큰을 새로 고칠 수 있도록 내가이 각 로그인 한 후 수행 할 수 있다고 생각

private AccessToken refreshToken(Facebook facebook, AccessToken currentToken) throws Exception { 
    String clientId = configuration.getString(ConfigurationKeys.SOCIAL_FACEBOOK_CLIENTID); 
    String clientSecret = configuration.getString(ConfigurationKeys.SOCIAL_FACEBOOK_CLIENTSECRET); 

    Map<String, String> params = new HashMap<String, String>(); 
    params.put("client_id", clientId); 
    params.put("client_secret", clientSecret); 
    params.put("grant_type", "fb_exchange_token"); 
    params.put("fb_exchange_token", currentToken.getToken()); 

    RawAPIResponse apiResponse = facebook.callGetAPI("/oauth/access_token", params); 

    String response = apiResponse.asString(); 
    AccessToken newAccessToken = new AccessToken(response); 

    facebook.setOAuthAccessToken(newAccessToken); 

    return newAccessToken; 
} 

- 당신은 그냥 얻을 것이다 유효 기간이 60 일인 새로운 토큰.

당신은 어떻게 생각하십니까?

+0

facebook의 라이브러리에 사전 프로그래밍 된 솔루션이 있어야한다고 생각했지만 perfec가 표시됩니다. – Pepster

+1

이 오류가 발생합니다. 스레드 "main"의 예외 java.lang.IllegalStateException : 인증 자격 증명이 누락되었습니다. \t facebook4j.FacebookBaseImpl.ensureAuthorizationEnabled (FacebookBaseImpl.java:154) – DT7

+0

"인증 자격 증명이 없습니다."@ DT7 : 새로운 tocken을 얻는 방법을 찾았습니까 ??? –

0

나는 Facebook 클래스를 확장 중입니다. 그들이 제공 한 방법은 효과가 없습니다. 그래서 나는 오래 살았던 토큰을 제공하는 다른 함수를 작성했지만, 어떻게 든 무효화되었습니다 (나는 token_debug로 새로운 토큰을 테스트 해보고 client_code를 생성하려고했습니다)! 내가 해결해야만 당신을 알릴 것입니다. 해결할 수 있으면 저를 업데이트하십시오.

아직 코드를 작성하고 있으므로 코드를 정리하지 않았 음을 기억하십시오.

public function GetExtendedAccessToken() 
{ 
    //global $CONFIGURATIONS; 
    //$info=$this->api($path,'GET',$args);//doesn't work as api overrides method to post 

    $string=file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=".$this->getAppId() 
          ."&client_secret=".$this->getAppSecret() 
          ."&fb_exchange_token=".$this->getAccessToken() 
          ."&grant_type=fb_exchange_token" 
          ."&redirect_uri=".$redirectUri); 
    var_dump($string); 
    $tokenInfo=explode('&',$string); 

    $exAccessToken=str_replace('access_token=', '', $tokenInfo[0]); 
    $expiresAt=str_replace('expires=', '', $tokenInfo[1]); 
    echo "expires in ". (time()-$expiresAt); 
    var_dump($exAccessToken);  
    return $exAccessToken; 
} 

이제 작동합니다. 어떤 때는 redirect_uri를 제공하지 않았기 때문에 오류가 발생합니다.