【发布时间】:2019-09-11 10:57:31
【问题描述】:
我有一个 Android 应用程序,它允许用户创建用户帐户,但也可以在没有用户帐户的情况下继续。身份验证是使用 Firebase 完成的。
MainActivity 是登录活动。在这里,用户可以选择登录或以访客身份继续(无需用户帐户)。如果他们登录,他们可以在关闭应用程序时选择是否要保持登录状态。
我希望,当他们继续作为访客或检查保持登录复选框时,他们会直接导航到下一个活动,并且 LoginActivity 会被 finish() 销毁,因此下一个活动是第一个活动后台。因此,这就是 Activity,当用户按下 Back-Button 时,应用程序将在其中关闭。在这种情况下,我想检查用户是否应该注销。我已经这样做了:
在 MainActivity 中,我在 SharedPreferences 中保存了一个布尔变量:
override fun login(email: String, password: String, stayLoggedIn: Boolean) {
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this) { task ->
if(task.isSuccessful) {
getDefaultSharedPreferences(this).edit().putBoolean(getString(R.string.continue_as_guest), false).apply()
getDefaultSharedPreferences(this).edit().putBoolean(getString(R.string.stay_logged_in), stayLoggedIn).apply()
startActivity(Intent(this, NavigationActivity::class.java))
finish()
} else {
//show message
}
}
}
然后,在下一个 Activity 中,现在是 backstack 中的第一个 Activity,我重写了 onDestroy 方法:
override fun onDestroy() {
super.onDestroy()
val stayLoggedIn = getDefaultSharedPreferences(this).getBoolean(getString(R.string.stay_logged_in), false)
if(!stayLoggedIn && mAuth.currentUser != null) {
mAuth.signOut()
}
}
当用户通过后退按钮以通常的方式关闭应用程序时,这非常有用。但是当应用程序以其他方式被终止时(手机因电池电量耗尽或应用程序通过主页按钮终止),onDestroy-Method 不会被调用,这意味着用户不会退出。
我读到你不能在应用程序被杀死的过程中处理那些没有调用 onDestroy 方法的情况,所以你必须在应用程序再次打开时处理它。但我不知道它是如何工作的。希望有人可以帮助我。
【问题讨论】:
-
您应该能够在
SharedPreferences.Editor的同一个实例上调用多个put*方法 - 例如:sharedPrefs.edit().putBoolean("key_goes_here", true).putBoolean("another_key", false),而不是获取单独的编辑器实例。
标签: android firebase kotlin firebase-authentication