Vorabladen von Anzeigen (Beta)

Das Vorabladen von Anzeigen ist eine von Google verwaltete Funktion zum Laden von Anzeigen in GMA Next-Gen SDK, mit der das Laden und Cachen von Anzeigen für Sie verwaltet wird. Für das Vorabladen von Anzeigen ist eine Änderung der Art und Weise erforderlich, wie Sie das Laden von Anzeigen verwalten. Wenn Sie die Leistung durch das Vorladen von Anzeigen optimieren möchten, deaktivieren Sie das benutzerdefinierte Caching und übertragen Sie diese Aufgabe an GMA Next-Gen SDK.

Das Vorabladen von Anzeigen bietet gegenüber dem manuellen Laden von Anzeigen folgende Vorteile:

  • Referenzverwaltung:Hier werden geladene Anzeigen gespeichert, sodass Sie Referenzen erst verwalten müssen, wenn Sie bereit sind, sie zu präsentieren.
  • Automatisches Neuladen:Eine neue Anzeige wird automatisch geladen, wenn Sie eine aus dem Cache abrufen.
  • Verwaltete Wiederholungsversuche:Fehlgeschlagene Anfragen werden automatisch mit exponentiellem Backoff wiederholt.
  • Ablauf:Anzeigen werden automatisch aktualisiert, bevor sie ablaufen (in der Regel nach einer Stunde).
  • Cache-Optimierung:Wenn Sie eine Cache-Größe von mehr als 1 verwenden, optimiert GMA Next-Gen SDK die Cache-Reihenfolge, um die beste Anzeige auszuliefern.

In dieser Anleitung wird beschrieben, wie Sie Preload-Anzeigen konfigurieren, die Verfügbarkeit von Preload-Anzeigen prüfen und die vorab geladene Anzeige einblenden.

Vorbereitung

Bevor Sie mit der Anleitung fortfahren, müssen Sie die folgenden Schritte ausführen:

Vorabladen von Anzeigen starten

Rufen Sie startPreload() auf, um mit dem Vorabladen von Anzeigen zu beginnen. Rufen Sie diese Methode nur einmal pro Preload-ID auf. Wir empfehlen, die Methode aufzurufen, wenn die App-Sitzung beginnt. Nachdem Sie startPreload() aufgerufen haben, lädt GMA Next-Gen SDK automatisch Anzeigen vor und wiederholt fehlgeschlagene Anfragen für diese Vorlade-IDs.

Im folgenden Beispiel wird das Vorabladen von Anzeigen gestartet:

Kotlin

private fun startPreloading(adUnitId: String) {
  val adRequest = AdRequest.Builder(adUnitId).build()
  val preloadConfig = PreloadConfiguration(adRequest)
  InterstitialAdPreloader.start(adUnitId, preloadConfig)
}

Java

private void startPreloading(String adUnitId) {
  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
  InterstitialAdPreloader.start(adUnitId, preloadConfig);
}

Vorab geladene Anzeige abrufen und ausliefern

Wenn Sie das Vorabladen von Anzeigen verwenden, werden die im Cache gespeicherten Anzeigen in GMA Next-Gen SDK gespeichert. Wenn Sie eine Anzeige einblenden möchten, rufen Sie pollAd() auf. GMA Next-Gen SDK ruft die verfügbare Anzeige ab und lädt die nächste Anzeige automatisch im Hintergrund vor.

Im folgenden Beispiel wird eine vorab geladene Anzeige abgerufen und angezeigt:

Kotlin

private fun pollAndShowAd(activity: Activity, adUnitId: String) {
  // Polling returns the next available ad and loads another ad in the background.
  val ad = InterstitialAdPreloader.pollAd(adUnitId)

  // Interact with the ad object as needed.
  ad?.apply {
    Log.d(TAG, "Interstitial ad response info: ${this.getResponseInfo()}")
    this.adEventCallback =
      object : InterstitialAdEventCallback {
        override fun onAdImpression() {
          Log.d(TAG, "Interstitial ad recorded an impression.")
        }

        override fun onAdPaid(value: AdValue) {
          Log.d(TAG, "Interstitial ad onPaidEvent: ${value.valueMicros} ${value.currencyCode}")
        }
      }

    // Show the ad.
    ad.show(activity)
  }
}

