2013-08-16 3 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 – 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.

Смежные вопросы