android - 用户 ID 的 Firebase 远程配置条件

标签 android firebase firebase-authentication firebase-remote-config

我将 Firebase 集成到我的 Android 项目中,以便为不同的应用程序用户获取不同的参数值。 我做了以下事情:

  1. 在我的 Firebase 项目中设置用户 enter image description here
  2. 创建受众以匹配用户:enter image description here UID 为AAAAAAA...,相应地BBBBBB...
  3. 在远程配置部分创建了一个参数:enter image description here
  4. 为此参数添加条件:enter image description here并为条件设置值:enter image description here
  5. 输入以下代码以从应用程序中登录用户:

    Task resultTask =   
        firebaseAuth.signInWithEmailAndPassword("test1@gmail.com", password);
  6. 确保登录成功。
  7. 然后我尝试获取远程配置参数:
    firebaseRemoteConfig.fetch() 
                    .addOnCompleteListener(new OnCompleteListener() {
                        @Override
                        public void onComplete(@NonNull Task task) {
                            if (task.isSuccessful()) {
                                // Once the config is successfully fetched it must be activated before newly fetched
                                // values are returned.
                                firebaseRemoteConfig.activateFetched();
                                Log.d(TAG, firebaseRemoteConfig.getString("MyParameter"));
                            } else {
                                Log.d(TAG, "fetch firebase remote config failed. Reason = " + task.getException());
                            }
                        }
                    });

结果是我总是得到默认值:DefaultValue

我做错了什么?我错过了什么?

最佳答案

经过一番调查后,我发现 Firebase Analytics 和 Firebase Authentication 是两个不同的模块,它们不会自动互连。

使用 Firebase 身份验证并没有像我预期的那样自动将用户识别为特定受众的一部分。

我需要告诉 Firebase Analytics,当前用户具有特定的用户 ID,因此它可以将其与相关受众相匹配。我在登录 onComplete 回调中添加了以下代码:

Task<AuthResult> resultTask =   
    firebaseAuth.signInWithEmailAndPassword("test1@gmail.com", password); 
resultTask.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            // Task completed successfully
            if (task.isSuccessful()) {
               firebaseAnalytics.setUserId(task.getResult().getUser().getUid());
            } else {
                Log.d(TAG, "signInWithEmail firebase failed");
            }
        }
    });

重要的一行是:

firebaseAnalytics.setUserId(task.getResult().getUser().getUid());

一些注意事项:

  1. 一旦用户进入某个受众群体,就永远无法退出该受众群体,这意味着,如果您在同一设备上更改应用中的用户,您将获得与 2 个受众群体的匹配:新受众群体和之前的受众群体.
  2. 在进行测试时,我不得不非常频繁地获取远程配置参数。尽管我将缓存过期时间设置为 0,但我遇到了一个不同的问题:Firebase 服务器有时会响应节流异常。因此,在测试时请确保不要限制服务器,否则您将不得不在两次测试之间等待很长时间。
  3. 我不确定,但 Firebase Analytics 使用与使用 Firebase 身份验证定义的 ID 不同的 ID 来跟踪应用程序用户。我认为,这就是为什么如果您在同一设备的 Firebase 身份验证中使用不同的用户 ID 登录,您仍然与为之前的 Firebase 用户 ID 设置的受众相匹配。

关于android - 用户 ID 的 Firebase 远程配置条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39014005/

相关文章:

android - 字符串数组内的字符串数组

swift - (GCM_SENDER_ID 不得为 nil 或空)每隔几天都会出现与 firebase 相同的错误

javascript - 注册帐户后如何将用户 uid 存储到 firebase 数据库?

android - 如何在登录后将新用户数据保存到 Firebase 实时数据库

android - 弹出窗口(使用 PopupWindow 或 Dialog)无缘无故填满屏幕宽度

java - Android/google 无特定原因的 ANR 崩溃

android - 以毫秒为单位的时间警报

java - 在 firebase 实时数据库中保存子类

firebase 身份验证/无效的自定义 token

android - 具有真实电话号码的 Firebase PhoneAuth 无法使用,但白名单号码可以使用 - Android