Java

private void pollAndShowAd(Activity activity, String adUnitId) {
  // Polling returns the next available ad and loads another ad in the background.
  final InterstitialAd ad = InterstitialAdPreloader.pollAd(adUnitId);

  // Interact with the ad object as needed.
  if (ad != null) {
    Log.d(TAG, "Interstitial ad response info: " + ad.getResponseInfo());
    ad.setAdEventCallback(
        new InterstitialAdEventCallback() {
          @Override
          public void onAdImpression() {
            Log.d(TAG, "Interstitial ad recorded an impression.");
          }

          @Override
          public void onAdPaid(AdValue value) {
            Log.d(
                TAG,
                "Interstitial ad onPaidEvent: "
                    + value.getValueMicros()
                    + " "
                    + value.getCurrencyCode());
          }
        });

    // Show the ad.
    ad.show(activity);
  }
}

Metadaten vorab geladener Anzeigen abrufen

Wenn Sie vorab geladene Anzeigenmetadaten abrufen möchten, können Sie das Antwortinformationsobjekt der Anzeige aufrufen. So können Sie die Metadaten der Anzeige prüfen, ohne sie aus dem Cache zu entfernen.

Im folgenden Beispiel werden die Metadaten einer vorab geladenen Anzeige aus dem Antwortinformationsobjekt abgerufen:

Kotlin

private fun peekAdResponseInfo(preloadId: String) {
  InterstitialAdPreloader.peekAdResponseInfo(preloadId)?.let {
    Log.d(TAG, "Peeked ad response ID: ${it.responseId}")
  }
}

Java

private void peekAdResponseInfo(String preloadId) {
  ResponseInfo responseInfo = InterstitialAdPreloader.peekAdResponseInfo(preloadId);
  if (responseInfo != null) {
    Log.d(TAG, "Peeked ad response ID: " + responseInfo.getResponseId());
  }
}

Verfügbarkeit von Preloading-Anzeigen prüfen

Wählen Sie eine der folgenden Optionen aus, um die Anzeigenverfügbarkeit zu prüfen:

Verfügbarkeit vorab geladener Anzeigen abrufen

Im folgenden Beispiel wird geprüft, ob Anzeigen verfügbar sind:

Kotlin

private fun isAdAvailable(adUnitId: String): Boolean {
  return InterstitialAdPreloader.isAdAvailable(adUnitId)
}

Java

private boolean isAdAvailable(String adUnitId) {
  return InterstitialAdPreloader.isAdAvailable(adUnitId);
}

Verfügbarkeit vorab geladener Anzeigen

Registrieren Sie sich für Preload-Ereignisse, um benachrichtigt zu werden, wenn Anzeigen erfolgreich vorgeladen werden, das Vorladen fehlschlägt oder der Anzeigencache erschöpft ist.

Preload-Ereignisse sind für Analysezwecke vorgesehen. Innerhalb von Preload-Ereignis-Callbacks:

  • Rufen Sie startPreload() nicht an.
  • Rufen Sie pollAd() nur auf, wenn die Anzeige sofort eingeblendet wird.

Im folgenden Beispiel wird die Registrierung für Werbeereignisse durchgeführt:

Kotlin

