userId的Firebase远程配置条件

时间:2016-08-18 09:01:36

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

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

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

    Task resultTask =   
        firebaseAuth.signInWithEmailAndPassword("test1@gmail.com", password);
  7. 确保登录成功。
  8. 然后我尝试获取远程配置参数:
    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());
                            }
                        }
                    });
  9. 结果是我总是得到默认值: DefaultValue

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

1 个答案:

答案 0 :(得分:7)

经过一番调查后,我发现Firebase Analytics和Firebase身份验证是2个不同的模块,不会自动互连。

使用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设置的受众群体。