教程:使用 AdMob、Google Analytics(分析)和 Firebase 优化混合变现模式

第 3 步:设置 Firebase Remote Config 以展示特定的广告体验


简介:使用 AdMobGoogle Analytics 和 Firebase 优化混合变现
第 1 步:使用 AdMob 创建新的广告单元以进行展示
第 2 步: 设置 Google Analytics

第 3 步: 设置 Firebase Remote Config 以展示特定的广告体验


在上一步结束时,您了解了 Google Analytics 受众群体。在此步骤中,您将创建一个利用“购买者”受众群体的 Remote Config 布尔值控制参数(称为 ad_control_switch)。然后,您将向应用代码添加逻辑,以便应用根据该参数的值显示相应的内容。

Firebase 控制台中设置 Remote Config 参数和条件

  1. Firebase 控制台中,打开您的 Firebase 项目。

  2. 在左侧窗格中,展开互动部分,然后选择远程配置

  3. 点击创建配置(如果您之前使用过 Remote Config,则点击添加参数)。

  4. 创建参数面板中,完成以下步骤:

    1. 参数名称字段中,输入 ad_control_switch

    2. Data type 下拉菜单中,选择 Boolean

    3. 点击新建,然后选择新建条件

  5. 定义新条件对话框中,完成以下步骤:

    1. 名称字段中,输入 Purchasers Group(或任何其他易于识别的条件名称)。

    2. 如果...则应用下拉菜单中,选择用户受众群体

    3. 选择受众群体下拉菜单中,选择买家

    4. 点击 Save Condition

  6. 返回创建参数面板,完成以下步骤:

    1. 对于“买方群组”的,请选择 false

    2. 默认值中,选择 true

  7. 点击保存,然后点击发布更改

此配置将检查用户是否属于“购买者”受众群体(即付费用户):

  • 如果用户属于“购买者”受众群体,则 Remote Config 将针对 ad_control_switch 参数返回 false 的值。

  • 如果用户属于“买家”受众群体,则 Remote Config 将针对 ad_control_switch 参数返回 true 的值。

在以下步骤中,您将在应用中实现 Remote Config 来处理这些参数值。

Remote Config SDK 添加到您的应用

在应用代码中使用 Remote Config 之前,请将 Remote Config SDK 添加到应用的代码库中。请注意,您的应用应该已经包含本教程前面步骤中介绍的 Google Mobile Ads (AdMob) SDK 和 Google Analytics for Firebase SDK。

Swift

在您的 Podfile 中添加并安装 Remote Config pod:

pod 'Firebase/RemoteConfig'

Android

Remote Config 库依赖项添加到 build.gradle 文件中:

implementation 'com.google.firebase:firebase-config:22.0.1'

Flutter

从 Flutter 项目的根目录运行以下命令,安装 Remote Config 插件:

flutter pub add firebase_remote_config

Unity

下载并安装最新的 Firebase Unity SDK,然后将 Remote Config 软件包添加到您的项目中:
FirebaseRemoteConfig.unitypackage

配置 Remote Config 实例

为了让应用能够使用 Remote Config 参数值,请配置 Remote Config 实例,使其能够为客户端应用实例提取新值。

在此示例中,Remote Config 配置为每小时检查一次新参数值。

Swift

remoteConfig = RemoteConfig.remoteConfig()
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 3600
remoteConfig.configSettings = settings

Kotlin

remoteConfig = Firebase.remoteConfig
val configSettings = remoteConfigSettings {
    minimumFetchIntervalInSeconds = 3600
}
remoteConfig.setConfigSettingsAsync(configSettings)

Java

mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
        .setMinimumFetchIntervalInSeconds(3600)
        .build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);

Flutter

remoteConfig = FirebaseRemoteConfig.instance;
  final configSettings = FirebaseRemoteConfigSettings(
    minimumFetchInterval: Duration(hours: 1),
  );
  await remoteConfig.setConfigSettings(configSettings);

  // Use the `onConfigUpdated` callback to listen for changes to the config settings.
  remoteConfig.onConfigUpdated.listen((_) {
    print('Config settings confirmed');
  });

Unity

