我将Firebase集成到我的
Android项目中,为不同的应用程序用户获取不同的参数值.
我做了以下事情:
我做了以下事情:
>在我的Firebase Project中设置用户
>创建了与用户匹配的受众: UID是AAAAAAA …,BBBBBBB …相应.
>在“远程配置”部分中创建了一个参数:
>为此参数添加了条件:并设置条件的值:
>输入以下代码以从应用程序登录用户:
Task resultTask = firebaseAuth.signInWithEmailAndPassword("test1@gmail.com",password);
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身份验证是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());
有些事情需要注意:
>一旦用户在观众中,它就永远不会退出观众,这意味着,如果您从同一设备更改应用中的用户,您将获得与2个观众的匹配:新观众和前一个观众.>在测试时,我不得不经常获取远程配置参数.虽然我将缓存过期设置为0,但我遇到了另一个问题:Firebase服务器在某个时候响应了限制异常.因此,虽然测试确保不要限制服务器,否则你将不得不在测试之间等待很长时间.>我不确定,但Firebase Analytics使用与使用Firebase身份验证定义的ID不同的ID来跟踪应用用户的情况.我想,这就是为什么如果您从同一设备使用Firebase身份验证中的不同用户ID登录,您仍然可以匹配为之前的Firebase用户ID设置的受众群体.