Что происходит в настоящее время: , когда пользователь выходит из системы как анонимный пользователь, используя onBackPressed
и case R.id.logoutMenuOption
, его идентификаторы базы данных Firebase Auth и Firebase удаляются правильно.За исключением случаев, когда пользовательский свип закрывает приложение, вызывается метод onDestroy()
, но их идентификаторы базы данных Firebase Auth и Firebase все еще остаются в базе данных.Я использую 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();
}
метода, который удаляет анонимного пользователяДанные аутентификации 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();
}
Метод выхода из системы, когда пользователь нажимает кнопку опции меню выхода из системы:
//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);
}
Выход из системыметод, когда пользователь нажимает дважды:
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();
}
Это код, который создает пользователей при анонимном входе в систему:
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));
}
});
}