2012-08-01 46 views
0

我注意到有些游戏使用Facebook SDK登录到他们的游戏。我第一次登录时,会显示一个登录表单并转到他们的应用程序。注销并重新登录后,它不再显示Facebook登录表单。如果我想用另一个Facebook帐户登录,我必须使用Facebook应用程序。为什么?为什么游戏的注销按钮不能注销Facebook?这是一个正确的机制吗?关于Facebook登录Android

+0

这是一个有用的问题,下面有一个美丽的答案。如果你关闭它,我肯定有人会再问一次。 – Emerald214 2012-08-07 07:34:02

回答

2

打开Facebook.java被Facebook SDK提供的,然后我有这样的变化:

public void authorize(Activity activity, String[] permissions, 
      int activityCode, final DialogListener listener) { 

     boolean singleSignOnStarted = false; 

     mAuthDialogListener = listener; 

     /* // Prefer single sign-on, where available. 
     if (activityCode >= 0) { 
      singleSignOnStarted = startSingleSignOn(activity, mAppId, 
        permissions, activityCode); 
     } 
     // Otherwise fall back to traditional dialog. 
     if (!singleSignOnStarted) {*/ 
      startDialogAuth(activity, permissions); 
     // } 
    } 
+0

它的作品!你知道如何用Twitter4J做同样的事吗? – Emerald214 2012-08-07 07:29:32

2

使用下面的代码注销:

private void logout(Facebook facebook) { 
    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); 
    mAsyncRunner.logout(getBaseContext(), new RequestListener() { 
     @Override 
     public void onComplete(String response, Object state) { 
      Log.i("System out", "Logout:onComplete:res:state " + response 
        + ":" + state); 
      new LoginData(SettingsActivity.this).clearFacebookDataInPref(); 
      handler.sendEmptyMessage(1); 
     } 

     @Override 
     public void onIOException(IOException e, Object state) { 
      Log.i("System out", "Logout:state" + ":" + state); 
      e.printStackTrace(); 
      exceptionMessage = e.getMessage(); 
      handler.sendEmptyMessage(2); 
     } 

     @Override 
     public void onFileNotFoundException(FileNotFoundException e, 
       Object state) { 
      Log.i("System out", "Logout:OnFileNotFoundExce:state:" + state); 
      e.printStackTrace(); 
      exceptionMessage = e.getMessage(); 
      handler.sendEmptyMessage(2); 
     } 

     @Override 
     public void onMalformedURLException(MalformedURLException e, 
       Object state) { 
      Log.i("System out", "Logout:MalformedURLExce:state:" + state); 
      e.printStackTrace(); 
      exceptionMessage = e.getMessage(); 
      handler.sendEmptyMessage(2); 
     } 

     @Override 
     public void onFacebookError(FacebookError e, Object state) { 
      Log.i("System out", "Logout:onFacebookError:state" + state); 
      e.printStackTrace(); 
      exceptionMessage = e.getMessage(); 
      handler.sendEmptyMessage(2); 
     } 
    }); 
} 

如果保存访问令牌和共享过期首选项,删除/清除onComplete监听器..