有没有办法从 Firebase 数据库身份验证和 Firebase 数据库 UID 中删除匿名用户?

Tre*_*lie 6 android firebase firebase-authentication firebase-realtime-database

目前发生的情况:onBackPressed当用户使用和以匿名用户身份注销时case R.id.logoutMenuOption,他们的 Firebase Auth 和 Firebase 数据库 Uid 会被正确删除。例外的是,当用户滑动关闭应用程序时,onDestroy()会调用该方法,但其 Firebase Auth 和 Firebase 数据库 Uid 仍保留在数据库中。onDestroy()当用户滑动关闭应用程序时 我使用。

我需要发生的事情:当用户滑动关闭应用程序时,将调用onDestroy()removeAnonymousVendorUser()方法来从实时数据库中删除匿名用户身份验证及其用户 Uid。

到目前为止我所做的:我创建了该removeAnonymousVendorUser()方法并将其放置在该onDestroy()方法中。我还将展示它如何在我的其他注销方法中使用,并且在这些方法中它确实有效,但它不适用于onDestroy()

  @Override
protected void onDestroy() {
    super.onDestroy();
    //TODO: Figure out how to delete UID and user when they sign out
    removeAnonymousVendorUser();
    FirebaseAuth.getInstance().signOut();
    finish();
}
Run Code Online (Sandbox Code Playgroud)

删除匿名用户 Firebase 身份验证数据和 Firebase 数据库数据的方法:

  private void removeAnonymousVendorUser() {

    if (FirebaseAuth.getInstance().getCurrentUser() != null) {

        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

        user.delete();
    }

    DatabaseReference vendorIdReference = FirebaseDatabase.getInstance().getReference("Vendor");
    vendorIdReference.removeValue();

}
Run Code Online (Sandbox Code Playgroud)

用户单击“注销”菜单选项按钮时的注销方法:

           //Logout Menu Option Button
              @Override
            public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {

             // If Logout Button is clicked within 2 Seconds log user out
            case R.id.logoutMenuOption:
            if (logoutAppPressAgain + 2000 > System.currentTimeMillis()) {
                logoutToast.cancel();

                removeAnonymousVendorUser();
                FirebaseAuth.getInstance().signOut();
                removeAnonymousVendorUser();
                Intent logoutIntent = new Intent(VendorMapsActivity.this, WelcomeActivity.class);
                startActivity(logoutIntent);
                finish();
            } else {
                logoutToast = Toast.makeText(getBaseContext(), R.string.press_button_again_to_logout, Toast.LENGTH_SHORT);
                logoutToast.show();
            }

            logoutAppPressAgain = System.currentTimeMillis();
    }

    return super.onOptionsItemSelected(item);
     }
Run Code Online (Sandbox Code Playgroud)

用户按两次返回时注销方法:

        public void onBackPressed() {
    if (exitAppPressBack + 2000 > System.currentTimeMillis()) {
        exitAppBackToast.cancel();
        super.onBackPressed();

        removeAnonymousVendorUser();
        FirebaseAuth.getInstance().signOut();
        Intent logoutIntent = new Intent(VendorMapsActivity.this, 
        WelcomeActivity.class);
        startActivity(logoutIntent);
        finish();
        } else {
        exitAppBackToast = Toast.makeText(getBaseContext(), 
        R.string.press_back_one_more_time_to_exit, Toast.LENGTH_SHORT);
        exitAppBackToast.show();
        }

    exitAppPressBack = System.currentTimeMillis();
}
Run Code Online (Sandbox Code Playgroud)

这是在匿名登录时创建用户的代码:

     public void sellAnonymously(View view) {

    circProgressBar.setVisibility(View.VISIBLE);

    firebaseAuth.signInAnonymously().addOnSuccessListener(VendorLoginActivity.this, new OnSuccessListener<AuthResult>() {
        @Override
        public void onSuccess(AuthResult authResult) {

            Toast.makeText(VendorLoginActivity.this, "Success!  Enjoy the app!", Toast.LENGTH_LONG).show();
            String client_id = firebaseAuth.getCurrentUser().getUid();
            DatabaseReference client_db = FirebaseDatabase.getInstance().getReference().child("Vendor").child(client_id);
            client_db.setValue(true);
            circProgressBar.setVisibility(View.INVISIBLE);

            // Sends anonymous user to VendorMapsActivity
            startActivity(new Intent(VendorLoginActivity.this, VendorMapsActivity.class));

        }
    });
}
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 8

要删除用户,请按照有关删除用户的user.delete()Firebase 文档中所示进行调用:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

user.delete()
Run Code Online (Sandbox Code Playgroud)

要从数据库中删除当前用户的数据,请调用removeValue()对该数据的引用,如有关删除数据的 Firebase 文档中所示:

ref.removeValue()
Run Code Online (Sandbox Code Playgroud)

您可以使用 Cloud Functions for Firebase 将两者结合起来。在这种情况下,您可以通过从数据库中删除用户的数据来响应被删除的用户。有关此问题的简短说明,请参阅有关删除用户时触发 Cloud Functions的 Firebase 文档:

exports.deleteUserData = functions.auth.user().onDelete((user) => {
  // ...
})
Run Code Online (Sandbox Code Playgroud)