एंड्रॉइड के लिए फेसबुक एसडीके 4 - प्रोग्रामेटिक रूप से लॉग आउट कैसे करें


112

हाल ही में, फेसबुक ने एसडीके 4 को नए और अच्छे अपडेट के साथ जारी किया। मैंने नई सुविधाओं का उपयोग करने के लिए एसडीके 4 में स्विच करने की कोशिश की, हालांकि, मैं फेसबुक की लॉगिन सुविधा से जूझ रहा हूं।

अब तक, फेसबुक को प्रोग्रामेटिक रूप से लॉग आउट करने के लिए, मैंने उपयोग किया:

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

लेकिन SDK4 सत्र का समर्थन नहीं करता है, और आधिकारिक डॉक्स में, वे उल्लेख करते हैं:

एंड्रॉइड पर फेसबुक लॉगिन को लागू करने के दो तरीके हैं:

LoginButton class - जो एक बटन प्रदान करता है जिसे आप अपने UI में जोड़ सकते हैं। यह वर्तमान पहुंच टोकन का अनुसरण करता है और लोगों को अंदर और बाहर लॉग इन कर सकता है।

वैसे, ऐसा लगता है कि LoginButton का उपयोग करने के अलावा प्रोग्राम को लॉग आउट करने का कोई तरीका नहीं है। किसी के पास कोई भी विचार है, कृपया इसे यहां साझा करें।

जवाबों:


276

आप का उपयोग कर सकते हैं LoginManager.getInstance().logOut();, भले ही आप LoginButton का उपयोग करें

यह UI तत्व LoginManager में उपलब्ध कार्यक्षमता को लपेटता है।

EDIT: बस यह उल्लेख करना है कि यह फेसबुक एसडीके v4 के लिए काम करता है । मुझे नहीं पता कि वे भविष्य में इसे बदलेंगे या नहीं।

@as batoutofhell का उल्लेख, FacebookSdk.sdkInitialize(getApplicationContext());फेसबुक एसडीके को इनिशियलाइज़ करने के लिए मत भूलना । कृपया विवरण के लिए यहां देखें।


2
मैं इसका उल्लेख करना चाहता हूं क्योंकि यह शीर्ष Google परिणाम है, जब तक मैं इस पंक्ति को पहले जोड़ने की कोशिश कर रहा था, तब मेरा ऐप क्रैश हो गया: FacebookSdk.sdkInitialize (this.getApplicationContext ()); । LoginManager.getInstance () लॉगआउट ();
बैटआउट

7
लॉगआउट के बाद यह मुझे फिर से लॉगिन करने की अनुमति नहीं देगा। क्या मैं LoginManager.getInstance ()। LogOut () के बाद फिर से लॉगिन करने का कोई तरीका है;
AndroidDev

1
हमें FacebookSdk.sdkInitialize क्यों कॉल करना चाहिए, क्योंकि यह पहले से ही ऑनक्रिएट में इनिशियलाइज़ हो चुका है?
कूलमाइंड

1
LoginManager.logOut () मैंने इसका इस्तेमाल किया, यह ठीक से काम करता है
एरुम

1
@ विदेश LoginManager.logOut()में FB SDK v4.23.0 में ऐसा कोई तरीका नहीं है
Gem

61

SDK4, यदि आप पूरी तरह से डी-कपल करना चाहते हैं, तो सुनिश्चित करें कि आप उपयोगकर्ता के फेसबुक अकाउंट से भी ऐप हटा दें। यह विधि पूरी तरह से उपयोगकर्ता को काट देती है:

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

जैसा मुझे चाहिए था यह बिल्कुल वैसा ही है!
शाश_केपी

इसका मतलब है कि मुझे अपने ऐप के लिए लॉगआउट पूरा करने के लिए फेसबुक ऐप और फेसबुक संदेश को हटाना होगा?
फोंगवन

1
यह उत्तर सुनिश्चित करता है कि उपयोगकर्ता पूरी तरह से लॉग आउट हो गया है। बस 100% होने के लिए FacebookSdk.sdkInitialize (getApplicationContext ()) शामिल करना आवश्यक है;
सैंड्रो विगर्स 2

कॉलबैक में मैंने @Override public void onCompleted (GraphResponse graphResponse) {AccessToken.setCurrentAccessToken (null) को भी जोड़ा; । LoginManager.getInstance () लॉगआउट (); }
सैंड्रो विगर्स 3

1
@voghDev onCompleted मुझे यूआई थ्रेड पर विश्वास नहीं करता है, इसलिए जब आप लॉगऑउट कहते हैं तो यह इसे ब्लॉक नहीं करता है।
फ्रैंक

9

आप उपयोग कर सकते हैं LoginManager.logOut()

की जाँच करें https://developers.facebook.com/docs/reference/android/current/class/LoginManager/


2
यदि आप LoginManager का उपयोग कर रहे हैं तो यह काम करता है। क्या LoginButton का उपयोग करते समय प्रोग्रामेटिक रूप से लॉगआउट करने का कोई तरीका है?
गाए

मुझे यह भी पता करने के लिए हम कैसे लॉगआउट कर सकते हैं जब LoginButton का उपयोग कर
सरत

बस LoginButton का उपयोग करें, इसे फिर से क्लिक करें, फिर इसे लॉग आउट किया जाएगा
मधुमक्खी Jk

7

इसे लॉगिनबटन से संभालने के लिए:

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

हे स्टीवी, जब मैंने लॉगऑउट () विधि का उल्लेख किया जैसा कि आपने अपने उत्तर में उल्लेख किया है, तो इसने मुझे त्रुटि दी "java.lang.SecurityException: अनुमति अस्वीकृत: उपयोगकर्ता के लिए सेट / सेट सेटिंग उपयोगकर्ता -2 के रूप में चलाने के लिए कहता है, लेकिन उपयोगकर्ता से कॉल कर रहा है 0; "। यह मुझे प्रकट फ़ाइल में एक अनुमति जोड़ने के लिए कह रहा है। मैं इसे कैसे हल कर सकता हूं क्योंकि मैं यह अनुमति नहीं देना चाहता क्योंकि लॉगआउट सामान्य प्रक्रिया होनी चाहिए।
आदित्य

@ आदित्य आपको केवल ऐप के लिए इंटरनेट की अनुमति चाहिए। <uses-permission android:name="android.permission.INTERNET" />
स्टीफन

लेकिन मैं ऊपर त्रुटि हो रही है, अगर मैं इसे जोड़ नहीं है। यदि संभव हो, तो क्या आप एक फेसबुक नमूना साझा कर सकते हैं जिसमें कस्टम लॉगिन बटन और कस्टम लॉगआउट बटन है ??
आदित्य

@ इस उदाहरण में मैं फेसबुक लॉगिन बटन का उपयोग कर रहा हूं
स्टीफन

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

फ्रैंक संस्करण 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()
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.