【问题标题】:How to create unique token, in every users firebase android?如何在每个用户 firebase android 中创建唯一令牌?
【发布时间】:2018-09-17 10:07:42
【问题描述】:

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

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

请帮忙,谢谢..

【问题讨论】:

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


    【解决方案1】:

    当使用以下代码行时:

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

    您将在客户端获取 Firebase 实例 ID 令牌,也称为 FCM token。您需要知道在 Firebase 中有两种不同的标记:

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

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

    这两个令牌完全不同,用于不同的目的。有关如何retrieve ID tokens on clients,请参阅Android 官方文档。

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

    【讨论】:

    • 我正在为您的代码使用它,它运行良好并生成不同的令牌,但每次我都使用同一个帐户登录。它还会生成不同的令牌
    • 很高兴听到它成功了! :) 是的,用户的身份会被无限期地记住(或者直到您退出)。但他们的凭据(或者更确切地说,他们的令牌是否仍然有效)每小时都会重新检查一次。
    • 如果您认为我的回答对您有所帮助,请考虑通过单击左侧投票箭头下方的复选标记来接受它。应将颜色更改为绿色。我会很感激的。谢谢!
    • 还有1个问题,用户注销时如何删除token?
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      使用UUID.randomUUID().toString()

      您可以阅读更多here

      java docs - 这里 =)

      【讨论】:

      • 我要存储token,不是uid先生..请仔细阅读问题
      • 哦。知道了。对不起。让我想一想
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 2017-11-13
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      相关资源
      最近更新 更多