Android Studio (Kotlin) - пользователь должен входить в приложение каждый раз, когда приложение закрывается - PullRequest
0 голосов
/ 05 января 2019

Итак, у меня есть RegisterActivity и MapsActivity. Когда новый пользователь откроет приложение, он будет на RegisterActivity и зарегистрируется. Как только они зарегистрируются, мое приложение создает Intent и отправляет их на MapsActivity

Проблема в том, что каждый раз, когда пользователь закрывает приложение, он должен снова войти / зарегистрироваться.

Я хочу, чтобы приложение могло открываться обратно на MapsActivity, поскольку пользователь еще не вышел из системы


Вот моя попытка:

я поставил <intent-filter> в обоих RegisterActivity и MapsActivity, потому что я думаю, что оба должны быть основными пусковыми установками, в зависимости от того, вошел пользователь в систему или нет?

  • Если они не вошли в систему, то основной лаунчер должен быть RegisterActivity
  • Если они вошли в систему, то основной лаунчер должен быть MapsActivity

AndroidManifest.xml

<application
    <activity android:name=".MapsActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

    <activity android:name=".RegisterActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
    </activity>

    <activity android:name=".LoginActivity">
    </activity>

</application>

MapsActivity.kt

public override fun onStart() {
    super.onStart()
    // Check if user is signed in (non-null) and update UI accordingly.
    val currentUser = FirebaseAuth.getInstance().currentUser
    if(currentUser == null){
        Log.d(TAG, "User is not logged in")
        val intent = Intent(this, LoginActivity::class.java)
        intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
        startActivity(intent)
    }else {
        Log.d(TAG, "User is logged in")
    }
}

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Самый простой способ добиться этого - использовать слушателя. Предположим, у вас есть два действия: LoginActivity и MainActivity. Слушатель, который можно создать в LoginActivity, должен выглядеть следующим образом:

val authStateListener = FirebaseAuth.AuthStateListener { firebaseAuth ->
    val firebaseUser = firebaseAuth.currentUser
    if (firebaseUser != null) {
        val intent = Intent(this, MainActivity::class.java)
        startActivity(intent)
        finish()
    }
}

Это в основном означает, что если пользователь вошел в систему, пропустите LoginActivity и перейдите к MainActivity.

Создание объекта FirebaseAuth:

val firebaseAuth = FirebaseAuth.getInstance()

И начните прослушивать изменения в вашем onStart() методе, подобном этому:

override fun onStart() {
    super.onStart()
    firebaseAuth!!.addAuthStateListener(this.authStateListener!!)
}

В MainActivity вы должны сделать то же самое:

val authStateListener = FirebaseAuth.AuthStateListener { firebaseAuth ->
    val firebaseUser = firebaseAuth.currentUser
    if (firebaseUser == null) {
        val intent = Intent(this, LoginActivity::class.java)
        startActivity(intent)
    }
}

Что в основном означает, что если пользователь не вошел в систему, пропустите MainActivity и перейдите к LoginActivity. В этом упражнении вы должны сделать то же самое, что и в LoginActivity, вы должны начать прислушиваться к изменениям в onStart().

В обоих действиях не забудьте удалить слушателя в тот момент, когда он больше не нужен. Поэтому добавьте следующую строку кода в ваш метод onStop():

override fun onStop() {
    super.onStop()
    firebaseAuth!!.removeAuthStateListener(this.authStateListener!!)
}
0 голосов
/ 05 января 2019

У меня есть разработчик похожего приложения, и я просто использую заставку, которая проверяет, вошли пользователи или нет, а затем открываю правый экран. Всплеск не должен быть сложным: на самом деле вы даже можете избежать установки вида и просто проверить, что хотите. Эта статья объясняет это очень четко.

Не забудьте вызвать finish () для всплывающей активности после запуска правильной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...