it-swarm.com.de

Wenn Sie das Facebook SDK auf Android verwenden, erhalten Sie "Als anderer Facebook-Benutzer angemeldet". Error

Ich aktualisiere meine Verwendung des Facebook SDK auf die neueste Version. Der folgende Code wird von Zeile zu Zeile aus den eigenen Beispielen von Facebook angehoben, die hier zu finden sind: https://developers.facebook.com/docs/facebook-login/Android/v2.3

import Android.content.Intent;
import Android.os.Bundle;
import Android.support.v4.app.FragmentActivity;
import Android.util.Log;

import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;

import Java.util.Arrays;

public class TestFb extends FragmentActivity{

    CallbackManager callbackManager;
    FacebookController fbController;

    @Override
    public void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    fbController = FacebookController.getInstance(this);

    FacebookSdk.sdkInitialize(getApplicationContext());
    final LoginManager loginManager = LoginManager.getInstance();

    callbackManager = CallbackManager.Factory.create();
    loginManager.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                String userId = loginResult.getAccessToken().getUserId();
                String token = loginResult.getAccessToken().getToken();
                Log.d("fb", "ID: " + userId + " Token: "+ token);
            }

            @Override
            public void onCancel() {
                finish();
            }

            @Override
            public void onError(FacebookException e) {
                Log.d("fb", "Exception: " + e.getMessage());
            }
        });
        loginManager.logInWithReadPermissions(this, Arrays.asList(new String[]{"email", "user_likes"}));
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
}

Das Problem ist, dass dies nicht funktioniert, wenn der Benutzer sich bereits auf seinem Telefon bei der Facebook-App angemeldet hat. In diesem Fall wird der Fehler "Benutzer als anderer Facebook-Benutzer angemeldet" angezeigt. 

Ich denke, da auf dem Gerät bereits ein aktiver Facebook-Account vorhanden ist, kann kein neuer erstellt werden. Wenn dies der Fall war, sollte ich dann die ID und das Token des Benutzers vom vorhandenen Konto abrufen? Ich konnte anscheinend keine Erwähnung dieses Problems auf den Dokumentationsseiten von Facebook finden.

37
spacitron

Wenn Sie sich mit dem Benutzer anmelden möchten, der jetzt in der Facebook-App angemeldet ist, und Sie noch über ein für einen früheren Benutzer gültiges Token verfügen, können Sie den Fehler erkennen und sich in Ihrem FacebookCallback wie folgt abmelden:

    @Override
    public void onError(FacebookException e) {
        if (e instanceof FacebookAuthorizationException) {
            if (AccessToken.getCurrentAccessToken() != null) {
                LoginManager.getInstance().logOut();
            }
        }
    }

Dann können Sie sich erneut mit dem LoginManager anmelden.

67
sorianiv

Vielen Dank an @sorianiv und @ ming-li für ihre Antworten! Ich möchte meinen Fall ausführlicher beschreiben, da er für jemanden hilfreich sein kann.

Das Facebook SDK erstellt eine freigegebene Voreinstellungsdatei mit dem Namen "com.facebook.AccessTokenManager.SharedPreferences". Und wenn sich der Benutzer bei Facebook anmeldet, speichert SDK dort Zugriffstoken, Benutzernamen und andere Tokeninformationen. Mein Problem war, dass ich nicht angerufen habe 

LoginManager.getInstance().logOut() 

wenn sich der Benutzer in meiner App abmeldet. Der Cache in den gemeinsamen Einstellungen wurde nicht gelöscht. Wenn der Benutzer dann versucht, sich bei einem anderen Facebook-Benutzer anzumelden, hat Facebook SDK die Benutzerdaten aus dem Cache abgerufen und einen Fehler zurückgegeben: 

"Benutzer als anderer Facebook-Benutzer angemeldet."

In meinem Fall bestand die Lösung darin, logOut () aufzurufen, wenn sich der Benutzer von meiner App abmeldet.

27
lobzik

Sie erhalten diese Fehlermeldung, wenn Sie bereits über ein gültiges Zugriffstoken verfügen, jedoch zusätzliche Berechtigungen anfordern (über den Aufruf LoginManager.logInWithReadPermissions), und der in der FB-App angemeldete Benutzer unterscheidet sich von dem, für den Sie bereits ein Zugriffstoken haben. Sie können ein paar Dinge tun:

  1. Überprüfen Sie, ob Sie bereits über ein gültiges Zugriffstoken verfügen (AccessToken.getCurrentAccessToken ()! = Null), und fordern Sie keine weiteren Berechtigungen an.
  2. Wenn Sie weitere Berechtigungen anfordern müssen und dieser Fehler angezeigt wird, bitten Sie den Benutzer, sich von der FB-App abzumelden und sich als sich selbst anzumelden.
4
Ming Li
if(LoginManager.getInstance()!=null){
        LoginManager.getInstance().logOut();
    }

Schreiben Sie vor "registerCallback ();" Methode

1
Parth Desai

Ich hatte heute auch das gleiche Problem. Ich habe das Problem durch die Verwendung der folgenden Codezeile überwunden, wenn der Benutzer auf FbLoginButton klickt

LoginManager.getInstance().logOut();

0
Ramesh 586