Android Studio(Kotlin)-每次关闭应用程序时,用户都必须重新登录到应用程序

时间:2019-01-04 21:22:11

标签: android firebase kotlin firebase-authentication

所以我有一个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 :(得分:1)

我有一个类似的应用程序开发人员,我只是使用启动屏幕检查用户是否已登录,然后打开正确的屏幕。 飞溅不必太复杂:实际上,您甚至可以避免设置视图并仅检查所需的内容。 This article解释得很清楚。

记住要在启动正确的启动活动后在启动活动上调用finish()。

答案 1 :(得分:0)

最简单的方法是使用侦听器。假设您有两个活动,LoginActivityMainActivity。可以在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!!)
}