Facebook SDK 4 สำหรับ Android - วิธีออกจากระบบโดยใช้โปรแกรม


113

ล่าสุด Facebook เปิดตัว SDK 4 พร้อมอัปเดตใหม่สุดเจ๋ง ฉันพยายามเปลี่ยนเป็น SDK4 เพื่อใช้คุณสมบัติใหม่อย่างไรก็ตามฉันกำลังดิ้นรนกับคุณสมบัติการเข้าสู่ระบบของ Facebook

จนถึงตอนนี้เพื่อออกจากระบบ Facebook โดยใช้โปรแกรมฉันใช้:

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

แต่ดูเหมือนว่า SDK4 จะไม่รองรับเซสชันอีกต่อไปและในเอกสารอย่างเป็นทางการพวกเขากล่าวถึง:

มีสองวิธีในการใช้การเข้าสู่ระบบ Facebook บน Android:

คลาส LoginButton - ซึ่งมีปุ่มที่คุณสามารถเพิ่มลงใน UI ของคุณ เป็นไปตามโทเค็นการเข้าถึงปัจจุบันและสามารถล็อกบุคคลเข้าและออกได้

ดูเหมือนว่าจะไม่มีวิธีออกจากระบบ Facebook โดยใช้โปรแกรมยกเว้นการใช้ LoginButton ใครมีความคิดอย่างไรโปรดแบ่งปันที่นี่

คำตอบ:


277

คุณสามารถใช้ได้LoginManager.getInstance().logOut();แม้ว่าคุณจะใช้ LoginButton เพราะ

องค์ประกอบ UI นี้รวมฟังก์ชันการทำงานที่มีอยู่ใน LoginManager

แก้ไข: เพียงแค่พูดถึงว่างานนี้ได้ที่ Facebook SDK v4 ฉันไม่รู้ว่าพวกเขาจะเปลี่ยนมันในอนาคตหรือไม่

@ ตามที่กล่าวถึง batoutofhell อย่าลืมใส่FacebookSdk.sdkInitialize(getApplicationContext());เพื่อ initialize facebook sdk โปรดดูที่นี่สำหรับรายละเอียด


2
ฉันต้องการพูดถึงเนื่องจากนี่เป็นผลการค้นหาอันดับต้น ๆ ของ Google แอปของฉันล้มเหลวเมื่อพยายามออกจากระบบจนกว่าฉันจะเพิ่มบรรทัดนี้ก่อน: FacebookSdk.sdkInitialize (this.getApplicationContext ()); LoginManager.getInstance (). logOut ();
batoutofhell

7
หลังจากออกจากระบบมันจะไม่อนุญาตให้ฉันเข้าสู่ระบบอีก มีวิธีใดบ้างในการเข้าสู่ระบบอีกครั้งหลังจากที่ฉัน LoginManager.getInstance () logOut ();
AndroidDev

1
ทำไมเราถึงเรียก FacebookSdk.sdkInitialize เนื่องจากได้เริ่มต้นใน onCreate แล้ว
CoolMind

1
LoginManager.logOut () ฉันใช้มันทำงานได้อย่างถูกต้อง
Erum

1
@Erum ไม่มีวิธีการดังกล่าวLoginManager.logOut()ในตอนนี้ใน FB SDK v4.23.0
Gem

61

SDK4 หากคุณต้องการเลิกจับคู่โดยสมบูรณ์ตรวจสอบให้แน่ใจว่าคุณได้ลบแอพออกจากบัญชี Facebook ของผู้ใช้ด้วย วิธีนี้จะยกเลิกการเชื่อมต่อกับผู้ใช้โดยสิ้นเชิง:

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

นี่คือสิ่งที่ฉันต้องการ!
Sash_KP

นั่นหมายความว่าฉันต้องลบแอพ Facebook และข้อความ Facebook เพื่อเสร็จสิ้นการออกจากระบบสำหรับแอพของฉัน?
phongvan

1
คำตอบนี้ช่วยให้แน่ใจว่าผู้ใช้ออกจากระบบโดยสมบูรณ์ เพื่อให้เป็น 100% จำเป็นต้องรวม FacebookSdk.sdkInitialize (getApplicationContext ());
Sandro Wiggers

ในการโทรกลับฉันยังเพิ่ม @Override public void onCompleted (GraphResponse graphResponse) {AccessToken.setCurrentAccessToken (null); LoginManager.getInstance (). logOut (); }
Sandro Wiggers

1
ฉันเชื่อว่า @voghDev onCompleted ไม่กลับมาในเธรด UI ดังนั้นจึงไม่บล็อกเมื่อคุณเรียกใช้ logOut
Frank

9

คุณสามารถใช้ได้ LoginManager.logOut()

ตรวจสอบhttps://developers.facebook.com/docs/reference/android/current/class/LoginManager/


2
ใช้งานได้ถ้าคุณใช้ LoginManager มีวิธีออกจากระบบโดยใช้โปรแกรมเมื่อใช้ LoginButton หรือไม่?
ร้อง

ฉันต้องการทราบว่าเราสามารถออกจากระบบเมื่อใช้
LoginButton ได้อย่างไร

เพียงแค่ใช้ LoginButton คลิกอีกครั้งจากนั้นจะออกจากระบบ
Beeing Jk

7

ในการจัดการกับ 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();
                }
            });
        }

เฮ้ Stevie เมื่อฉันเรียกวิธี logOut () ตามที่คุณได้กล่าวไว้ในคำตอบของคุณมันทำให้ฉันมีข้อผิดพลาด "java.lang.SecurityException: Permission Denial: get / set การตั้งค่าสำหรับผู้ใช้ขอให้เรียกใช้ในฐานะผู้ใช้ -2 แต่กำลังโทรจากผู้ใช้ 0; ". กำลังขอให้ฉันเพิ่มสิทธิ์ในไฟล์รายการ ฉันจะแก้ไขได้อย่างไรเพราะฉันไม่ต้องการให้สิทธิ์นี้เนื่องจากการล็อกเอาต์ควรเป็นขั้นตอนปกติ
Aditya

@Aditya คุณต้องได้รับอนุญาตทางอินเทอร์เน็ตสำหรับแอปเท่านั้น <uses-permission android:name="android.permission.INTERNET" />
stephen

แต่ฉันได้รับข้อผิดพลาดข้างต้นถ้าฉันไม่เพิ่ม ถ้าเป็นไปได้คุณช่วยแชร์ตัวอย่าง facebook ที่มีปุ่มล็อกอินแบบกำหนดเองและปุ่มล็อกเอาต์แบบกำหนดเองได้ไหม?
Aditya

@Aditya ในตัวอย่างนี้ฉันใช้ปุ่มเข้าสู่ระบบ facebook
stephen

4

คุณสามารถออกจากระบบโดยใช้ LoginManager แต่คุณต้องใช้การร้องขอกราฟด้วย ฉันกำลังพูดถึงการออกจากระบบโดยสมบูรณ์ดังนั้นในครั้งต่อไปคุณสามารถเข้าสู่ระบบด้วยบัญชีอื่นได้

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

ด้วยความช่วยเหลือของการตั้งค่าที่ใช้ร่วมกันที่นี่คุณสามารถออกจากระบบได้อย่างสมบูรณ์และในครั้งต่อไปคุณสามารถเข้าสู่ระบบด้วยบัญชีอื่นได้


1

Frank รุ่น 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()
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.