Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在每个用户firebase android中创建唯一的令牌?_Java_Firebase_Firebase Realtime Database_Firebase Authentication_Token - Fatal编程技术网

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令牌/实例ID令牌,用于标识特定用户设备上特定应用程序的安装。它不会以任何方式识别特定用户

  • 身份验证标识标识特定应用程序的特定用户。它不会以任何方式识别特定的设备

  • 这两种代币完全不同,用途也不同。请参阅Android的官方文档,了解如何使用


    用户的身份将被无限期地记住(或直到您注销)。但他们的凭据(或者更确切地说,他们的令牌是否仍然有效)每小时都会重新检查一次。

    FCM为客户端应用程序实例生成一个注册令牌,因此,您可能会为应用程序中的不同用户获得相同的令牌。每次都可以使用forceRefresh生成新令牌。每次用户登录到任何设备时注册新令牌,并将其保存在DB中,并在新登录时使用新令牌进行更新。这样,您将在每次登录时为每个用户提供一个新令牌(如果符合您的要求)


    这里有一个很好的答案来理解它是如何工作的

    我想存储令牌,而不是uid,先生。。请仔细阅读这个问题。知道了。很抱歉让我想一想我在你的代码中使用的一点,它工作得很好,并生成不同的令牌,但每次我用相同的帐户登录时。它还生成不同的标记(很高兴听到它起作用了!)是的,用户的身份将被无限期地记住(或者直到您注销)。但是他们的凭据(或者更确切地说,他们的记号是否仍然有效)每小时重新检查一次。如果你认为我的答案对你有帮助,请考虑通过点击投票箭头左侧的勾选来接受它。应该把颜色改成绿色。我会很感激的。谢谢还有一个问题,用户注销时如何删除令牌?请参见: