0

我有一个 LoginViaFacebook Acitivity 和一个用于 facebook Login 的登录按钮。我使用以下代码登录到 facebook

private String[] permissions = {"publish_stream",
        "read_stream", "user_photos", "publish_checkins", "photo_upload",
        "email", "user_birthday" };

if (access_token != null) {
        Utility.fb.setAccessToken(access_token);
        token = access_token;

        Log.e("OnCretae Facebook Token------------", token);
    }
    if (expires != 0) {
        Utility.fb.setAccessExpires(expires);
    }

    btn_login.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            if (CheckInternet.checkConn(LoginViaFacebook.this)) {

                Utility.fb.authorize(LoginViaFacebook.this, permissions,
                        new DialogListener() {

                            @Override
                            public void onFacebookError(FacebookError e) {
                                // TODO Auto-generated method stub
                                Toast.makeText(getApplicationContext(),
                                        "onFacebookError",
                                        Toast.LENGTH_LONG).show();
                                Log.e("Sajolllllllllllllllll", e + "");
                            }

                            @Override
                            public void onError(DialogError e) {
                                // TODO Auto-generated method stub
                                Toast.makeText(getApplicationContext(),
                                        "onError", Toast.LENGTH_LONG)
                                        .show();
                                Log.e("Sajolllllllllllllllll", e + "");
                            }

                            @Override
                            public void onComplete(Bundle values) {
                                // TODO Auto-generated method stub
                                editor = sp.edit();
                                token = Utility.fb.getAccessToken();

                                Log.e("Token---------", token);
                                editor.putString("access_token",
                                        Utility.fb.getAccessToken());
                                editor.putLong("access_expires",
                                        Utility.fb.getAccessExpires());
                                editor.commit();
                                Toast.makeText(getApplicationContext(),
                                        "Login Successful",
                                        Toast.LENGTH_LONG).show();
                                mProgress = ProgressDialog.show(
                                        LoginViaFacebook.this, "",
                                        "Please Wait...", true);
                                Thread t = new Thread(retriveProfileData);
                                t.start();

                            }

                            @Override
                            public void onCancel() {
                                // TODO Auto-generated method stub
                                Toast.makeText(getApplicationContext(),
                                        "onCancel", Toast.LENGTH_LONG)
                                        .show();

                            }
                        });
            }

        }
    });

如果用户未注销,我会保存访问令牌以便下次直接登录

我有另一个活动,即设置并有按钮注销。我使用以下代码从 facebook 注销

lagoutLayout.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            final String[] items = new String[] { "Yes", "No" };
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                    SettingsActivity.this,
                    android.R.layout.select_dialog_item, items);

            AlertDialog.Builder builder = new AlertDialog.Builder(
                    SettingsActivity.this);

            builder.setTitle("Select Option");
            builder.setAdapter(adapter,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int item) { // pick

                            // from
                            // camera
                            if (item == 0) {

                                try {
                                    editor.remove("FacebookId");
                                    editor.remove("EmailId");
                                    editor.commit();

                                    Log.e("Pre----------------", sp1
                                            .getString("access_token", "d"));
                                    editor1.remove("access_token");
                                    editor1.remove("access_expires");
                                    editor1.commit();

                                    Log.e("After----------------", sp1
                                            .getString("access_token", "d"));

                                    Log.e("DATATTAT--------",
                                            sp.getString("FacebookId",
                                                    "saf")
                                                    + "  "
                                                    + sp.getString(
                                                            "EmailId", "as"));
                                    String r = Utility.fb
                                            .logout(SettingsActivity.this);
                                    Log.e("Res-----------", r);
                                } catch (MalformedURLException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                } catch (IOException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }

                            } else { // pick from file

                                dialog.dismiss();
                            }
                        }
                    });

            dialog = builder.create();

            dialog.show();

        }

    });

Facebook Logout 方法的响应在 Log 中显示为 true。但是当我再次运行应用程序时,它会自动登录到 facebook 我找不到问题。请帮助我

4

5 回答 5

1

我使用这段代码,它工作得很好

     public void logout() {
    if (!isConnected(activity)) {
        Toast.makeText(activity, "Internet not connected", Toast.LENGTH_LONG).show();
        return;
    }
    SessionEvents.onLogoutBegin();
    AsyncFacebookRunner asyncRunner = new AsyncFacebookRunner(this.facebook);
    asyncRunner.logout(this.context, new LogoutRequestListener());
}

这是听众

    public class LogoutRequestListener extends BaseRequestListener {
    public void onComplete(String response, final Object state) {
        // callback should be run in the original thread, 
        // not the background thread
        mHandler.post(new Runnable() {
            public void run() {
                SessionEvents.onLogoutFinish();
                Intent intent= new Intent(activity,Login.class);
                activity.startActivity(intent);
                activity.finish();
            }
        });
    }
}
于 2013-02-12T07:17:53.943 回答
1

对于上面的 facebook sdk 版本 3

public void logoutFacebook() {
    Session session = Session.getActiveSession();
    if(session != null && session.isOpened()){
        session.closeAndClearTokenInformation();
    }
}
于 2014-09-26T07:51:45.717 回答
0

尝试这个 :

我希望这会对你有所帮助......

if (mFacebook.isSessionValid()) {
    try {
        String str = mFacebook.logout(getApplicationContext());
        SessionStore.clear(getApplicationContext());
    } catch (MalformedURLException e) {                     
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
于 2013-02-12T08:57:51.467 回答
0

如果您在登录时扩展和使用 facebook openSession,您必须使用 closeSession 将其关闭并将其放入您的注销中,或者您可以像这样简单地将它放在 onDestroy

public void onDestroy() {
        this.closeSession();
        super.onDestroy();
    }
于 2013-02-12T06:54:19.643 回答
0

如果您从 google 建议中查看此答案并使用 facebook sdk v4 或更高版本,请使用此行。它完美地工作。

if (AccessToken.getCurrentAccessToken() != null) {
                LoginManager.getInstance().logOut();
            }
于 2016-12-20T10:18:50.693 回答