После первого запуска активность входа сохраняется - PullRequest
0 голосов
/ 27 июня 2019

Я создаю операцию входа (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 снова вызывается.

Любая помощь будет очень признательна.

1 Ответ

0 голосов
/ 27 июня 2019

Я исправил проблему по-другому, как предложено shubham-vashisht .

Итак, вот как я это сделал:

private SharedPreferences sharedPreferences;

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

        //Check if it's application's first run
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        boolean state = sharedPreferences.getBoolean("firstrun", false);
        if (!state) {
            Editor editor = sharedPreferences.edit();
            editor.putBoolean("firstrun", true);
            editor.apply();
            startActivity(new Intent(MainActivity.this, SignInActivity.class));
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...