2012-10-30 64 views
0

的,我用這個代碼來獲得用戶的詳細信息,並以此作爲憑據登錄到我的服務器:安卓:我怎樣才能註銷Facebook的API

public class FacebookDialog extends Activity { 

    Facebook facebook = new Facebook("211111915613509"); 
    private SharedPreferences mPrefs; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     if (!(getSharedPreferences(SplashActivity.USER_PREFS, 0).getBoolean(
       "fb", false))) { 

      try { 
       String s = facebook.logout(this); 
       } catch (MalformedURLException e) { 
       } catch (IOException e) { 
       } 
     } 
     /* 
     * Get existing access_token if any 
     */ 
     mPrefs = getPreferences(MODE_PRIVATE); 
     String access_token = mPrefs.getString("access_token", null); 
     long expires = mPrefs.getLong("access_expires", 0); 
     if (access_token != null) { 
      facebook.setAccessToken(access_token); 
     } 
     if (expires != 0) { 
      facebook.setAccessExpires(expires); 
     } 
     if (!facebook.isSessionValid()) { 

      facebook.authorize(this, new String[] {}, new DialogListener() { 
       @Override 
       public void onComplete(Bundle values) { 
        SharedPreferences.Editor editor = mPrefs.edit(); 
        editor.putString("access_token", facebook.getAccessToken()); 
        editor.putLong("access_expires", 
          facebook.getAccessExpires()); 
        editor.commit(); 
        getFbDetails(); 
       } 

       @Override 
       public void onFacebookError(FacebookError error) { 
       } 

       @Override 
       public void onError(DialogError e) { 
       } 

       @Override 
       public void onCancel() { 
       } 
      }); 
     } else { 
      getFbDetails(); 
     } 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     facebook.authorizeCallback(requestCode, resultCode, data); 

    } 

    public void onResume() { 
     super.onResume(); 
     facebook.extendAccessTokenIfNeeded(this, null); 
    } 
} 

這工作得很好。

我設置FB中使用Facebook的作爲真正當用戶登錄並當用戶點擊我的應用程序退出。

的問題是:

當我註銷並再次嘗試使用Facebook登錄(我甚至在Facebook上的應用程序退出)。我仍然可以獲取用戶的詳細信息。

我在哪裏做錯了?

我正在使用facebook.logout()檢查是否fb爲假。

我相信會議沒有被清除,怎麼辦?

謝謝

+0

首先在Facebook認證返回到onComplete()後,你不需要使用SharedPreference來存儲這些值。因爲你正在調用getFbDetails();並且您必須獲得您正在查找的所有數據。並檢查您在註銷時傳遞的上下文。因爲上下文應該與logIn時相同。謝謝 –

回答

2

上註銷按鈕試試這個: -

  mFacebook.authorize(PlayVideo.this, new String[] {}, Facebook.FORCE_DIALOG_AUTH,new LogoutDialogListener());} 

public final class LogoutDialogListener implements DialogListener { 
    public void onComplete(Bundle values) { 
     try { 

      // SessionStore.clear(Login.mFacebook, PlayVideo.this); 
      Util.clearCookies(PlayVideo.this); 

      Login.mFacebook.setAccessToken(null); 
      Login.mFacebook.setAccessExpires(0); 
      return; 

     } catch (Exception error) { 
      Toast.makeText(PlayVideo.this, error.toString(), 
        Toast.LENGTH_SHORT).show(); 
     } 
    } 

    public void onFacebookError(FacebookError error) { 
     Toast.makeText(PlayVideo.this, 
       "Something went wrong. Please try again.", 
       Toast.LENGTH_LONG).show(); 
    } 

    public void onError(DialogError error) { 
     Toast.makeText(PlayVideo.this, 
       "Something went wrong. Please try again.", 
       Toast.LENGTH_LONG).show(); 
    } 

    public void onCancel() { 
     Toast.makeText(PlayVideo.this, 
       "Something went wrong. Please try again.", 
       Toast.LENGTH_LONG).show(); 
    } 
} 
+0

util.clearCookies(上下文上下文)應該清除會話 –

+0

所以使用** Util.clearCookies(Context c); ** ** facebook.logout(); **之後將解決問題?? –

+0

我想是的bcz它爲我工作。它是我完整的註銷代碼。 –

0

如果我沒記錯的話,你可以在Facebook的SDK編輯FbDialog.java(這不是剛剛推出最新的一個幾個星期前,但前一個)。

我剛剛從我的代碼中取出了這個,很久很久以前我就修改過了。我相信密碼線是一個做的伎倆(大約線109起)...

private void setUpWebView() { 
     mWebView = new WebView(getContext()); 
     mWebView.setVerticalScrollBarEnabled(false); 
     mWebView.setHorizontalScrollBarEnabled(false); 
     mWebView.setWebViewClient(new FbDialog.FbWebViewClient()); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.loadUrl(mUrl); 
     mWebView.setLayoutParams(FILL); 
     WebSettings mWebSettings = mWebView.getSettings(); 
     mWebSettings.setSavePassword(false); //RIGHT HERE 
     mContent.addView(mWebView); 
    } 

這會阻止你登錄的堅持。

+0

最新SDK中沒有這樣的方法 –