如何在每个用户的Firebase Android中创建唯一令牌?

时间:2018-09-17 10:07:43

标签: java firebase firebase-realtime-database firebase-authentication token

我想在用户每次登录时生成并存储令牌。我在下面尝试了我的代码,但是当我使用另一个帐户登录时,它始终会生成相同的令牌。

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();
                        }
                    }
                });
            }
        });

请帮助,谢谢..

3 个答案:

答案 0 :(得分:1)

使用以下代码行时:

String token = FirebaseInstanceId.getInstance().getToken();

您正在客户端获得Firebase实例ID令牌,也称为FCM token。您需要知道,在Firebase中有两个不同的令牌:

  1. FCM令牌/实例ID令牌,用于标识特定用户设备上特定应用程序的安装。它不能以任何方式识别特定用户。

  2. Auth ID令牌标识特定应用程序的特定用户。它不能以任何方式识别特定设备。

这两个令牌有很大不同,并且具有不同的用途。有关如何retrieve ID tokens on clients的信息,请参阅Android的官方文档。

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

答案 1 :(得分:0)

使用UUID.randomUUID().toString()

您可以阅读更多here

java docs-和此处=)

答案 2 :(得分:0)

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

这里是了解其工作原理的好答案Firebase FCM force onTokenRefresh() to be called