2016-04-19 9 views
0

Ich habe Probleme, Benutzer mit Facebook zu authentifizieren und eine einzige neue Identität mit AWS Cognito zu erstellen. Wenn dieser Benutzer dann die App löscht und erneut herunterlädt, möchte ich, dass Cognito dieselbe Identität zurückgibt.Android Facebook Anmeldung mit AWS Cognito

Facebook Login funktioniert aber credentialsProvider.setLogins (Logins); erstellt jedes Mal 4 neue, nicht authentifizierte Identitäten.

final CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext(), "xxxxxxxx", Regions.US_EAST_1); 

    loginButton = (LoginButton) findViewById(R.id.login_button); 
    loginButton.setReadPermissions(Arrays.asList("email", "user_friends")); 

    callbackManager = CallbackManager.Factory.create(); 

    accessTokenTracker = new AccessTokenTracker() { 
     @Override 
     protected void onCurrentAccessTokenChanged(
       AccessToken oldAccessToken, 
       AccessToken currentAccessToken) { 
      updateWithToken(currentAccessToken); 

     } 
    }; 

    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 

      Map<String, String> logins = new HashMap<String, String>(); 
      logins.put("graph.facebook.com", AccessToken.getCurrentAccessToken().getToken()); 
      credentialsProvider.setLogins(logins); 
      Log.d("LogTag", "my ID is " + logins); 
     } 


     @Override 
     public void onCancel() { 
      Toast.makeText(getBaseContext(), "Login Cancelled", Toast.LENGTH_SHORT).show(); 
      Log.v("LoginActivity", "cancel"); 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      Toast.makeText(getBaseContext(), "Problem connecting to Facebook", Toast.LENGTH_SHORT).show(); 
      Log.v("LoginActivity", exception.getCause().toString()); 
     } 
    }); 

} 

private void updateWithToken(AccessToken token) { 
    if (token != null) { 

     Intent intent = new Intent(LogIn.this, NavDrawer.class); 
     LogIn.this.startActivity(intent); 

    } 
    ; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    accessTokenTracker.stopTracking(); 
} 

@Override 
protected void onResumeFragments() { 
    super.onResumeFragments(); 
    updateWithToken(AccessToken.getCurrentAccessToken()); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
    Intent intent = new Intent(LogIn.this, Buffer.class); 
    LogIn.this.startActivity(intent); 
} 

}

Jede Hilfe wäre großartig, danke Ihnen!

Antwort

0

Ich sehe, dass Sie jedes Mal eine neue Aktivität starten, wenn Ihr Zugriffstoken von Facebook aktualisiert wird. Das bedeutet, dass Sie jedes Mal verschiedene Instanzen von CognitoCachingCredentialsProvider erstellen, was nicht richtig ist.

Idealerweise sollten Sie CognitoCachingCredentialsProvider als Singleton in Ihrer Anwendung haben und in allen Ihren Aktivitäten und App-Logik verwenden. Sie können das Modell Cognito sample application als Beispiel verwenden, um den Fluss zu modellieren.

Verwandte Themen