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)
要删除用户,请按照有关删除用户的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)
| 归档时间: |
|
| 查看次数: |
5964 次 |
| 最近记录: |