Tutorial: AdMob-Anzeigenhäufigkeit optimieren

Schritt 3: Behandeln Sie Remote Config-Parameterwerte im Code Ihrer App


Einführung: AdMob-Anzeigenhäufigkeit mit Firebase optimieren
Schritt 1: Erstellen Sie mit AdMob neue Anzeigenblockvarianten zum Testen
Schritt 2: Richten Sie einen A/B-Test in der Firebase-Konsole ein

Schritt 3: Behandeln Sie Remote Config-Parameterwerte im Code Ihrer App

Schritt 4: Starten Sie den A/B-Test und überprüfen Sie die Testergebnisse in der Firebase-Konsole
Schritt 5: Entscheiden Sie, ob das neue Anzeigenformat eingeführt werden soll


Am Ende des letzten Schritts haben Sie einen Remote-Config-Parameter ( INTERSTITIAL_AD_KEY ) erstellt. In diesem Schritt fügen Sie dem Code Ihrer App die Logik für das hinzu, was Ihre App basierend auf dem Wert dieses Parameters anzeigen soll.

Fügen Sie die erforderlichen SDKs hinzu

Bevor Sie Remote Config in Ihrem Anwendungscode verwenden, fügen Sie sowohl das Remote Config SDK als auch das Firebase SDK für Google Analytics zu Ihren Projekt-Build-Dateien hinzu.

Schnell

Fügen Sie die folgenden Pods zu Ihrer Poddatei hinzu und installieren Sie sie:

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

Ziel c

Fügen Sie die folgenden Pods zu Ihrer Poddatei hinzu und installieren Sie sie:

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

Android

Fügen Sie Ihrer build.gradle -Datei die folgenden Bibliotheksabhängigkeiten hinzu:

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'

Einheit

Laden Sie das Firebase Unity SDK herunter und installieren Sie es. Fügen Sie dann die folgenden Unity-Pakete zu Ihrem Projekt hinzu:

  • FirebaseAnalytics.unitypackage
  • FirebaseRemoteConfig.unitypackage

Konfigurieren Sie die Remote Config-Instanz

Um die Remote Config-Parameterwerte zu verwenden, konfigurieren Sie die Remote Config-Instanz so, dass sie zum Abrufen neuer Werte für die Client-App-Instanz eingerichtet ist.

In diesem Beispiel ist Remote Config so konfiguriert, dass es stündlich nach neuen Parameterwerten sucht.

Schnell

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

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

Einheit

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

Rufen Sie Remote Config ab und aktivieren Sie es

Rufen Sie die Remote Config-Parameter ab und aktivieren Sie sie, damit die neuen Parameterwerte verwendet werden können.

Sie sollten diesen Aufruf so früh wie möglich in der Ladephase Ihrer App tätigen, da dieser Aufruf asynchron ist und Sie den Remote Config-Wert vorab abrufen müssen, damit Ihre App weiß, welche Anzeige geschaltet werden soll.

Schnell

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

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

Einheit

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

Ihre App ist jetzt bereit, den Remote Config-Parameter zu verarbeiten, den Sie während der Einrichtung des A/B-Tests weiter oben in diesem Tutorial erstellt haben.

Verwenden Sie den Parameterwert „Remote Config“.

Verwenden Sie den vorab abgerufenen Remote-Config-Wert in der Funktion loadAdUnit() , um zu bestimmen, welche Anzeigenhäufigkeitsvariante für diese App-Instanz angezeigt werden soll.

Schnell

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.

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

Einheit

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

Fügen Sie weitere Prüfungen für den Parameterwert hinzu

Es gibt andere Bereiche in Ihrem Anwendungscode, in denen Sie den Wert dieses Remote-Config-Parameters überprüfen müssen, um zu bestimmen, welches Anzeigenerlebnis geladen wird. Sie können beispielsweise entscheiden, ob eine Anzeige erneut geladen werden soll, nachdem der Nutzer die aktuelle Anzeige beendet hat.

Die Fetch- und Activate-Aufrufe sollten zuerst durchgeführt werden, um etwaige Parameterwertänderungen abzurufen – zum Beispiel, wenn Sie sich entscheiden, ein neues Experiment zu beenden oder zu erstellen.

Von dort aus können Sie den Wert des Parameters jederzeit mit den folgenden Aufrufen überprüfen:

Schnell

remoteConfig["INTERSTITIAL_AD_KEY"].stringValue

Ziel c

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

Java

mFirebaseRemoteConfig.getString(INTERSTITIAL_AD_KEY)

Kotlin+KTX

remoteConfig.getString(INTERSTITIAL_AD_KEY)

Einheit

remoteConfig.GetValue("INTERSTITIAL_AD_KEY").StringValue

Diese Aufrufe geben immer denselben Wert für eine App-Instanz zurück, je nachdem, ob sie in der Kontrollgruppe oder einer der neuen Anzeigenvariantengruppen platziert wurde, es sei denn, in der Firebase-Konsole wurden Änderungen vorgenommen, die in den vorherigen Aufrufen abgerufen und aktiviert wurden.




Schritt 2 : Richten Sie einen A/B-Test in der Firebase-Konsole ein. Schritt 4 : Starten Sie den A/B-Test und überprüfen Sie die Testergebnisse