Le jeton d'accès étendu de Facebook ne fonctionne pas correctement

J'ai eu des problèmes car Facebook a supprimé l'autorisation offline_access.

J'ai essayé 2 choses:

  • Problème gênant pour l'interface FaceBook
  • Pourquoi FileOutputStream lance-t-il FileNotFoundException?
  • L'arrière-plan de Lollipop n'a aucun effet sur un bouton
  • Le rappel Facebook SDK 3.0 se déclenche deux fois
  • Supprimer l'icône / logo de la barre d'action sur Android
  • Play Youtube HTML5 vidéo intégrée dans Android WebView
    1. Je fais l'appel tel que suggéré par 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. J'ai également essayé le SDK d'Android, qui utilise l'intention d'obtenir un jeton d'accès étendu:

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

    Chez developers.facebook.com, je configure mon application sur "Native / Desktop".

    J'ai également désactivé l' offline_access sur les paramètres de l'application.

    J'ai retiré les anciennes autorisations de mon compte Facebook avant d'essayer.

    Les deux méthodes me fournissent des jetons de 24 heures. Peut-être que quelqu'un peut m'aider à faire un bon appel pour obtenir un jeton de 60 jours?

    J'ai vu quelques rapports de bogues sur cette question, mais aussi qu'ils ont été résolus. Ça semble pas dans mon cas.

    3 Solutions collect form web for “Le jeton d'accès étendu de Facebook ne fonctionne pas correctement”

    Utiliser la fonction suivante pour obtenir un jeton d'accès étendu: fonction publique 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']; 

    }

    Avez-vous testé pour voir si le jeton dure plus de 24 heures? Selon la documentation, dans certains cas, seul le délai d'expiration est mis à jour alors que le jeton reste le même:

    L'access_token renvoyé aura un nouvel heure d'expiration à longue durée de vie, cependant, le login d'accès lui-même peut ou non être identique à l'access_token à vie longue précédemment accordé.

    En supposant que vous utilisez le SDK de Facebook, il existe déjà une méthode pour construire exactement.

     facebook.extendAccessTokenIfNeeded(this, null); 

    Ceci étant le contexte et null étant serviceListener.

    Vous pouvez également utiliser extendAccessToken , même principal

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.