2017-02-11 5 views
0

У меня есть операция подписи, и я использую Firebase auth и firebase UI для своего приложения. У меня есть две кнопки на моем экране регистрации Google + и еще одна комбинация паролей электронной почты.Firebase android onAuthStateChanged не уволен, а код результата равен -1 всегда

У меня есть две проблемы

Моих Auth изменений состояний не стреляя, и в моем onActivityResult моего кода результата всегда -1

Когда я закрываю мое приложение и повторно установить/повторно запустить мое приложение, Меня забирают на пустой экран.

Пожалуйста, смотрите ниже signinactivity

public class SigninActivity extends AppCompatActivity { 

public static final String ANONYMOUS = "anonymous"; 
public static final int RC_SIGN_IN = 1; 
private static final String TAG = "SigninActivity"; 

//private MessageAdapter mMessageAdapter; 
private ProgressBar mProgressBar; 

private String mUsername, loginUser; 

// Firebase instance variables 
private FirebaseAuth mFirebaseAuth; 
private FirebaseAuth.AuthStateListener mAuthStateListener; 
private FirebaseDatabase mFirebaseDatabase; 
private FirebaseStorage mFirebaseStorage; 
private DatabaseReference mMessagesDatabaseReference; 
private StorageReference mChatPhotosStorageReference; 
private View mLayout; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mLayout = findViewById(android.R.id.content); 
    mUsername = ANONYMOUS; 
    mFirebaseDatabase = FirebaseDatabase.getInstance(); 
    // Initialize Firebase components 
    mFirebaseAuth = FirebaseAuth.getInstance(); 
    mFirebaseStorage = FirebaseStorage.getInstance(); 

    // Initialize references to views 
    mProgressBar = (ProgressBar) findViewById(R.id.progressBar); 

    // Initialize progress bar 
    mProgressBar.setVisibility(ProgressBar.INVISIBLE); 

    mAuthStateListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      FirebaseUser user = firebaseAuth.getCurrentUser();; 
      Log.d("onAuthStateChanged", String.valueOf(user)); 
      if (user != null) { 
       if (user.getDisplayName() != null) { 
        loginUser = onSignedInInitialize(user.getDisplayName()); 
       } else { 
        loginUser = onSignedInInitialize(getString(R.string.email_user)); 
       } 
       // User is signed in 
      } else { 
       // User is signed out 
       startActivityForResult(
         AuthUI.getInstance() 
           .createSignInIntentBuilder() 
           .setProviders(
             AuthUI.EMAIL_PROVIDER, 
             AuthUI.GOOGLE_PROVIDER) 
           .setTheme(R.style.GreenTheme) 
           .build(), 
         RC_SIGN_IN); 
      } 
     } 
    }; 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    mFirebaseAuth.addAuthStateListener(mAuthStateListener); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    if (mAuthStateListener != null) { 
     mFirebaseAuth.removeAuthStateListener(mAuthStateListener); 
    } 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == RC_SIGN_IN) { 
     Log.d("requestCode", String.valueOf(requestCode)); 
     Log.d("resultCode", String.valueOf(resultCode)); 
     Log.d("data", String.valueOf(data)); 

     if (resultCode == RESULT_OK) { 
      // Sign-in succeeded, set up the UI 
      Snackbar.make(mLayout, getString(R.string.signin_string), 
        Snackbar.LENGTH_LONG).show(); 
      Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
      startActivity(intent); 
     } else if (resultCode == RESULT_CANCELED) { 
      // Sign in was canceled by the user, finish the activity 
      Snackbar.make(mLayout, getString(R.string.signin_cancel), 
        Snackbar.LENGTH_LONG).show(); 
      finish(); 
     } 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main_menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.sign_out_menu: 
      AuthUI.getInstance().signOut(this); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

private String onSignedInInitialize(String username) { 
    if (username != null) { 
     mUsername = username; 
    } else { 
     mUsername = getString(R.string.email_sign); 
    } 
    return username; 
} 
} 

след:

Я попытался отладки мой код и requestCode является 1 (как и ожидалось, но код результат -1)

02-11 10 : 34: 19,609 4429-4429/app_name Д/requestCode: 1

02-11 10: 34: 19,609 4429-4429/app_name Д/ResultCode: -1

+1

В вашей трассе показано, что «resultCode» равен -1. Это значение [Activity.RESULT_OK] (https://developer.android.com/reference/android/app/Activity.html#RESULT_OK). Это означает, что ваш вызов 'AuthUI' с' requestCode' из 'RC_SIGN_IN' (равен 1) преуспел. Возникновение этого результата активности также означает, что ваш 'AuthStateListener' запускается, потому что здесь вы вызываете' AuthUI'. Можете ли вы объяснить, в чем проблема? –

+0

Проблема заключается в том, что когда я закрываю приложение (закрываю фон без выхода) и открываю приложение, я получаю пустой экран. –

+1

Обратите внимание, что успешный вход сохраняется на устройстве до тех пор, пока пользователь не выйдет из системы. Похоже, если 'SigninActivity' запускается, когда пользователь уже имеет вход в систему, он вызывает' onSignedInInitialize() ', а затем выполняет _not_' finish() '. Возможно, это пустой экран, который вы видите? –

ответ

0

Ответ от qbix помог решить мою проблему