Facebook SDK 4 dành cho Android - cách đăng xuất theo chương trình


112

Gần đây, Facebook đã phát hành SDK 4 với những cập nhật mới và thú vị. Tôi đã cố gắng chuyển sang SDK4 để sử dụng các tính năng mới, tuy nhiên, tôi đang gặp khó khăn với tính năng Đăng nhập của Facebook.

Cho đến nay, để đăng xuất Facebook theo chương trình, tôi đã sử dụng:

Session session = Session.getActiveSession();
session.closeAndClearTokenInformation();

Nhưng SDK4 dường như không hỗ trợ Session nữa và trong các tài liệu chính thức, họ đề cập đến:

Có hai cách để thực hiện đăng nhập Facebook trên Android:

Lớp LoginButton - Lớp này cung cấp một nút mà bạn có thể thêm vào giao diện người dùng của mình. Nó theo sau mã thông báo truy cập hiện tại và có thể đăng nhập mọi người và đăng xuất.

Có vẻ như không có cách nào để đăng xuất Facebook theo chương trình ngoại trừ việc sử dụng LoginButton. Bất cứ ai có bất kỳ ý tưởng, xin vui lòng chia sẻ nó ở đây.

Câu trả lời:


276

Bạn có thể sử dụng LoginManager.getInstance().logOut();, ngay cả khi bạn sử dụng LoginButton vì

Phần tử giao diện người dùng này bao hàm chức năng có sẵn trong LoginManager.

CHỈNH SỬA: Chỉ cần đề cập rằng điều này hoạt động cho Facebook SDK v4 . Tôi không biết liệu họ có thay đổi nó trong tương lai hay không.

@as batoutofhell đề cập, đừng quên đặt FacebookSdk.sdkInitialize(getApplicationContext());để khởi tạo sdk facebook. Chi tiết vui lòng xem tại đây .


2
Tôi muốn đề cập vì đây là kết quả hàng đầu của google, ứng dụng của tôi đã bị lỗi khi cố gắng đăng xuất cho đến khi tôi thêm dòng này đầu tiên: FacebookSdk.sdkInitialize (this.getApplicationContext ()); LoginManager.getInstance (). LogOut ();
batoutofhell

7
Sau khi đăng xuất, nó sẽ không cho phép tôi Đăng nhập lại. Có cách nào để đăng nhập lại sau khi tôi thực hiện LoginManager.getInstance (). LogOut ();
AndroidDev

1
Tại sao chúng ta nên gọi FacebookSdk.sdkInitialize, vì nó đã được khởi tạo trong onCreate?
CoolMind

1
LoginManager.logOut () i sử dụng này, nó hoạt động đúng cách
Erum

1
@Erum Hiện tại không có phương pháp nào như vậy LoginManager.logOut()trong FB SDK v4.23.0
Gem

61

SDK4, nếu bạn muốn loại bỏ hoàn toàn cặp đôi, hãy đảm bảo rằng bạn cũng xóa ứng dụng khỏi tài khoản facebook của người dùng. Phương pháp này ngắt kết nối người dùng hoàn toàn:

public void disconnectFromFacebook() {

    if (AccessToken.getCurrentAccessToken() == null) {
        return; // already logged out
    }

    new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions/", null, HttpMethod.DELETE, new GraphRequest
            .Callback() {
        @Override
        public void onCompleted(GraphResponse graphResponse) {

            LoginManager.getInstance().logOut();

        }
    }).executeAsync();
}

Đây chính xác là những gì tôi muốn!
Sash_KP

Điều đó có nghĩa là tôi phải xóa Ứng dụng Facebook và tin nhắn Facebook để hoàn tất đăng xuất cho ứng dụng của mình?
phongvan

1
Câu trả lời này đảm bảo người dùng đã đăng xuất hoàn toàn. Để giống 100% thì cần phải bao gồm FacebookSdk.sdkInitialize (getApplicationContext ());
Sandro Wiggers,

