【问题标题】:How to correctly use Firebase-Analytcs for A/B testing?如何正确使用 Firebase-Analytics 进行 A/B 测试?
【发布时间】:2016-06-22 07:36:15
【问题描述】:

背景

Google 发布了一个全新的 API 和服务用于 A/B 测试,使用 Firebase AnalyticsFirebase Remote Config

问题

虽然我确实出于其他目的(herehere)尝试了该服务,但我还需要将其用于 A/B 测试。

问题是,我不知道如何让它显示分析实验变体结果所需的信息。

只是没有显示(在this website),或者我看的地方不对:

我尝试过的

为了尝试一个实验,我按照教程说的做了,包括:

  1. 代码中的初始化与the samples中的大致相同:

    boolean isDebug = AppComponentsHelper.isInDebugFlavour(context);
    mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder().setDeveloperModeEnabled(isDebug).build();
    mFirebaseRemoteConfig.setConfigSettings(configSettings);
    final HashMap<String, Object> defaults = new HashMap<>();
    for (ExperimentType experimentType : ExperimentType.values())
        defaults.put(experimentType.experimentId, experimentType.defaultValues);
    mFirebaseRemoteConfig.setDefaults(defaults);
    
    long cacheExpiration = isDebug ? 0 : TimeUnit.HOURS.toSeconds(1);
    mFirebaseRemoteConfig.fetch(cacheExpiration)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        mFirebaseRemoteConfig.activateFetched();
                        final FirebaseAnalytics firebaseAnalytics = FirebaseAnalytics.getInstance(context);
                        for (ExperimentType experimentType : ExperimentType.values()) {
                            String experimentVariant = FirebaseRemoteConfig.getInstance().getString(experimentType.experimentId);
                            firebaseAnalytics.setUserProperty(experimentType.userProperty, experimentVariant);
                        }
                    }
                }
            });
    

    这是 ExperimentType 的枚举:

    public enum ExperimentType {
      PURCHASES_OFFERED_PRODUCTS("purchases_offered_products_1", "Experiment1", new Gson().toJson(new String[]{"something", "something2"}));
    
      public final String experimentId,defaultValues,userProperty;
    
      ExperimentType(final String experimentId, final String userProperty, final String defaultValues) {
          this.experimentId = experimentId;
          this.defaultValues = defaultValues;
          this.userProperty = userProperty;
      }
    

    }

  2. 为每个实验创建一个新的用户属性(目前只有一个)。

  3. 在远程配置屏幕中,添加 2 个变体(默认和条件)。

  4. 在加载远程配置时,调用 setUserProperty(参见 #0),如 the tutorial 所示,指向当前变体的参数值。

  5. 为了跟踪事件,我调用了:

    firebaseAnalytics.logEvent(eventName, new Bundle())
    

    其中一个调用(目前只有一个),您可能已经猜到了,当 eventName 为 "subscription_premium_purchase" 时。

  6. 在运行应用程序时,我让它同时使用了两种变体(当然,每个全新安装都使用一个变体)。

但正如我所展示的,例如,我无法找到一种方法来确定哪个变体导致事件被调用的次数多于另一个。

问题

  1. 这里可能缺少什么?我做错了什么?为什么我看不到我使用过的任何变体?

  2. 无论如何,用户属性有什么用?它是否用作远程配置和分析之间的“粘合剂”?我应该在那里的文本框中输入什么(它说“按'输入'申请”)?它不应该显示各种变体吗?其他过滤器项目有“类型”,但这个没有。没有什么可以从用户属性中选择。即使在创建用户属性时,我也看不到它的任何设置(描述除外)。我什至不能删除它。无法查看我在图表中创建的条件。

  3. 我是否需要使用 BigQuery?

  4. 我注意到“获取”函数有时根本无法调用侦听器。怎么会这样?我可以为此添加超时吗?

【问题讨论】:

    标签: android firebase ab-testing firebase-analytics


    【解决方案1】:

    我认为这里的主要混淆与您在选择“实验”用户属性时没有将您的值视为自动完成建议这一事实有关。这是一个正在考虑的功能。但是,如果您只输入实验值,它会将其作为过滤器应用到您的报告中,这样您就可以看到用户在一个变体中记录了多少“subscription_premium_purchase”事件。

    【讨论】:

    • 怎么样?如何按变体过滤?我如何查看每个变体有多少事件?我尝试输入其中一个值,并显示一个事件,但是当我尝试另一个时,它没有显示任何事件(即使应该有)。我现在将尝试更简单的用户属性值,它只在代码中有意义,而不是我以前使用的。也许有些字符放在那里有问题(或者太长)。太糟糕了,我无法为每个添加描述。另外,你能说说为什么它有时会卡在“fetch”命令上吗?我如何提供有关此服务的反馈?
    • 我不明白为什么使用这项服务必须如此复杂。它应该更容易:创建实验(带有名称,描述),为其创建变体(每个都有名称,描述,条件,变量)。就是这样。在(图表的)分析屏幕中,它应该自动显示每个实验、变体和事件(每个变体)。能够配置每个实验应该关注哪个事件甚至会更酷,因此一个简单的图表将准确地包含我们需要确定哪个变体是最好的。
    • 目前,您必须在 Analytics 的用户属性过滤器中手动输入变量值。我们正在考虑如何最好地自动化所有这些,但与此同时,这需要人工。
    • 您能否考虑在 Firebase 上创建一个 A/B 测试类别,并使其尽可能易于使用(就像我描述的过程一样)?有这么多步骤以这种奇怪的方式工作是非常烦人的。结合使用 Analytics 和 RemoteConfigs 进行 A/B 测试似乎是一种解决方法。合并看起来不自然,特征的数量和清晰度也缺乏。但现在最重要的是,在某些设备(不是全部)上,“获取”命令被卡住了(没有调用它的回调)。当它失败时,我什至不能有超时或回调。这是为什么呢?
    • 我还注意到它没有显示男性/女性信息。怎么会?它从何而来?谷歌+?
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多