使用 Firebase 预测进行获利策略实验

利用 Firebase 预测,您可以根据预测的用户行为轻松为应用用户提供不同的体验。例如,您可以为将来可能进行应用内购买的用户提供无广告体验,向其他所有人展示广告。不过,在全面部署此获利策略之前,请确保此类策略不会对现有用户的留存产生不利影响。

本指南将向您展示如何使用 Firebase 预测和 Firebase A/B 测试达成两个目标:针对预计不会进行应用内购买的用户启用基于广告的获利策略,以及验证此新策略的有效性。

准备工作

在开始根据预测来确定应用的广告策略之前,您必须在应用中使用 Google Analytics for Firebase。具体来讲,您必须执行以下操作:

  • Firebase 控制台中启用 Analytics 数据共享
  • 明确记录系统未自动收集的支出相关事件,如 ecommerce_purchase(对于由 App Store 和 Play 商店处理的应用内购买,Firebase 会自动记录 in_app_purchase 事件)。您通常还应记录与您的应用相关的任何其他事件,尽可能收集更多可用数据以用于分类。
  • 提供足够的事件数据量,以便 Firebase 做出有意义的预测。通常情况下,10000 名活跃用户(每月)、500 个正例和 500 个负例即可为 Firebase 预测提供足够的数据。

开始预测用户支出

首先,设置您的 Firebase 项目以开始预测用户的支出。

  1. Firebase 控制台中,打开 Predictions(预测)部分。如果您尚未同意 Firebase 预测服务条款,请确认同意。

    在您同意服务条款后,系统就会为您的项目启用预测功能。Firebase 控制台的“预测”部分允许您创建自定义预测;不过,对于支出预测,您可以利用内置的 spendnot_spend 预测,这两个预测均基于 Analytics 事件的汇总数据。在您启用 Firebase 预测大约 24 小时并记录了一些基准支出事件后,才可以使用这些预测。

  2. 添加与 not_spend 预测相对应的远程配置参数:

    1. 在 Firebase 控制台中,点击 Remote Config(远程配置)。
    2. 添加一个新参数,比如命名为 will_not_spend。为此参数创建一个在预测结果为 not_spend 时应用的新条件。然后,将新条件的值设为 true,并将默认值设为 false

创建获利策略实验

接下来,创建一项 A/B 测试实验来测试三种获利策略:

  • 始终不展示广告(对照组)
  • 始终展示广告
  • 仅向预计不会进行应用内支出的用户展示广告

创建实验的步骤如下:

  1. Firebase 控制台中,打开 Remote Config(远程配置)部分。
  2. 点击 A/B testing(A/B 测试)按钮。
  3. 创建新实验:

    1. 从列表中选择您的应用,并指定您希望纳入实验的用户数量。您还可以选择从实验中排除某些用户类别,例如支出较高的用户。

    2. 定义三个变体:每种获利策略各一个。

      然后,创建一个 ads_policy 参数,并为对照组变体指定值 ads_never,为第二个变体指定值 ads_always,为基于预测的变体指定值 ads_nonspenders。您的应用将使用此参数确定是否向特定用户展示广告。

    3. 从目标指标列表中选择留存时间(2-3 天),然后选择要跟踪的其他指标,例如购买交易带来的收入、应用移除次数和广告点击次数。

      最后,在高级选项部分中,选择您在应用中明确记录的 ads_policy_set Analytics 事件。请注意,只有在记录过一次之后,此事件才会显示在列表中。

在应用中实施获利策略

您已经在 Firebase 控制台中设置了预测和实验,现在需要实施每个实验变体对应的获利策略。

例如,使用 AdMob 来展示广告:

  1. 导入 Analytics SDK、Remote Config SDK 和 AdMob SDK:

    iOS (Swift)

    将这些 SDK 添加到您的 Podfile 中:

    pod 'Firebase/Core'
    pod 'Firebase/RemoteConfig'
    pod 'Firebase/AdMob'
    

    然后,导入这些 SDK:

    import Firebase
    

    Android

    implementation 'com.google.firebase:firebase-core:16.0.4'
    implementation 'com.google.firebase:firebase-config:16.0.1'
    implementation 'com.google.firebase:firebase-ads:17.0.0'
    
  2. 使用远程配置功能检索适合当前用户的广告政策。

    iOS (Swift)

    self.remoteConfig = RemoteConfig.remoteConfig()
    self.remoteConfig.setDefaults(["ads_policy": "ads_never"])
    
    // ...
    
    self.remoteConfig.fetch() { (status, error) -> Void in
        if status == .success {
          self.remoteConfig.activateFetched()
        }
    
        // Act on the retrieved parameters
    
        // Show ads based on the ad policy retrieved with Remote Config
        self.executeAdsPolicy()
    
        // ...
    }
    

    Android

    final FirebaseRemoteConfig config = FirebaseRemoteConfig.getInstance();
    
    Map remoteConfigDefaults = new HashMap<String, Object>();
    remoteConfigDefaults.put("ads_policy", "ads_never");
    config.setDefaults(remoteConfigDefaults);
    
    // ...
    
    config.fetch(cacheExpiration)
            .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        config.activateFetched();
                    }
    
                    // Act on the retrieved parameters
    
                    // Show ads based on the ad policy retrieved with Remote Config
                    executeAdsPolicy();
    
                    // ...
                }
            });
    
  3. 最后,根据您检索到的广告政策展示或隐藏广告。此时还要记录 ads_policy_set 事件以指明可以将用户视为正在参加实验。

    iOS (Swift)

    func executeAdsPolicy() {
        let adsPolicy = self.remoteConfig["ads_policy"].stringValue
        let willNotSpend = self.remoteConfig["will_not_spend"].booleanValue
    
        if adsPolicy == "ads_always"
                || ((adsPolicy == "ads_nonspenders") && willNotSpend) {
            bannerView.load(GADRequest())
            self.bannerView.isHidden = false
        } else {
            self.bannerView.isHidden = true
        }
    
        Analytics.logEvent("ads_policy_set", parameters: nil)
    }
    

    Android

    FirebaseRemoteConfig config = FirebaseRemoteConfig.getInstance();
    String adPolicy = config.getString("ads_policy");
    boolean will_not_spend = config.getBoolean("will_not_spend");
    AdView mAdView = (AdView) findViewById(R.id.adView);
    
    if (adPolicy.equals("ads_always") ||
            (adPolicy.equals("ads_nonspenders") && will_not_spend)) {
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
        mAdView.setVisibility(View.VISIBLE);
    } else {
        mAdView.setVisibility(View.GONE);
    }
    
    FirebaseAnalytics.getInstance(this).logEvent("ads_policy_set", new Bundle());
    

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面