教程:使用 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. 在左侧窗格中,展开互动部分,然后选择 Remote Config

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

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

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

    2. Data type 下拉菜单中选择布尔值

    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.0'

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+KTX

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+KTX

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 创建 Deployment 清单

使用 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+KTX

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。




<ph type="x-smartling-placeholder"></ph> 第 2 步:设置 Google Analytics