private fun startPreloadingWithCallback(adUnitId: String) {
  val preloadCallback =
    // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback.
    object : PreloadCallback {
      override fun onAdFailedToPreload(preloadId: String, adError: LoadAdError) {
        Log.i(
          TAG,
          ("Interstitial preload ad $preloadId failed to load with error: ${adError.message}"),
        )
        // [Optional] Get the error response info for additional details.
        // val responseInfo = adError.responseInfo
      }

      override fun onAdsExhausted(preloadId: String) {
        Log.i(TAG, "Interstitial preload ad $preloadId is not available")
        // [Important] Don't call ad preloader start() or pollAd() from onAdsExhausted.
      }

      override fun onAdPreloaded(preloadId: String, responseInfo: ResponseInfo) {
        Log.i(TAG, "Interstitial preload ad $preloadId is available")
      }
    }
  val adRequest = AdRequest.Builder(adUnitId).build()
  val preloadConfig = PreloadConfiguration(adRequest)
  InterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback)
}

Java

private void startPreloadingWithCallback(String adUnitId) {
  PreloadCallback preloadCallback =
      // [Important] Don't call ad preloader start() or pollAd() within the PreloadCallback.
      new PreloadCallback() {
        @Override
        public void onAdFailedToPreload(String preloadId, LoadAdError adError) {
          Log.e(
              TAG,
              String.format(
                  "Interstitial preload ad %s failed to load with error: %s",
                  preloadId, adError.getMessage()));
          // [Optional] Get the error response info for additional details.
          // ResponseInfo responseInfo = adError.getResponseInfo();
        }

        @Override
        public void onAdsExhausted(String preloadId) {
          Log.i(TAG, "Interstitial preload ad " + preloadId + " is not available");
          // [Important] Don't call ad preloader start() or pollAd() from onAdsExhausted.
        }

        @Override
        public void onAdPreloaded(String preloadId, ResponseInfo responseInfo) {
          Log.i(TAG, "Interstitial preload ad " + preloadId + " is available");
        }
      };

  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest);
  InterstitialAdPreloader.start(adUnitId, preloadConfig, preloadCallback);
}

Vorabladen von Anzeigen beenden

Wenn Sie für eine Preload-ID in der Sitzung keine Anzeigen mehr ausliefern müssen, können Sie das Vorabladen von Anzeigen beenden. Wenn Sie das Vorabladen von Anzeigen für eine bestimmte Vorabladungs-ID beenden möchten, rufen Sie destroy() mit einer Vorabladungs-ID auf. Wenn Sie das Vorabladen für alle Preloader beenden möchten, rufen Sie destroyAll() auf.

Puffergröße festlegen

Die Puffergröße steuert die Anzahl der vorab geladenen Anzeigen, die im Speicher gehalten werden. Standardmäßig optimiert Google die Puffergröße, um den Arbeitsspeicherverbrauch und die Latenz beim Ausliefern von Anzeigen auszugleichen. Wenn in Ihrer App Anzeigen ausgeliefert werden, bevor die nächste Anzeige geladen wird, können Sie eine benutzerdefinierte Puffergröße festlegen, um die Anzahl der im Arbeitsspeicher gespeicherten Anzeigen zu erhöhen. Wir empfehlen eine Puffergröße von zwei oder drei.

Cache-Limits für das Vorladen

GMA Next-Gen SDK erzwingt ein appweites Limit für die Gesamtzahl der vorab geladenen Anzeigen für alle Anzeigenblöcke und Vorab-Lade-IDs:

  • Standardlimit: GMA Next-Gen SDK kann maximal sechs vorab geladene Anzeigen im Arbeitsspeicher speichern. Dieses Limit gilt für alle Formate und Preload-IDs.
  • Wir empfehlen, eine Puffergröße von zwei oder drei pro Preload-ID beizubehalten.

Kotlin

private fun setBufferSize(adUnitId: String) {
  val adRequest = AdRequest.Builder(adUnitId).build()
  val preloadConfig = PreloadConfiguration(adRequest, bufferSize = 3)
  InterstitialAdPreloader.start(adUnitId, preloadConfig)
}

Java

private void setBufferSize(String adUnitId) {
  AdRequest adRequest = new AdRequest.Builder(adUnitId).build();
  PreloadConfiguration preloadConfig = new PreloadConfiguration(adRequest, 3);
  InterstitialAdPreloader.start(adUnitId, preloadConfig);
}