6

我将Firebase集成到我的Android项目中,为不同的应用程序用户获取不同的参数值。 我做了以下内容:在我的火力地堡项目enter image description here Firebase远程配置条件由userId

  • 创建观众

    1. 设置用户相匹配的用户:enter image description here的UID是AAAAAAA ...,并BBBBBBB ...因此。
    2. 创建在远程配置部分中的参数:enter image description here
    3. 此参数添加条件:enter image description here和设定值的条件:enter image description here
    4. 进入下面的代码从所述应用在用户登入:

      Task resultTask = 
          firebaseAuth.signInWithEmailAndPassword("[email protected]", password);
    5. 确保登录成功。
    6. 然后我试图获取远程配置参数:
      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()); 
               } 
              } 
             });

    的结果是,我总是得到默认值:默认值

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

  • 回答

    6

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

    如我所料,使用Firebase身份验证并未自动将用户识别为特定受众群体的一部分。

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

    Task<AuthResult> resultTask = 
        firebaseAuth.signInWithEmailAndPassword("[email protected]", 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使用不同的ID跟踪应用用户,然后使用Firebase身份验证定义的用户。我认为,这就是为什么如果您使用同一设备的Firebase身份验证中的其他用户标识登录,那么您仍然与为之前的Firebase用户标识设置的受众群体匹配。
    +0

    用户是否必须登录进行分析以识别其唯一ID? –

    +1

    @IgorGanapolsky:是的,需要登录,因此Firebase会记录唯一ID。 – noti