0

我正在关注本教程。我知道您从中检索访问令牌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吐司。我做错了什么吗?

PS。在从中检索 access_token 之前sharedpreferences,该应用程序似乎运行良好,因此我的 API 密钥或调试密钥没有问题。

4

1 回答 1

0

尝试mFacebook.logout检查响应值。如果注销成功,它将为“true”。为我工作。

不要忘记单点登录功能。如果您仍将登录 Facebook 应用程序,它不会真正注销您。

于 2012-11-09T12:09:32.820 回答