Tutorial: ottimizza la frequenza degli annunci AdMob

Passaggio 3: gestisci i valori dei parametri Remote Config nel codice della tua app


Introduzione: ottimizza la frequenza degli annunci AdMob utilizzando Firebase
Passaggio 1: utilizza AdMob per creare nuove varianti di unità pubblicitarie da testare
Passaggio 2: imposta un test A/B nella console Firebase

Passaggio 3: gestisci i valori dei parametri Remote Config nel codice della tua app

Passaggio 4: avvia il test A/B ed esamina i risultati del test nella console Firebase
Passaggio 5: decidi se implementare il nuovo formato dell'annuncio


Alla fine dell'ultimo passaggio, hai creato un parametro Remote Config ( INTERSTITIAL_AD_KEY ). In questo passaggio aggiungerai la logica al codice della tua app per ciò che l'app dovrebbe visualizzare in base al valore di tale parametro.

Aggiungi gli SDK richiesti

Prima di utilizzare Remote Config nel codice dell'applicazione, aggiungi sia l'SDK di Remote Config che l'SDK di Firebase per Google Analytics ai file di build del tuo progetto.

Veloce

Aggiungi e installa i seguenti pod nel tuo podfile:

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

Obiettivo-C

Aggiungi e installa i seguenti pod nel tuo podfile:

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

Androide

Aggiungi le seguenti dipendenze della libreria al tuo file build.gradle :

implementation 'com.google.android.gms:play-services-ads:23.0.0'
implementation 'com.google.firebase:firebase-analytics:21.6.1'
implementation 'com.google.firebase:firebase-config:21.6.3'

Unità

Scarica e installa Firebase Unity SDK, quindi aggiungi i seguenti pacchetti Unity al tuo progetto:

  • FirebaseAnalytics.unitypackage
  • FirebaseRemoteConfig.unitypackage

Configura l'istanza di Remote Config

Per utilizzare i valori dei parametri Remote Config, configura l'istanza Remote Config in modo che sia configurata per recuperare nuovi valori per l'istanza dell'app client.

In questo esempio, Remote Config è configurato per verificare la presenza di nuovi valori dei parametri una volta ogni ora.

Veloce

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

Obiettivo-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)

Unità

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 e attiva Remote Config

Recupera e attiva i parametri di Remote Config in modo che possa iniziare a utilizzare i nuovi valori dei parametri.

Ti consigliamo di effettuare questa chiamata il prima possibile nella fase di caricamento della tua app perché questa chiamata è asincrona e avrai bisogno del valore Remote Config prerecuperato in modo che la tua app sappia quale annuncio mostrare.

Veloce

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

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

Unità

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

La tua app è ora pronta per gestire il parametro Remote Config che hai creato durante il test A/B configurato in precedenza in questo tutorial.

Utilizzare il valore del parametro Remote Config

Utilizza il valore Remote Config prerecuperato nella funzione loadAdUnit() per determinare quale variante di frequenza dell'annuncio deve essere mostrata per questa istanza dell'app.

Veloce

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.

Obiettivo-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
      }
    })
}

Unità

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

Aggiungi altri controlli per il valore del parametro

Esistono altre aree nel codice dell'applicazione in cui dovrai verificare il valore di questo parametro Remote Config per stabilire quale esperienza pubblicitaria verrà caricata. Ad esempio, puoi decidere se ricaricare un annuncio dopo che l'utente ha finito di visualizzare quello corrente.

Le chiamate di recupero e attivazione devono essere effettuate per prime per ottenere eventuali modifiche ai valori dei parametri, ad esempio se decidi di terminare o creare un nuovo esperimento.

Da lì, puoi sempre verificare il valore del parametro utilizzando le seguenti chiamate:

Veloce

remoteConfig["INTERSTITIAL_AD_KEY"].stringValue

Obiettivo-C

self.remoteConfig[@"INTERSTITIAL_AD_KEY"].stringValue;

Java

mFirebaseRemoteConfig.getString(INTERSTITIAL_AD_KEY)

Kotlin+KTX

remoteConfig.getString(INTERSTITIAL_AD_KEY)

Unità

remoteConfig.GetValue("INTERSTITIAL_AD_KEY").StringValue

Queste chiamate restituiranno sempre lo stesso valore per un'istanza dell'app a seconda che sia stata inserita nel gruppo di controllo o in uno dei nuovi gruppi di varianti dell'annuncio, a meno che non siano state apportate modifiche nella console Firebase recuperate e attivate nelle chiamate precedenti.




Passaggio 2 : imposta un test A/B nella console Firebase Passaggio 4 : avvia il test A/B ed esamina i risultati del test