【问题标题】:Android : Facebook LogoutAndroid : Facebook 注销
【发布时间】:2013-01-27 10:17:28
【问题描述】:

我有一个 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 我找不到问题。请帮助我

【问题讨论】:

  • 可以把登出功能的代码贴在fb吗?
  • Fb 注销代码:::::: public String logout(Context context) throws MalformedURLException, IOException { Util.clearCookies(context);捆绑 b = 新捆绑(); b.putString("方法", "auth.expireSession");字符串响应 = 请求(b); setAccessToken(null); setAccessExpires(0);返回响应; }
  • 我发布了我的答案,我在我的 fb 应用程序中获得了相同的注销功能。此代码对我有用。如果您需要该代码,请使用它。你有什么问题可以问我..

标签: android facebook logout


【解决方案1】:

如果您从 google 建议查看此答案并使用 facebook sdk v4 或更高版本,请使用此行。效果很好。

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

【讨论】:

    【解决方案2】:

    试试这个:

    希望对你有所帮助...

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

    【讨论】:

      【解决方案3】:

      对于上面的 facebook sdk 版本 3

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

      【讨论】:

        【解决方案4】:

        我用了这段代码,效果很好

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 2014-07-31
            • 2012-10-29
            • 1970-01-01
            • 1970-01-01
            • 2014-02-16
            • 2013-05-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多