var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
var configSettings = new ConfigSettings {
  MinimumFetchInternalInMilliseconds =
        (ulong)(new TimeSpan(1, 0, 0).TotalMilliseconds)
};
remoteConfig.SetConfigSettingsAsync(configSettings)
        .ContinueWithOnMainThread(task => {
          Debug.Log("Config settings confirmed");
}

提取并激活 Remote Config

提取并激活 Remote Config 参数,使其可以开始使用新参数值。

您需要在应用的加载阶段尽早发出此调用,因为此调用是异步执行的,并且您需要预取 Remote Config 值,以便应用知道是否要显示广告。

Swift

remoteConfig.fetch() { (status, error) -> Void in
  if status == .success {
    print("Config fetched!")
    self.remoteConfig.activate() { (changed, error) in
      // ...
    }
  } else {
    print("Config not fetched")
    print("Error: \(error?.localizedDescription ?? "No error available.")")
  }
  self.loadAdUnit()
}

Kotlin

remoteConfig.fetchAndActivate()
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                val updated = task.result
                Log.d(TAG, "Config params updated: $updated")
            } else {
                Log.d(TAG, "Config params failed to update")
            }
            loadAdUnit()
        }

Java

mFirebaseRemoteConfig.fetchAndActivate()
        .addOnCompleteListener(this, new OnCompleteListener<Boolean>() {
            @Override
            public void onComplete(@NonNull Task<Boolean> task) {
                if (task.isSuccessful()) {
                    boolean updated = task.getResult();
                    Log.d(TAG, "Config params updated: " + updated);
                } else {
                    Log.d(TAG, "Config params failed to update");
                }
                loadAdUnit();
            }
        });

Flutter

remoteConfig = FirebaseRemoteConfig.instance;

// Fetch and activate the latest Remote Config values.
final updated = await remoteConfig.fetchAndActivate();

// Check if the config params were updated successfully.
if (updated) {
  print('Config params updated');
} else {
  print('Config params failed to update');
}

// Load the ad unit.
_loadAdUnit();

Unity

remoteConfig.FetchAndActivateAsync().ContinueWithOnMainThread(task => {
  if (task.IsFaulted) {
    Debug.LogWarning("Config params failed to update");
  } else {
    Debug.Log("Config params updated: " + task.Result);
  }
  LoadAdUnit();
});

现在,您的应用已配置为处理您在此步骤前面创建的 Remote Config 参数。

使用 Remote Config 参数值

loadAdUnit() 函数中使用预取的 Remote Config 值,以确定应用实例应执行以下操作之一:

  • ad_control_switch 参数值解析为 true:显示插页式广告(因为用户是非付费用户)。

  • ad_control_switch 参数值解析为 false:不显示广告(因为用户是付费用户)。

Swift

private func loadAdUnit() {
  let showAds = remoteConfig["ad_control_switch"].boolValue

  if showAds {
    // Load interstitial ad (implemented ad unit)
    // per AdMob instructions (the first step of this tutorial).
  } else {
    // Don't show ads.
  }
}

Kotlin

private fun loadAdUnit() {
  var showAds = remoteConfig.getBoolean(ad_control_switch)

  if (showAds) {
      // Load interstitial ad (implemented ad unit)
      // per AdMob instructions (the first step of this tutorial).
    } else {
      // Don't show ads.
    }
}

Java

private void loadAdUnit() {
    boolean showAds =
      mFirebaseRemoteConfig.getBoolean(ad_control_switch);

    if (showAds) {
      // Load interstitial ad (implemented ad unit)
      // per AdMob instructions (the first step of this tutorial).
    } else {
      // Don't show ads.
    }
}

Flutter

void _loadAdUnit() {
  bool showAds = remoteConfig.getBool(ad_control_switch);

  if (showAds) {
    // Load interstitial ad (implemented ad unit)
    // per AdMob instructions (the first step of this tutorial).
  } else {
    // Don't show ads.
  }
}

Unity

void LoadAdUnit() {
  bool showAds =
      remoteConfig.GetValue("ad_control_switch").BooleanValue;

  if (showAds) {
    // Load interstitial ad (implemented ad unit)
    // per AdMob instructions (the first step of this tutorial).
  } else {
    // Don't show ads.
  }
}

发布应用

由于用于确定是否展示广告的逻辑位于代码库中,因此您需要发布包含此逻辑的新版应用。

如果您按照本教程中的步骤操作,您的应用应该会立即开始向用户提供量身定制的应用内广告体验。您可以在 AdMob 账号和 Google Analytics 信息中心(Firebase 控制台或 Google Analytics [分析] 界面)中监控广告收入。


大功告成!您已完成使用 AdMob、Google Analytics 和 Firebase 优化混合变现的教程。




第 2 步:设置 Google Analytics