Java 如何在每个用户firebase android中创建唯一的令牌?
我想在每次用户登录时生成和存储令牌。我尝试了下面的代码,但当我使用另一个帐户登录时,它总是生成相同的令牌Java 如何在每个用户firebase android中创建唯一的令牌?,java,firebase,firebase-realtime-database,firebase-authentication,token,Java,Firebase,Firebase Realtime Database,Firebase Authentication,Token,我想在每次用户登录时生成和存储令牌。我尝试了下面的代码,但当我使用另一个帐户登录时,它总是生成相同的令牌 mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() { @Override public voi
mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
AlertDialog.dismiss();
if (!task.isSuccessful()) {
if (password.length() < 6) {
new SweetAlertDialog(LoginActivity.this, SweetAlertDialog.ERROR_TYPE)
.setTitleText("Oops...")
.setContentText("Enter minimum 6 charachters !! ")
.show();
} else {
passwordInput.setText("");
new SweetAlertDialog(LoginActivity.this, SweetAlertDialog.ERROR_TYPE)
.setTitleText("Oops...")
.setContentText("Authentication failed !!")
.show();
}
} else {
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
FirebaseUser users = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference("users/"+ users.getUid());
String token = FirebaseInstanceId.getInstance().getToken();
Log.e("tokenid",""+token);
mDatabase.child("token_id").setValue(token);
finish();
}
}
});
}
});
mAuth.signwithEmailandPassword(电子邮件,密码)。addOnCompleteListener(LoginActivity.this,newonCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
AlertDialog.disclose();
如果(!task.issusccessful()){
if(password.length()<6){
新建SweetAlertDialog(LoginActivity.this,SweetAlertDialog.ERROR\u TYPE)
.setTitleText(“噢…”)
.setContentText(“输入至少6个字符!!”)
.show();
}否则{
passwordInput.setText(“”);
新建SweetAlertDialog(LoginActivity.this,SweetAlertDialog.ERROR\u TYPE)
.setTitleText(“噢…”)
.setContentText(“身份验证失败!!”)
.show();
}
}否则{
意向意向=新意向(LoginActivity.this、MainActivity.class);
星触觉(意向);
FirebaseUser users=FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference mDatabase=FirebaseDatabase.getInstance().getReference(“users/”+users.getUid());
字符串标记=FirebaseInstanceId.getInstance().getToken();
Log.e(“令牌ID”,“令牌+令牌”);
mDatabase.child(“token_id”).setValue(token);
完成();
}
}
});
}
});
请帮助,谢谢。使用UUID.randomUUID().toString()
你可以读更多
-此处=)使用以下代码行时:
String token = FirebaseInstanceId.getInstance().getToken();
您将在客户端获得Firebase实例ID令牌,也称为FCM令牌
。您需要知道Firebase中有两种不同的令牌:
用户的身份将被无限期地记住(或直到您注销)。但他们的凭据(或者更确切地说,他们的令牌是否仍然有效)每小时都会重新检查一次。FCM为客户端应用程序实例生成一个注册令牌,因此,您可能会为应用程序中的不同用户获得相同的令牌。每次都可以使用forceRefresh生成新令牌。每次用户登录到任何设备时注册新令牌,并将其保存在DB中,并在新登录时使用新令牌进行更新。这样,您将在每次登录时为每个用户提供一个新令牌(如果符合您的要求)
这里有一个很好的答案来理解它是如何工作的我想存储令牌,而不是uid,先生。。请仔细阅读这个问题。知道了。很抱歉让我想一想我在你的代码中使用的一点,它工作得很好,并生成不同的令牌,但每次我用相同的帐户登录时。它还生成不同的标记(很高兴听到它起作用了!)是的,用户的身份将被无限期地记住(或者直到您注销)。但是他们的凭据(或者更确切地说,他们的记号是否仍然有效)每小时重新检查一次。如果你认为我的答案对你有帮助,请考虑通过点击投票箭头左侧的勾选来接受它。应该把颜色改成绿色。我会很感激的。谢谢还有一个问题,用户注销时如何删除令牌?请参见: