我正在Android上创建一个使用Firebase作为数据库的应用程序和用于推送通知的Batch。通常,当我的应用程序启动时,它会转到主页面,即登录活动。活动将使用以下命令验证用户是否仍然登录:
Firebase dbRef = new Firebase(Constants.URL_DB);
AuthData auth = dbRef.getAuth();
if (auth != null) // Proceed with a logged in user
else // Show authentication layout
我的问题是,当我从Batch收到通知时,我点击通知转到应用程序但我没有登录,因为我应该... auth == null
。我不希望我的用户每次从批处理中获取时都需要登录。我可以检测到应用程序是从通知中启动的吗?我是如何失去Firebase的身份验证的呢?
这是MainActivity的onCreate和onResume:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initiating Batch
Batch.onStart(this);
// Initiating layout
setContentView(R.layout.login);
// Setting database
Firebase.setAndroidContext(this);
// Unrelated stuff done here (Setting Views, etc)
}
@Override
protected void onResume() {
super.onResume();
// Getting login information from previous authentication.
Firebase dbRef = new Firebase(Constants.URL_DB);
AuthData auth = dbRef.getAuth();
// I added the addAuthStateListener here
if (auth != null) {
goToHomePage();
}
}
答案 0 :(得分:0)
好吧我发现了问题。当我点击通知时,我的MainActivity显然会被调用。问题是当用户成功登录时,我使用以下命令启动另一个Activity:
startActivityForResult(intent, Constants.SUCCESS);
现在,在主页上按下后退按钮时,通常会调用onActivityResult
来注销用户。否则,将调用onResume
,并且由于用户已登录,我将直接返回主页。但是:当我点击通知时,会以某种方式调用onActivityResult
(可能是因为活动堆栈被删除),并且用户在恢复活动之前就已注销了。
因此,解决方案是在主页活动的onBackPressed
中注销用户。那我就不再需要startActivityForResult
了。
// In the home page activity
@Override
public void onBackPressed() {
super.onBackPressed();
Firebase dbRef = new Firebase(Constants.URL_DB);
dbRef.unauth();
finish();
}