it-swarm.com.de

Android Facebook SDK: Überprüfen Sie, ob der Benutzer angemeldet ist oder nicht

Ich habe eine Funktion in meiner Android-App, bei der der Benutzer die App autorisiert und einen Link freigibt.

Ich muss dem Benutzer auch eine Option zum Abmelden von Facebook geben, und diese Schaltfläche muss deaktiviert werden, wenn der Benutzer nicht angemeldet ist (oder die App nicht autorisiert ist).

Ich kann den API-Aufruf auf dem Android SDK nicht finden, der mich nach dem FB fragen lässt, ob der Benutzer angemeldet ist oder nicht.

Was ich gefunden habe ist getAccessExpires() :

Rufen Sie die Ablaufzeit der aktuellen Sitzung ab (in Millisekunden seit Unix Epoch) oder 0, wenn die Sitzung nicht abläuft oder nicht vorhanden ist.

Wird geprüft, ob die Sitzung gleich 0 ist? Oder fehlt mir etwas?

34
Jay Sidri

Ich hatte Mühe, in den FB-Dokumenten eine einfache Antwort darauf zu finden. Verwendung des Facebook SDK Version 3.0 Ich denke, es gibt zwei Möglichkeiten, um zu überprüfen, ob ein Benutzer angemeldet ist.

1) Verwenden Sie Session.isOpened()

Um diese Methode zu verwenden, müssen Sie die aktive Sitzung mit getActiveSession() abrufen und dann (hier ist der verwirrende Teil) entschlüsseln, ob sich die Sitzung in einem Zustand befindet, in dem der Benutzer angemeldet ist oder nicht. Ich denke, das einzige, was für einen angemeldeten Benutzer wichtig ist, ist, wenn die Sitzung isOpened(). Wenn also die Sitzung nicht null ist und sie offen ist, ist der Benutzer angemeldet. In allen anderen Fällen ist der Benutzer abgemeldet (beachten Sie, dass Session andere Zustände als geöffnet und geschlossen haben kann).

public boolean isLoggedIn() {
    Session session = Session.getActiveSession();
    return (session != null && session.isOpened());
}

Es gibt eine andere Möglichkeit, diese Funktion zu schreiben, die in dieser Antwort detailliert beschrieben wird, aber ich bin nicht sicher, welcher Ansatz klarer oder "best practice" ist.

2) Statusänderungen ständig mit Session.StatusCallback und UiLifecycleHelper überwachen

Wenn Sie diesem Tutorial folgen, richten Sie die UiLifecycleHelper ein und registrieren ein Session.StatusCallback-Objekt bei der Instantiierung damit. Es gibt eine Callback-Methode, call(), die Sie in Session.StatusCallback überschreiben, die angeblich jedes Mal aufgerufen wird, wenn sich der Benutzer an-/abmeldet. Innerhalb dieser Methode können Sie möglicherweise verfolgen, ob der Benutzer angemeldet ist oder nicht. Vielleicht so etwas:

private boolean isLoggedIn = false; // by default assume not logged in

private Session.StatusCallback callback = new Session.StatusCallback() {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        if (state.isOpened()) { //note: I think session.isOpened() is the same
            isLoggedIn = true;
        } else if (state.isClosed()) {
            isLoggedIn = false;
        }
    }
};

public boolean isLoggedIn() {
    return isLoggedIn;
}

Ich denke, Methode 1 ist einfacher und wahrscheinlich die bessere Wahl.

Als Randnotiz kann jeder Aufschluss darüber geben, warum das Tutorial state.isOpened() anstelle von session.isOpened() aufruft, da beide austauschbar zu sein scheinen (session.isOpened() scheint ohnehin nur die Version state zu durchlaufen).

47
Tony Chan

Facebook SDK 4.x-Versionen haben jetzt eine andere Methode:

boolean loggedIn = AccessToken.getCurrentAccessToken() != null;

oder

durch die Verwendung von Funktionen

boolean loggedIn;
//...
loggedIn = isFacebookLoggedIn();
//...
public boolean isFacebookLoggedIn(){
    return AccessToken.getCurrentAccessToken() != null;
}

Überprüfen Sie diesen Link für eine bessere Referenz https://developers.facebook.com/docs/facebook-login/Android Überprüfen Sie auch diese Überschrift "Zugriff auf Token und Profile", heißt es Wenn eine Person bereits angemeldet ist, überprüfen Sie AccessToken.getCurrentAccessToken () und Profile.getCurrentProfile ().

54
Diljeet

Hinweis für die Leser: Dies ist nun im neuen FB 3.0 SDK veraltet.

facebook.isSessionValid() gibt true zurück, wenn der Benutzer angemeldet ist, false, wenn nicht.

6
Jesse Chen
Session.getActiveSession().isOpened()

gibt true zurück, wenn der Benutzer angemeldet ist, false, wenn nicht

3
Zennichimaro

Android Studio mit:

compile 'com.facebook.Android:facebook-Android-sdk:4.0.1'

dann check login wie:

private void facebookPost() {
    //check login
    AccessToken accessToken = AccessToken.getCurrentAccessToken();
    if (accessToken == null) {
        Log.d(TAG, ">>>" + "Signed Out");
    } else {
        Log.d(TAG, ">>>" + "Signed In");
    }
}
3

@ Diljeet war richtig. https://stackoverflow.com/a/29375963/8593

Darüber hinaus verwenden

return AccessToken.getAccessToken() != null && Profile.getCurrentProfile()!=null;

Das funktioniert immer so.

2
leeCoder

Für Facebook Android SDK 4.x müssen Sie das "AccessToken.getCurrentAccessToken ()" verwenden, wie von @Diljeet gesagt, aber sein Scheck funktionierte nicht für mich. Ich überprüfte es schließlich mit:

Aktivität "onCreate":

facebookAccessToken = AccessToken.getCurrentAccessToken();

So prüfen Sie, ob die Sitzung noch aktiv ist (ich habe es in der "onResume" -Methode erstellt, tun Sie es jedoch dort, wo Sie es brauchen)

  if(facebookAccessToken != null){
        sessionExpired = facebookAccessToken.isExpired();
  }else{
        sessionExpired = true;
  }

Weitere Informationen unter https://developers.facebook.com/docs/facebook-login/Android

1
Alberto Méndez

Ich hatte das gleiche Problem. Hier ist meine Lösung mit SDK 4.0:

Als Erstes sollten Sie in Ihrer Aktivität, die sich mit der Anmeldeüberprüfung befasst, diesen primären Aufruf durchführen:

        FacebookSdk.sdkInitialize(this.getApplicationContext());

Fügen Sie in Ihre onCreate-Methode Folgendes ein:

updateWithToken(AccessToken.getCurrentAccessToken());

    new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) {
            updateWithToken(newAccessToken, handler);
        }
    };

Fügen Sie dann die folgende Methode hinzu:

private void updateWithToken(AccessToken currentAccessToken) {
    if (currentAccessToken != null) {
        fillUIWithFacebookInfos(handler);
    } else {
        login();
    }
}

Auf diese Weise werden der bereits angemeldete Benutzer und der neu angemeldete Benutzer behandelt.

0
Thomas L.

Das scheint mit der neuen SDK recht gut zu funktionieren.

private boolean isFacebookLoggedIn(){
    Session session = Session.getActiveSession();

    if (session != null) {
        //Session can be open, check for valid token
        if (!session.isClosed()) {
            if(!session.getAccessToken().equalsIgnoreCase("")){
                return true;
            }
        }
    }
    return false;
}
0
DeaMon1