Anleitung: AdMob-Anzeigenhäufigkeit optimieren

Schritt 3: Remote Config-Parameterwerte im App-Code verarbeiten


Einführung: Optimieren AdMob Anzeigenhäufigkeit mit Firebase
Schritt 1: Mit AdMob neue Anzeigenblockvarianten für Tests erstellen
Schritt 2: A/B-Test in der Firebase-Konsole einrichten

Schritt 3: Remote Config-Parameterwerte im Code Ihrer App verarbeiten

Schritt 4: Starten A/B-Test und die Testergebnisse in der Firebase-Konsole
Schritt 5: Entscheiden, ob Sie das neue Anzeigenformat einführen möchten


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

Erforderliche SDKs hinzufügen

Bevor Sie Remote Config in Ihrem Anwendungscode verwenden, fügen Sie die beiden Parameter Remote Config SDK und das Firebase SDK für Google Analytics, um Ihre Projekt-Build-Dateien.

Swift

Fügen Sie der Podfile-Datei die folgenden Pods hinzu und installieren Sie sie:

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

Objective-C

Fügen Sie der Podfile-Datei die folgenden Pods hinzu und installieren Sie sie:

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

Android

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

implementation 'com.google.android.gms:play-services-ads:23.3.0'
implementation 'com.google.firebase:firebase-analytics:22.1.0'
implementation 'com.google.firebase:firebase-config:22.0.0'

Einheit

Laden Sie das Firebase Unity SDK herunter, installieren Sie es und fügen Sie dann das folgende Unity hinzu: Pakete zu Ihrem Projekt hinzu:

  • FirebaseAnalytics.unitypackage
  • FirebaseRemoteConfig.unitypackage

Remote Config-Instanz konfigurieren

Konfigurieren Sie zur Verwendung der Parameterwerte für Remote Config die Remote Config-Instanz so eingerichtet sind, dass neue Werte für den Client-Anwendungsinstanz.

In diesem Beispiel ist Remote Config so konfiguriert, dass nach einem neuen Parameter gesucht wird. Werte einmal pro Stunde.

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)

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

Remote Config abrufen und aktivieren

Rufen Sie die Remote Config-Parameter ab und aktivieren Sie sie, damit die Anwendung beginnen kann, die neuen Parameterwerte.

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

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

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 kann jetzt den von Ihnen erstellten Parameter Remote Config verarbeiten. der A/B-Testeinrichtung weiter oben in dieser Anleitung.

Parameterwert Remote Config verwenden

Verwenden Sie den vorab abgerufenen Wert Remote Config in der Funktion loadAdUnit(), um festlegen, welche Variante für die Anzeigenhäufigkeit für diese App-Instanz verwendet werden soll.

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

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

Weitere Überprüfungen des Parameterwerts hinzufügen

Es gibt weitere Bereiche in Ihrem Anwendungscode, in denen Sie die Remote Config-Parameters ein, um festzulegen, welche Anzeige geladen. Sie können z. B. entscheiden, ob eine Anzeige neu geladen werden soll, nachdem der Nutzer die aktuelle Anzeige vollständig wiedergegeben hat.

Die Abruf- und Aktivierungsaufrufe sollten zuerst erfolgen, um eventuelle Parameterwerte abzurufen Änderungen vornehmen, z. B. wenn Sie einen Test beenden oder neu erstellen

Dort können Sie den Wert für den Parameter jederzeit mithilfe der Methode folgenden Aufrufen:

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)

Einheit

remoteConfig.GetValue("INTERSTITIAL_AD_KEY").StringValue

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




Schritt 2: Richten Sie einen A/B-Test in der Firebase-Konsole ein. Schritt 4: A/B-Test starten und Testergebnisse prüfen