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