Trong lệnh gọi lại, tôi cũng đã thêm @Override public void onCompleted (GraphResponse graphResponse) {AccessToken.setCurrentAccessToken (null); LoginManager.getInstance (). LogOut (); }
Sandro Wiggers,

1
@voghDev onCompleted không quay lại chuỗi giao diện người dùng mà tôi tin rằng, vì vậy nó không chặn nó khi bạn gọi logOut ở đó.
Frank

9

2
Điều đó hoạt động nếu bạn đang sử dụng LoginManager. Có cách nào để đăng xuất theo chương trình khi sử dụng LoginButton không?
Hát vào

Tôi cũng muốn biết làm thế nào chúng ta có thể đăng xuất khi sử dụng LoginButton
Sarath

chỉ cần sử dụng LoginButton, nhấp vào nó một lần nữa sau đó nó sẽ được đăng xuất
beeing Jk

7

Để xử lý nó với loginButton:

//Check if user is currently logged in
        if (AccessToken.getCurrentAccessToken() != null && com.facebook.Profile.getCurrentProfile() != null){
            //Logged in so show the login button
            fbLogin.setVisibility(View.VISIBLE);
            fbLogin.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
//log out
                    LoginManager.getInstance().logOut();
                    gotoLogin();
                }
            });
        }

Này Stevie, Khi tôi gọi phương thức logOut () như bạn đã đề cập trong câu trả lời của mình thì nó đã báo cho tôi lỗi "java.lang.SecurityException: Permission Denial: get / set setting cho người dùng yêu cầu chạy với tư cách người dùng -2 nhưng đang gọi từ người dùng 0; ”. Nó đang yêu cầu tôi thêm một quyền trong tệp kê khai. Làm thế nào tôi có thể giải quyết nó vì tôi không muốn cấp quyền này vì đăng xuất phải là thủ tục bình thường.
Aditya

@Aditya Bạn chỉ cần có quyền truy cập Internet cho Ứng dụng. <uses-permission android:name="android.permission.INTERNET" />
stephen

Nhưng tôi gặp lỗi ở trên, nếu tôi không thêm nó. Nếu được bạn có thể chia sẻ mẫu facebook có nút đăng nhập tùy chỉnh và nút đăng xuất tùy chỉnh được không ??
Aditya

@Aditya trong ví dụ này, tôi đang sử dụng nút Đăng nhập facebook
Stephen

4

Bạn có thể đăng xuất bằng cách sử dụng LoginManager nhưng bạn cũng phải sử dụng yêu cầu biểu đồ. Tôi đang nói về việc đăng xuất hoàn toàn để lần sau bạn có thể đăng nhập bằng tài khoản khác.

new GraphRequest(AccessToken.getCurrentAccessToken(), "/me/permissions/", null, HttpMethod.DELETE, new GraphRequest
            .Callback() {
        @Override
        public void onCompleted(GraphResponse graphResponse) {

            SharedPreferences pref = DashBoard.this.getPreferences(Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = pref.edit();
            editor.clear();
            editor.commit();
            LoginManager.getInstance().logOut();

            Intent logoutint = new Intent(DashBoard.this,MainActivity.class);
            logoutint.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
               startActivity(logoutint);

        }
    }).executeAsync();

Với sự trợ giúp của các tùy chọn được chia sẻ ở đây, bạn có thể đăng xuất hoàn toàn và lần sau bạn có thể đăng nhập bằng tài khoản khác.


1

Frank phiên bản kotlin:

 fun disconnectFromFacebook() {
    if (AccessToken.getCurrentAccessToken() == null) {
        return  // already logged out
    }
    GraphRequest(
        AccessToken.getCurrentAccessToken(),
        "/me/permissions/",
        null,
        HttpMethod.DELETE,
        GraphRequest.Callback {
            LoginManager.getInstance().logOut()
        }).executeAsync()
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.