Я создаю операцию входа (Firebase, вход в Google), которая запускается только при первом запуске приложения.Проблема заключается в том, что активность сохраняется при порождении даже после завершения процесса аутентификации.
Я объединяю базу данных реального времени для хранения пользовательских данных в базе данных, когда новый пользователь регистрируется.
Я запустилотладчик через процесс аутентификации, который не возвращал ошибок или неожиданного поведения.Я также могу подтвердить, что База данных реального времени запрашивается, как и ожидалось.
Приложение написано на комбинации Java и Kotlin.
Так я называю SignInActivity
внутри MainActivity
в приложениях.первый запуск (Java)
private SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Check if this is application's first run
sharedPreferences = getSharedPreferences(getApplicationContext().getPackageName(), Context.MODE_PRIVATE);
startActivity(new Intent(MainActivity.this, SignInActivity.class));
}
@Override
protected void onResume() {
super.onResume();
if (sharedPreferences.getBoolean("first", true)) {
startActivity(new Intent(MainActivity.this, SignInActivity.class));
sharedPreferences.edit().putBoolean("first", false).apply();
}
}
и это функция Kotlin, которая начинает процесс аутентификации
private fun authenticateWithGoogle(account: GoogleSignInAccount?) {
if (account != null) {
val credential: AuthCredential = GoogleAuthProvider.getCredential(account.idToken, null)
firebaseAuth.signInWithCredential(credential).addOnCompleteListener{
if (it.isSuccessful) {
databaseReference.addValueEventListener(object: ValueEventListener {
override fun onCancelled(p0: DatabaseError) {}
override fun onDataChange(dataSnapshot: DataSnapshot) {
databaseReference.child(account.id!!)
val userModel: UserModel? = dataSnapshot.getValue(UserModel::class.java)
if (userModel == null) {
databaseReference.child(account.id!!).setValue(UserModel(account.id, account.displayName, account.email))
startActivity(Intent(this@SignInActivity, MainActivity::class.java))
}
startActivity(Intent(this@SignInActivity, MainActivity::class.java))
}
})
}
}
}
}
При первоначальном переходе от MainActivity
к SignInActivity
процесс аутентификацииначинается при нажатии кнопки.Функция authenticateWithGoogle
вызывается, как и ожидалось, и к базе данных запрашивается информация о том, существует пользователь или нет.Если пользователь существует, просто перейдите обратно к MainActivity
, если нет, сохраните его данные в базе данных, а затем перейдите к MainActivity
.
. На этом этапе общие настройки для сохранения состояния первого запускав MainActivity
следует установить значение false, но, по-видимому, это не так, поэтому SignInActivity
снова вызывается.
Любая помощь будет очень признательна.