Facebook Android教程注销

时间:2012-11-09 11:55:36

标签: android facebook login logout

我关注this tutorial。我从savedPreferences检索访问令牌,然后创建了一个注销按钮。问题是,无论我是从我的应用程序注销还是从Facebook应用程序注销,似乎我access_token始终是正确的。

这是我的代码:

public class MainActivity extends Activity {
    private String TAG = MainActivity.class.getName();      

    Facebook mFacebook = new Facebook("whatever");
    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(mFacebook);

    private SharedPreferences mPrefs;

    //UI elements
    private ImageButton fbLoginButton;
    private Button getInfoButton;
    private Button fbLogoutButton;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        mPrefs = getPreferences(MODE_PRIVATE);
        String access_token = mPrefs.getString("access_token", null);
        long expires = mPrefs.getLong("access_expires", 0);

        if(access_token != null) {
            Log.d(TAG, "Token found. Setting token " + access_token);
            mFacebook.setAccessToken(access_token);
        }

        if(expires != 0) {
            Log.d(TAG, "Setting expire " + expires);
            mFacebook.setAccessExpires(expires);
        }


        if(!mFacebook.isSessionValid()) {
            mFacebook.authorize(this, new String[] {"email", "read_friendlists" }, new DialogListener() {
                @Override
                public void onComplete(Bundle values) {
                    SharedPreferences.Editor editor = mPrefs.edit();
                    editor.putString("access_token", mFacebook.getAccessToken());
                    editor.putLong("access_expires", mFacebook.getAccessExpires());
                    editor.commit();
                    Log.d(TAG, "Logging you in");
                }

                @Override
                public void onFacebookError(FacebookError error) {
                     Log.d(TAG, "Facebook error: " + error.getMessage() );

                }

                @Override
                public void onError(DialogError e) {
                     Log.d(TAG, "Error: " + e.getMessage());
                }

                @Override
                public void onCancel() {
                    Log.d(TAG, "User Canceled");
                }
            });
        }
        else{
            Toast.makeText(this, "Already logged in", Toast.LENGTH_LONG).show();
        }


        fbLoginButton = (ImageButton) findViewById(R.id.buttonFBLogin);
        getInfoButton = (Button) findViewById(R.id.buttonGetInfo);
        fbLogoutButton = (Button) findViewById(R.id.buttonLogout);

        fbLogoutButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                doLogout();
            }
        });
    }

    protected void doLogout() {
        mAsyncRunner.logout(this, new RequestListener() {
              @Override
              public void onComplete(String response, Object state) {
                  Log.d(TAG, "Logging you out");
              }

              @Override
              public void onIOException(IOException e, Object state) {}

              @Override
              public void onFileNotFoundException(FileNotFoundException e,
                    Object state) {}

              @Override
              public void onMalformedURLException(MalformedURLException e,
                    Object state) {}

              @Override
              public void onFacebookError(FacebookError e, Object state) {}
            });
    }

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

        mFacebook.authorizeCallback(requestCode, resultCode, data);
    }
}

我总是得到Already logged in Toast.Am我做错了什么?

PS。在从sharedpreferences检索access_token之前,应用程序似乎工作正常,因此我的API密钥或调试密钥不会出现问题。

1 个答案:

答案 0 :(得分:0)

尝试mFacebook.logout并检查响应值。如果注销成功,则为“true”。适合我。

不要忘记单点登录功能。如果您仍然登录Facebook应用程序,它将无法真正退出您。