Шаг 3. Обработка значений параметров Remote Config в коде вашего приложения.
Введение: оптимизируйте частоту показа объявлений AdMob с помощью Firebase |
Шаг 1. Используйте AdMob , чтобы создать новые варианты рекламных блоков для тестирования. |
Шаг 2. Настройте A/B-тест в консоли Firebase . |
Шаг 3. Обработка значений параметров Remote Config в коде вашего приложения. |
Шаг 4. Запустите A/B-тест и просмотрите результаты теста в консоли Firebase . |
Шаг 5. Решите, стоит ли внедрять новый формат объявлений. |
В конце последнего шага вы создали параметр Remote Config ( INTERSTITIAL_AD_KEY
). На этом этапе вы добавите в код вашего приложения логику того, что ваше приложение должно отображать на основе значения этого параметра.
Добавьте необходимые SDK
Прежде чем использовать Remote Config в коде вашего приложения, добавьте SDK Remote Config и Firebase SDK для Google Analytics в файлы сборки проекта.
Быстрый
Добавьте и установите в свой подфайл следующие модули:
pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'
Цель-C
Добавьте и установите в свой подфайл следующие модули:
pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'
Андроид
Добавьте следующие зависимости библиотеки в файл build.gradle
:
implementation 'com.google.android.gms:play-services-ads:23.4.0'
implementation 'com.google.firebase:firebase-analytics:22.1.0'
implementation 'com.google.firebase:firebase-config:22.0.0'
Единство
Загрузите и установите Firebase Unity SDK, затем добавьте в свой проект следующие пакеты Unity:
-
FirebaseAnalytics.unitypackage
-
FirebaseRemoteConfig.unitypackage
Настройка экземпляра Remote Config
Чтобы использовать значения параметров Remote Config , настройте экземпляр Remote Config так, чтобы он был настроен на получение новых значений для экземпляра клиентского приложения.
В этом примере Remote Config настроен на проверку новых значений параметров один раз в час.
Быстрый
remoteConfig = RemoteConfig.remoteConfig()
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 3600
remoteConfig.configSettings = settings
Цель-C
self.remoteConfig = [FIRRemoteConfig remoteConfig];
FIRRemoteConfigSettings *remoteConfigSettings = [[FIRRemoteConfigSettings alloc] init];
remoteConfigSettings.minimumFetchInterval = 3600;
self.remoteConfig.configSettings = remoteConfigSettings;
Java
mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
.setMinimumFetchIntervalInSeconds(3600)
.build();
mFirebaseRemoteConfig.setConfigSettingsAsync(configSettings);
Kotlin+KTX
remoteConfig = Firebase.remoteConfig
val configSettings = remoteConfigSettings {
minimumFetchIntervalInSeconds = 3600
}
remoteConfig.setConfigSettingsAsync(configSettings)
Единство
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 , чтобы ваше приложение знало, какое объявление показывать.
Быстрый
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()
}
Цель-C
[self.remoteConfig fetchWithCompletionHandler:^(FIRRemoteConfigFetchStatus status, NSError *error) {
if (status == FIRRemoteConfigFetchStatusSuccess) {
NSLog(@"Config fetched!");
[self.remoteConfig activateWithCompletion:^(BOOL changed, NSError * _Nullable error) {
// ...
}];
} else {
NSLog(@"Config not fetched");
NSLog(@"Error %@", error.localizedDescription);
}
[self 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();
}
});
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()
}
Единство
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 , который вы создали во время A/B-теста, настроенного ранее в этом руководстве.
Используйте значение параметра Remote Config
Используйте предварительно полученное значение Remote Config в функции loadAdUnit()
, чтобы определить, какой вариант частоты показа рекламы должен показываться для этого экземпляра приложения.
Быстрый
private func loadAdUnit() {
let adUnitId = remoteConfig["INTERSTITIAL_AD_KEY"].stringValue;
let request = GADRequest()
GADInterstitialAd.load(withAdUnitID: adUnitId,
request: request,
completionHandler: { [self] ad, error in
if let error = error {
print("Failed to load: \(error.localizedDescription)")
return
}
interstitial = ad
// Register for callbacks.
}
)
}
// Register for callbacks.
Цель-C
- (void)loadAdUnit {
NSString *adUnitId =
self.remoteConfig[@"INTERSTITIAL_AD_KEY"].stringValue;
GADRequest *request = [GADRequest request];
[GADInterstitialAd loadAdWithAdUnitId:adUnitId
request:request
completionHandler:^(GADInterstitialAd *ad,
NSError *error) {
if (error) {
NSLog(@"Failed to load interstitial ad with error: %@",
[error localizedDescription]);
return;
}
self.interstitial = ad;
}];
}
Java
private void loadAdUnit() {
String adUnitId =
mFirebaseRemoteConfig.getString("INTERSTITIAL_AD_KEY");
// Load Interstitial Ad (assume adUnitId not null)
AdRequest adRequest = new AdRequest.Builder().build();
InterstitialAd.load(this, adUnitId, adRequest, new
InterstitialAdLoadCallback() {
@Override
public void onAdLoaded(@NonNull InterstitialAd intertitialAd) {
mInterstitialAd = interstitialAd;
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
mInterstitialAd = null;
}
});
}
Kotlin+KTX
private fun loadAdUnit() {
String adUnitId = remoteConfig.getString("INTERSTITIAL_AD_KEY")
var adRequest = AdRequestBuilder.Builder().build()
AdRequestBuilder.load(this, adUnitId, adRequest, object :
InterstitialAdLoadCallback() {
override fun onAdFailedToLoad(adError: LoadAdError) {
mInterstitialAd = null
}
override fun onAdLoaded(interstitialAd: InterstitialAd) {
mInterstitialAd = interstitialAd
}
})
}
Единство
void LoadAdUnit() {
// Note that you may want to encode and parse two sets of ad unit IDs for
// Android / iOS in the Unity implementation.
String adUnitId = remoteConfig.GetValue("INTERSTITIAL_AD_KEY").StringValue;
this.interstitial = new InterstitialAd(adUnitId);
}
Добавьте другие проверки значения параметра
В коде вашего приложения есть и другие области, где вам нужно будет проверить значение этого параметра Remote Config , чтобы определить, какой вариант рекламы будет загружен. Например, вы можете решить, следует ли перезагрузить объявление после того, как пользователь закончил просмотр текущего.
Вызовы выборки и активации следует выполнять в первую очередь, чтобы получить какие-либо изменения значений параметров — например, если вы решите завершить или создать новый эксперимент.
Отсюда вы всегда можете проверить значение параметра, используя следующие вызовы:
Быстрый
remoteConfig["INTERSTITIAL_AD_KEY"].stringValue
Цель-C
self.remoteConfig[@"INTERSTITIAL_AD_KEY"].stringValue;
Java
mFirebaseRemoteConfig.getString(INTERSTITIAL_AD_KEY)
Kotlin+KTX
remoteConfig.getString(INTERSTITIAL_AD_KEY)
Единство
remoteConfig.GetValue("INTERSTITIAL_AD_KEY").StringValue
Эти вызовы всегда будут возвращать одно и то же значение для экземпляра приложения в зависимости от того, было ли оно помещено в контрольную группу или в одну из новых групп вариантов объявлений, если только в консоли Firebase не были внесены какие-либо изменения, которые были получены и активированы в предыдущих вызовах.
Firebase Шаг 2. Настройте A/B-тест в консоли Шаг 4. Запустите A/B-тест и просмотрите результаты