2012-03-21 14 views
7

Facebookがoffline_access権限を削除したため、問題が発生しています。 Facebookのにより示唆されるように、私が呼び出しを行っていますFacebookからの拡張アクセストークンが正しく機能しない

  1. は、2つのことをしようとしました。

    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. 私はまた、拡張アクセストークンを取得する意図を使用してAndroidのSDKを、試してみました:

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

私は/ネイティブ」に私のアプリを設定しますデスクトップ"。

私はoffline_accessをアプリ設定でも無効にしました。

Facebookアカウントから古い権限を削除しました。

どちらの方法も私に24時間のトークンを提供します。おそらく、誰かが60日のトークンを取得するための正しい呼び出しをするのを手伝ってくれるでしょうか?

私はこの問題についてかなりのバグ報告を見ましたが、解決されたということもありました。私の場合はそうではないようです。

+1

たぶん、あなたが尋ねるべきFacebookのサポートをこれについて。 – kapa

答えて

0

トークンが24時間を超えているかどうかテストしましたか?

返さaccess_tokenは新鮮な長命の有効期限を持つことになります、しかし、 access_tokenは、それ自体がよく、または可能性があります文書によると、いくつかのケースでは、唯一の有効期限は、トークンは同じまま更新されます以前に付与されたlong-lived access_tokenと同じではありません。

0

あなたがFacebook SDKを使用していると仮定すると、まさにそのためのメソッドビルドがあります。

facebook.extendAccessTokenIfNeeded(this, null); 

これはserviceListenerです。

あなたにもextendAccessTokenを使用することができ、機能以下同じ主体

+2

実際、現在のバージョンのAndroid SDKでは、com.facebook.katanaサービスが使用されます。つまり、ユーザーがアプリをインストールしていない場合、トークンは更新されません。 – Cristian

1

使用が拡張されたアクセストークンを取得するには: パブリック関数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']; 

}

関連する問題