2012-03-21 12 views
7

Ho problemi poiché Facebook ha rimosso il permesso offline_access.Il token di accesso esteso da Facebook non funziona correttamente

provato 2 cose:

  1. che sto facendo la chiamata come suggerito da 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. Ho provato anche l'SDK di Android, che utilizza l'intenzione di ottenere un token di accesso esteso:

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

A developers.facebook.com ho impostato la mia app per "Native/Desktop".

Ho disabilitato lo offline_access anche nelle impostazioni dell'app.

Ho rimosso le vecchie autorizzazioni dal mio account Facebook prima di provare.

Entrambi i metodi forniscono i token 24 ore. Forse qualcuno può aiutarmi a fare la chiamata giusta per ottenere un token di 60 giorni?

Ho visto parecchie segnalazioni di bug su questo problema, ma anche che sono state risolte. Sembra non nel mio caso.

+1

Forse si dovrebbe chiedere il supporto di Facebook a questo proposito. – kapa

risposta

0

Hai provato per vedere se il token dura più di 24 ore? Secondo la documentazione, in alcuni casi, solo il tempo di scadenza viene aggiornata mentre il token rimane lo stesso:

L'access_token restituita avrà un tempo fresco longeva di scadenza, tuttavia, l'access_token si può o non essere uguale al token di accesso longevo garantito in precedenza.

0

Supponendo che si stia utilizzando l'SDK di Facebook, è già stato creato un metodo esattamente per questo.

facebook.extendAccessTokenIfNeeded(this, null); 

questo è il contesto e null è serviceListener.

È possibile utilizzare extendAccessToken così, stesso principio

+2

In realtà, la versione corrente di Android SDK utilizzerà semplicemente il servizio com.facebook.katana; il che significa che se l'utente non ha installato l'app il token non verrà aggiornato. – Cristian

1

utilizzo a seguito della funzione per ottenere il token di accesso esteso: funzione pubblica 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']; 

}

Problemi correlati