Firebase注销批量推送

时间:2016-03-24 15:17:40

标签: android batch-file firebase

我正在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();
    }
}

1 个答案:

答案 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();
}