Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 按用户ID列出的Firebase远程配置条件_Android_Firebase_Firebase Authentication_Firebase Remote Config - Fatal编程技术网

Android 按用户ID列出的Firebase远程配置条件

Android 按用户ID列出的Firebase远程配置条件,android,firebase,firebase-authentication,firebase-remote-config,Android,Firebase,Firebase Authentication,Firebase Remote Config,我将Firebase集成到我的Android项目中,为不同的应用程序用户获得不同的参数值。 我做了以下工作: 在我的Firebase项目中设置用户 创建受众以匹配用户:UID分别为aaaaaaaaa…,BBBBBBB… 在远程配置节中创建了一个参数: 为该参数添加了条件:并为条件设置值: 输入以下代码以从应用程序登录用户: Task resultTask = firebaseAuth.signInWithEmailAndPassword("test1@gmail.com", pas

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

  • 在我的Firebase项目中设置用户
  • 创建受众以匹配用户:UID分别为aaaaaaaaa…BBBBBBB…
  • 在远程配置节中创建了一个参数:
  • 为该参数添加了条件:并为条件设置值:
  • 输入以下代码以从应用程序登录用户:

    Task resultTask = firebaseAuth.signInWithEmailAndPassword("test1@gmail.com", password); 任务结果任务= firebaseAuth.signInWithEmailAndPassword(“test1@gmail.com“,密码)
  • 确保登录成功
  • 然后我尝试获取远程配置参数:firebasemoteconfig.fetch() 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()); } } }); .addOnCompleteListener(新的OnCompleteListener(){ @凌驾 未完成的公共void(@NonNull任务){ if(task.issusccessful()){ //成功获取配置后,必须在新获取之前激活配置 //返回值。 firebaseRemoteConfig.activateFetched(); Log.d(标签,firebasemoteconfig.getString(“MyParameter”); }否则{ Log.d(标记“fetch firebase remote config failed.Reason=“+task.getException()); } } }); 结果是我总是得到默认值:DefaultValue


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

    经过一些调查,我发现Firebase分析和Firebase身份验证是两个不同的模块,它们不会自动相互连接

    如我所料,使用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");
                }
            }
        });
    
    任务结果任务=
    firebaseAuth.signInWithEmailAndPassword(“test1@gmail.com“,密码);
    resultTask.addOnCompleteListener(新的OnCompleteListener(){
    @凌驾
    未完成的公共void(@NonNull任务){
    //任务已成功完成
    if(task.issusccessful()){
    firebaseAnalytics.setUserId(task.getResult().getUser().getUid());
    }否则{
    Log.d(标记“signInWithEmail firebase失败”);
    }
    }
    });
    
    重要的一行是:firebaseAnalytics.setUserId(task.getResult().getUser().getUid())

    firebaseAnalytics.setUserId(task.getResult().getUser().getUid()); 需要注意的一些事项:

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

  • 用户是否必须登录分析才能识别其唯一ID?@IgorGanapolsky:是的,需要登录,因此Firebase会记录唯一ID。通过身份验证用户ID识别分析数据可能与电子邮件地址和人口统计数据等个人可识别数据相关联,这可能违反条款和隐私准则。现在可以创建动态用户组,因此它们不再是观众的永久居住地。