2012-03-21 24 views
7

Tengo problemas ya que Facebook ha eliminado el permiso offline_access.Token de acceso extendido de Facebook que no funciona correctamente

probamos 2 cosas:

  1. que estoy haciendo la llamada según lo sugerido por 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. También probé el SDK de Android, que utiliza un intento de obtener un token de acceso extendida:

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

En developers.facebook.com puse mi aplicación a "Natural/Escritorio".

Inhabilité el offline_access en la configuración de la aplicación también.

Quité los permisos anteriores de mi cuenta de Facebook antes de intentar.

Ambos métodos me proporcionan tokens de 24 horas. ¿Tal vez alguien me puede ayudar a hacer la llamada correcta para obtener un token de 60 días?

Vi bastantes informes de errores sobre este problema, pero también que se resolvieron. Parece que no en mi caso.

+1

Tal vez debería pedir apoyo de Facebook sobre esto. – kapa

Respuesta

0

¿Has probado para ver si el token dura más de 24 horas? Según la documentación, en algunos casos, sólo el tiempo de caducidad se actualiza mientras que el testigo sigue siendo el mismo:

El señal_acceso vuelto tendrá un momento dulce de larga vida de caducidad, sin embargo, la señal_acceso en sí puede o no será el mismo que el access_token de larga duración previamente otorgado.

0

Suponiendo que está utilizando el SDK de Facebook, ya tiene un método para exactamente eso.

facebook.extendAccessTokenIfNeeded(this, null); 

siendo este el contexto y nulo siendo serviceListener.

Puede utilizar extendAccessToken así, mismo principio

+2

En realidad, la versión actual de Android SDK solo usará el servicio com.facebook.katana; lo que significa que si el usuario no ha instalado la aplicación, el token no se actualizará. – Cristian

1

uso siguiente función para obtener el token de acceso extendida: función pública 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']; 

}

Cuestiones relacionadas