Paso 3: Controla los valores de parámetros de Remote Config en el código de tu app
Introducción: Optimiza la frecuencia de los anuncios de AdMob con Firebase |
Paso 1: Usa AdMob a fin de crear nuevas variantes de unidad de anuncios para pruebas |
Paso 2: Configura una prueba A/B en Firebase console |
Paso 3: Controla los valores de los parámetros de Remote Config en el código de la app |
Paso 4: Comienza la prueba A/B y revisa los resultados en Firebase console |
Paso 5: Decide si vas a lanzar el nuevo formato de anuncio |
Al final del paso anterior, creaste un parámetro de Remote Config (INTERSTITIAL_AD_KEY
). Ahora, agregarás la lógica al código de tu app para determinar lo que esta debe mostrar según el valor de ese parámetro.
Agrega los SDK requeridos
Antes de usar Remote Config en el código de la aplicación, agrega el SDK de Remote Config y el SDK de Firebase para Google Analytics a los archivos de compilación de tu proyecto.
Swift
Agrega y, luego, instala los siguientes pods en tu Podfile:
pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'
Objective-C
Agrega y, luego, instala los siguientes pods en tu Podfile:
pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'
Java
Agrega las siguientes dependencias de biblioteca a tu archivo build.gradle
:
implementation 'com.google.android.gms:play-services-ads:20.6.0'
implementation 'com.google.firebase:firebase-analytics:21.0.0'
implementation 'com.google.firebase:firebase-config:21.1.0'
Kotlin+KTX
Agrega las siguientes dependencias de biblioteca a tu archivo build.gradle
:
implementation 'com.google.android.gms:play-services-ads:20.6.0'
implementation 'com.google.firebase:firebase-analytics-ktx:21.0.0'
implementation 'com.google.firebase:firebase-config-ktx:21.1.0'
Unity
Descarga y, luego, instala el SDK de Firebase Unity y agrega los siguientes paquetes de Unity a tu proyecto:
FirebaseAnalytics.unitypackage
FirebaseRemoteConfig.unitypackage
Configura una instancia de Remote Config
Para usar los valores de parámetros de Remote Config, configura la instancia de Remote Config a fin de que esté configurada para recuperar valores nuevos de la instancia de app del cliente.
En este ejemplo, Remote Config se configura para verificar si hay valores de parámetros nuevos una vez por hora.
Swift
remoteConfig = RemoteConfig.remoteConfig()
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 3600
remoteConfig.configSettings = settings
Objective-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)
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");
}
Recupera y activa Remote Config
Recupera y activa los parámetros de Remote Config para que pueda comenzar a usar los valores de parámetros nuevos.
Es recomendable que realices la llamada lo antes posible en la fase de carga de tu app, ya que la llamada es asíncrona y necesitarás el valor de Remote Config recuperado previamente para que tu app sepa qué anuncio mostrar.
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()
}
Objective-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()
}
Unity
remoteConfig.FetchAndActivateAsync().ContinueWithOnMainThread(task => {
if (task.IsFaulted) {
Debug.LogWarning("Config params failed to update");
} else {
Debug.Log("Config params updated: " + task.Result);
}
LoadAdUnit();
});
Tu app ya está lista para controlar el parámetro de Remote Config que creaste durante la prueba A/B que se configuró en un paso anterior del instructivo.
Usa el valor del parámetro de Remote Config
Usa el valor recuperado previamente de Remote Config en la función loadAdUnit()
a fin de determinar qué variante de frecuencia de anuncios se debe mostrar para esta instancia de app.
Swift
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.
Objective-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
}
})
}
Unity
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);
}
Agrega otras verificaciones para el valor del parámetro
Existen otras áreas en el código de la aplicación en las que deberás verificar el valor de este parámetro de Remote Config para determinar qué experiencia del anuncio se cargará. Por ejemplo, puedes decidir si se debe volver a cargar un anuncio después de que el usuario termine de ver el actual.
Las llamadas de recuperación y activación deben realizarse primero para obtener cualquier cambio en el valor del parámetro, por ejemplo, si decides finalizar o crear un experimento nuevo.
A partir de ahí, siempre puedes verificar el valor del parámetro mediante las siguientes llamadas:
Swift
remoteConfig["INTERSTITIAL_AD_KEY"].stringValue
Objective-C
self.remoteConfig[@"INTERSTITIAL_AD_KEY"].stringValue;
Java
mFirebaseRemoteConfig.getString(INTERSTITIAL_AD_KEY)
Kotlin+KTX
remoteConfig.getString(INTERSTITIAL_AD_KEY)
Unity
remoteConfig.GetValue("INTERSTITIAL_AD_KEY").StringValue
Estas llamadas siempre mostrarán el mismo valor para una instancia de app según si se ubicaron en el grupo de control o en uno de los grupos de variantes de anuncios nuevos, a menos que se hayan realizado cambios en Firebase console que se hayan recuperado en las llamadas anteriores.
Paso 2: Configura una prueba A/B en Firebase consolePaso 4: Inicia la prueba A/B y revisa resultados