Tutorial: testar a adoção de novos formatos de anúncio da AdMob

Etapa 3: lidar com os valores de parâmetros da Configuração remota no código do app


Introdução: testar a nova adoção de um formato de anúncio da AdMob usando o Firebase
Etapa 1: usar a AdMob para criar uma nova variante de bloco de anúncios para teste
Etapa 2: configurar um teste A/B no Console do Firebase

Etapa 3: lidar com os valores de parâmetros da Configuração remota no código do app

Etapa 4: iniciar o teste A/B e analisar os resultados do teste no Console do Firebase
Etapa 5: decidir se vai lançar o novo formato do anúncio


No final da última etapa, você criou um parâmetro de Configuração remota (SHOW_NEW_AD_KEY). Nesta etapa, vamos adicionar a lógica ao código do seu app para o que ele vai exibir com base no valor desse parâmetro: true (mostrar o novo anúncio) versus false (não mostrar o novo anúncio).

Adicionar os SDKs necessários

Antes de usar a Configuração remota no código do seu aplicativo, adicione o SDK da Configuração remota e o SDK do Firebase para o Google Analytics aos seus arquivos de versão do projeto.

Swift

Adicione e instale os seguintes pods no seu podfile:

pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'

Objective-C

Adicione e instale os seguintes pods no seu podfile:

pod 'Google-Mobile-Ads-SDK'
pod 'Firebase/Analytics'
pod 'Firebase/RemoteConfig'

Java

Adicione as seguintes dependências de biblioteca ao seu arquivo 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

Adicione as seguintes dependências de biblioteca ao seu arquivo 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

Faça o download do SDK do Firebase para Unity e o instale. Depois adicione os seguintes pacotes do Unity ao seu projeto:

  • FirebaseAnalytics.unitypackage
  • FirebaseRemoteConfig.unitypackage

Configurar instância de Configuração remota

Para usar os valores de parâmetros da Configuração remota, configure a instância de Configuração remota para que ela seja usada para buscar novos valores para a instância do app cliente.

Neste exemplo, a Configuração remota está configurada para verificar novos valores de parâmetro uma 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");
}

Buscar e ativar a Configuração remota

Busque e ative os parâmetros da Configuração remota para que possa começar a usar os novos valores de parâmetros.

Faça essa chamada o quanto antes na fase de carregamento do app, porque ela é assíncrona e vai precisar do valor da Configuração remota pré-buscado para que o app saiba se vai exibir o anúncio.

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();
});

Seu app agora está pronto para processar o parâmetro da Configuração remota que criado durante o teste A/B que você já tinha configurado neste tutorial.

Usar o valor do parâmetro da Configuração remota

Use o valor pré-buscado da Configuração remota na função loadAdUnit() para determinar se a instância do app precisa mostrar (valor do parâmetro de true) ou não mostrar (valor do parâmetro de false) o novo bloco de anúncios intersticiais premiados.

Swift

private func loadAdUnit() {
  let showNewAdFormat = remoteConfig["users"].boolValue
  if showNewAdFormat {
      // Load Rewarded Interstitial Ad.
      // This should load your new implemented ad unit
      // as per AdMob instructions (the first step of this tutorial).
  } else {
    // Show the existing ad unit.
  }
}

Objective-C

- (void)loadAdUnit {
    BOOL showAds = self.remoteConfig[@"SHOW_NEW_AD_KEY"].boolValue;
    if (showAds) {
      // Load Rewarded Interstitial Ad.
      // This should load your new implemented ad unit
      // per AdMob instructions (the first step of this tutorial).
    } else {
      // Show the existing ad unit.
    }
}

Java

private void loadAdUnit() {
    boolean showNewAdFormat =
      mFirebaseRemoteConfig.getBoolean(SHOW_NEW_AD_KEY);

    if (showNewAdFormat) {
      // Load Rewarded Interstitial Ad.
      // This should load your new implemented ad unit
      // per AdMob instructions (the first step of this tutorial).
    } else {
      // Show the existing ad unit.
    }
}

Kotlin+KTX

private fun loadAdUnit() {
  var showNewAdFormat = remoteConfig.getBoolean(SHOW_NEW_AD_KEY)

  if (showNewAdFormat) {
      // Load Rewarded Interstitial Ad.
      // This should load your new implemented ad unit
      // per AdMob instructions (the first step of this tutorial).
    } else {
      // Show the existing ad unit.
    }
}

Unity

void LoadAdUnit() {
  bool showNewAdFormat =
      remoteConfig.GetValue("SHOW_NEW_AD_KEY").BooleanValue;

  if (showNewAdFormat) {
    // Load Rewarded Interstitial Ad (new implemented ad unit)
    // per AdMob instructions (the first step of this tutorial).
  } else {
    // Show the existing ad unit.
  }
}

Adicionar outras verificações para o valor do parâmetro

Há outras áreas no seu código do aplicativo onde vai ser necessário verificar o valor do parâmetro da Configuração remota para determinar qual experiência do anúncio vai ser carregada. Por exemplo, é possível decidir se quer recarregar um anúncio depois que o usuário tiver terminado de visualizar o atual.

As chamadas de busca e ativação precisam ser feitas primeiro para que as alterações de valor dos parâmetros sejam recebidas, por exemplo, se você decidir encerrar ou criar um novo experimento.

Depois disso, você sempre vai poder verificar o valor do parâmetro usando as seguintes chamadas:

Swift

remoteConfig["showNewAdKey"].boolValue

Objective-C

self.remoteConfig[@"SHOW_NEW_AD_KEY"].boolValue;

Java

mFirebaseRemoteConfig.getBoolean(SHOW_NEW_AD_KEY)

Kotlin+KTX

remoteConfig.getBoolean(SHOW_NEW_AD_KEY)

Unity

remoteConfig.GetValue("SHOW_NEW_AD_KEY").BooleanValue

Essas chamadas sempre vão retornar o mesmo valor para uma instância de app, dependendo se ela tiver sido colocada no grupo de controle ou no novo grupo de variantes do anúncio, a menos que alguma mudança tenha sido feita no Console do Firebase que tenha sido buscada e ativada nas chamadas anteriores.




Etapa 2: configurar um teste A/B no Console do Firebase Etapa 4: iniciar o Teste A/B e revisar os resultados