安卓系统:Facebook注销



我有一个LoginViaFacebook活动和一个用于facebook登录的登录按钮。我使用以下代码登录到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注销方法的响应在日志中显示为true。但当我再次运行应用程序时,它会自动登录到facebook我找不出问题。请帮助我

我使用了这个代码,它在中运行得很好

     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();
            }
        });
    }
}

对于以上的facebooksdk版本3

public void logoutFacebook() {
    Session session = Session.getActiveSession();
    if(session != null && session.isOpened()){
        session.closeAndClearTokenInformation();
    }
}

如果你在登录时扩展并使用facebookopenSession,你必须使用closeSession关闭它并将其放入注销,或者你可以像这个一样简单地将其置于Destroy

public void onDestroy() {
        this.closeSession();
        super.onDestroy();
    }

试试这个:

我希望这对你有帮助。。。

if (mFacebook.isSessionValid()) {
    try {
        String str = mFacebook.logout(getApplicationContext());
        SessionStore.clear(getApplicationContext());
    } catch (MalformedURLException e) {                     
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

如果您正在查看谷歌建议中的答案,并使用facebooksdk v4或更高版本,请使用以下行。它工作得很好。

if (AccessToken.getCurrentAccessToken() != null) {
                LoginManager.getInstance().logOut();
            }

最新更新