2016-12-22 1 views
0

In meiner App versuche ich Facebook Login zu implementieren. Ich habe nach dem Splash eine IntroLogin-Aktivität, um festzustellen, ob der Benutzer bereits angemeldet ist oder nicht. Wenn der Benutzer bereits angemeldet ist, wird MainActivity gerade geladen. Andernfalls wird der Benutzer aufgefordert, sich anzumelden.Kann nicht mit Facebook SDK anmelden

Meine Methode zum Ermitteln, ob der Benutzer angemeldet ist oder nicht funktioniert gut in Android 6+. In Android Lollipop wird die App jedoch geschlossen, nachdem sich der Benutzer angemeldet hat (der Nutzer erhält eine App-Authentifizierung, um seine Informationen im Popup-Fenster zu verwenden). Ich bekomme keine FCs oder irgendwelche Nachrichten im Log. Es schließt einfach. Selbst wenn der Benutzer die App neu startet, wird erneut zur Anmeldung aufgefordert.

Meine IntroLogin Aktivität:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_intro_login); 

    sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

    loginButton = (Button) findViewById(R.id.login_button); 

    FacebookSdk.sdkInitialize(getApplicationContext()); 
    callbackManager = CallbackManager.Factory.create(); 

    AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
    if(accessToken != null){ 
     finish(); 
    } 
    else{ 
     loginButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       PopupLogin(); 
      } 
     }); 
    } 
} 

public void PopupLogin() { 
    // Set permissions 
    LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile")); 
    LoginManager.getInstance().setLoginBehavior(LoginBehavior.WEB_VIEW_ONLY).registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      Log.i(TAG, "onSuccess: " + loginResult); 
      startActivity(new Intent(IntroLogin.this, MainActivity.class)); 
      finish(); 
     } 

     @Override 
     public void onCancel() { 
      Log.d("MyApp", "Login canceled"); 
      Snackbar snackbar = Snackbar.make(loginButton, "Login process canceled", Snackbar.LENGTH_INDEFINITE); 
      snackbar.getView().setBackgroundColor(ContextCompat.getColor(IntroLogin.this, R.color.colorPrimaryDark)); 
      snackbar.setActionTextColor(ContextCompat.getColor(IntroLogin.this, R.color.pure_white)); 
      snackbar.setAction(R.string.retry_login, new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        loginButton.performClick(); 
       } 
      }); 
      snackbar.show(); 
     } 

     @Override 
     public void onError(FacebookException error) { 
      Log.d("Myapp", error.toString()); 
      Toast.makeText(IntroLogin.this, error.getMessage(), Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

UPDATE:

ich die Ursache gefunden, aber nicht die Lösung, ich glaube OnActivityResult nicht in Lutscher immer genannt, dass vielleicht der Grund, warum ich nicht zu sehen bin jedes Protokoll.

Antwort

0

sollten Sie initialisieren Ihre facebooksdk kurz nach super.oncreate() aufrufen

Und auch finish() Sie anrufen, wenn accessToken != null das heißt, wenn der Benutzer bereits in Facebook angemeldet ist, wird die Aktivität schließen ..

ändern Ihr onCreate() Methodencode zu:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     setContentView(R.layout.activity_intro_login); 
     callbackManager = CallbackManager.Factory.create(); 
     sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

     loginButton = (Button) findViewById(R.id.login_button); 
     updateWithToken(AccessToken.getCurrentAccessToken()); 
     accessTokenTracker = new AccessTokenTracker() { 
      @Override 
      protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) { 
       updateWithToken(newToken); 
      } 
     }; 
     accessTokenTracker.startTracking(); 
    } 

private void updateWithToken(AccessToken currentAccessToken) { 

     if (currentAccessToken != null) { 
      Log.d("FB", "User Logged IN."); 
      //programetically logout user or do your on success 
      LoginManager.getInstance().logOut(); 
     } else { 
      Log.d("FB", "User Logged Out."); 
      loginButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       PopupLogin(); 
      } 
     }); 
     } 
    } 
+0

Ich initialisiere Facebook SDK in meiner Anwendungsklasse, also denke ich, dass das nicht das Problem ist. Wie auch immer, ich habe deine Antwort versucht, es ist immer noch in Lollipop geschlossen. Ich habe sogar versucht, OnSuccess zu zeigen/einzuloggen, es zeigt weder auf dem Bildschirm noch auf dem Log etwas. Ich bin ziemlich ahnungslos, warum passiert das! –

+0

Was ist deine Facebook Sdk Version? – rafsanahmad007

+0

Ich benutze 4.18 Version –

0

Die Ursache gefunden. Ich habe android:launchMode="singleTop" in meiner loginActivity hinzugefügt, das war der Grund, warum OnActivityResult nicht anruft.