Jetzt starten

Fügen Sie Ihrer App zuerst das Android PAL SDK hinzu.

Android PAL SDK als Bibliothek hinzufügen

Ab Version 18.0.0 wird das PAL SDK im Maven-Repository von Google gehostet und kann Ihrer App so hinzugefügt werden:

app/build.gradle

...
dependencies {
    implementation 'com.google.android.gms:play-services-pal:22.0.0'
    ...
}

Alternativ kann das PAL SDK aus dem Maven-Repository von Google heruntergeladen und manuell Ihrer App hinzugefügt werden.

Nonce generieren

Ein „Nonce“ ist ein einzelner verschlüsselter String, der von PAL mithilfe der NonceLoader generiert wird. Für das PAL SDK muss jede neue Streamanfrage mit einer neu generierten Nonce versehen sein. Nonces können jedoch für mehrere Anzeigenanfragen innerhalb desselben Streams wiederverwendet werden. Wenn du mit dem PAL SDK ein Nonce generieren möchtest, musst du Änderungen an MyActivity.java vornehmen. Eine Beispiel-App, die mit PAL eine Nonce generiert, finden Sie im GitHub für Android.

Sie müssen zuerst das PAL SDK importieren, einige private Properties zum Speichern von NonceLoader und NonceManager erstellen und dann den NonceLoader initialisieren.

Wir empfehlen, für jede Nutzersitzung in Ihrer App nur eine Instanz der Klasse NonceLoader zu erstellen, es sei denn, Ihre App hat mehrere Seiten oder entsprechende Konstrukte. Dadurch bleibt der Seitenkorrelator (&correlator) während der gesamten Lebensdauer einer Seite oder einer Nutzersitzung in der App unverändert. Sie haben weiterhin die Kontrolle über den Streamkorrelator (&scor), der für jeden neuen Stream einmal zurückgesetzt werden sollte.

Alle Anzeigenanfragen desselben Streams sollten denselben NonceLoader- und Stream-Korrelatorwert haben, damit die Funktionen für Frequency Capping und Konkurrenzausschlüsse ordnungsgemäß funktionieren.

import android.app.Activity;
import android.os.Bundle;
import com.google.ads.interactivemedia.pal.NonceLoader;
import com.google.ads.interactivemedia.pal.NonceManager;
import com.google.ads.interactivemedia.pal.NonceRequest;
import com.google.ads.interactivemedia.pal.ConsentSettings;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;

import java.util.HashSet;
import java.util.Set;

public class MainActivity extends Activity {
...
  private NonceLoader nonceLoader;
  private NonceManager nonceManager = null;
  private ConsentSettings consentSettings;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // The default value for allowStorage() is false, but can be
    // changed once the appropriate consent has been gathered. The
    // getConsentToStorage() method is a placeholder for the publisher's own
    // method of obtaining user consent, either by integrating with a CMP or
    // based on other methods the publisher chooses to handle storage consent.

    boolean isConsentToStorage = getConsentToStorage();

    videoView = findViewById(R.id.video_view);
    videoView.setOnTouchListener(this::onVideoViewTouch);

    consentSettings = ConsentSettings.builder()
            .allowStorage(isConsentToStorage)
            .build();

    // It is important to instantiate the NonceLoader as early as possible to
    // allow it to initialize and preload data for a faster experience when
    // loading the NonceManager. A new NonceLoader will need to be instantiated
    //if the ConsentSettings change for the user.
    nonceLoader = new NonceLoader(this, consentSettings);
    ...
  }

Erstellen Sie als Nächstes eine Funktion, um die Generierung von Nonces auszulösen. Du benötigst nur einen einzelnen Nonce für alle Anzeigenanfragen bei der Wiedergabe eines einzelnen Streams. Zu Testzwecken können Sie diese Funktion aufrufen, wenn Sie in Ihrer Test-App auf eine Schaltfläche klicken. Die hier festgelegten NonceRequest-Parameter sind Beispielparameter. Sie sollten Ihre Parameter anhand Ihrer eigenen App-Merkmale festlegen.

Diese Funktion löst die Generierung der Nonce asynchron aus. Daher musst du eine AsyncTask implementieren, um den Erfolg oder Fehler der Nonce-Anfrage zu verarbeiten:

public void generateNonceForAdRequest() {
  Set supportedApiFrameWorksSet = new HashSet();
  // The values 2, 7, and 9 correspond to player support for VPAID 2.0,
  // OMID 1.0, and SIMID 1.1.
  supportedApiFrameWorksSet.add(2);
  supportedApiFrameWorksSet.add(7);
  supportedApiFrameWorksSet.add(9);

  NonceRequest nonceRequest = NonceRequest.builder()
      .descriptionURL("https://example.com/content1")
      .iconsSupported(true)
      .omidPartnerVersion("6.2.1")
      .omidPartnerName("Example Publisher")
      .playerType("ExamplePlayerType")
      .playerVersion("1.0.0")
      .ppid("testPpid")
      .sessionId("Sample SID")
      .supportedApiFrameworks(supportedApiFrameWorksSet)
      .videoPlayerHeight(480)
      .videoPlayerWidth(640)
      .willAdAutoPlay(true)
      .willAdPlayMuted(false)
      .build();
  NonceCallbackImpl callback = new NonceCallbackImpl();
  nonceLoader
      .loadNonceManager(nonceRequest)
      .addOnSuccessListener(callback)
      .addOnFailureListener(callback);
}

private class NonceCallbackImpl implements OnSuccessListener<NonceManager>, OnFailureListener {
  @Override
  public void onSuccess(NonceManager manager) {
    nonceManager = manager;
    String nonceString = manager.getNonce();
    Log.i("PALSample", "Generated nonce: " + nonceString);
    // from here you would trigger your ad request and move on to initialize content
  }

  @Override
  public void onFailure(Exception error) {
    Log.e("PALSample", "Nonce generation failed: " + error.getMessage());
  }
}

Nachdem ein Nonce-Manager erstellt wurde, kann der Nonce jederzeit mit nonceManager.getNonce() abgerufen werden.

Nonce an die Anzeigenanfrage anhängen

Wenn Sie den generierten Nonce verwenden möchten, hängen Sie Ihrem Anzeigen-Tag vor dem Senden Ihrer Anzeigenanfragen einen givn-Parameter mit dem Nonce-Wert an.

/**
 * The ad tag for your ad request, for example:
 * https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external\
 * /single_ad_samples&ciu_szs=300x250&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1\
 * &cust_params=deployment%3Ddevsite%26sample_ct%3Dlinear&correlator=
 *
 * For more sample ad tags, see
 * developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/tags
 */
private static final String DEFAULT_AD_TAG = "Your ad tag";
...
@Override
public void onSuccess(NonceManager manager) {
  nonceManager = manager;
  String nonceString = manager.getNonce();
  Log.i("PALSample", "Generated nonce: " + nonceString);
  // Append the nonce to the ad tag URL.
  makeAdRequest(DEFAULT_AD_TAG + "&givn=" + nonceString);
}

Wiedergabeereignisse erfassen

Schließlich musst du verschiedene Ereignishandler für deinen Player implementieren. Zu Testzwecken kannst du sie an Schaltflächenklick-Ereignisse anhängen. Bei einer echten Implementierung werden sie jedoch durch die entsprechenden Player-Ereignisse ausgelöst:

public void sendAdClick() {
  if (nonceManager != null) {
    nonceManager.sendAdClick();
  }
}

public void sendPlaybackStart() {
  if (nonceManager != null) {
    nonceManager.sendPlaybackStart();
  }
}

public void sendPlaybackEnd() {
  if (nonceManager != null) {
    nonceManager.sendPlaybackEnd();
  }
}

public void onVideoViewTouch(MotionEvent e) {
  if (nonceManager != null) {
    nonceManager.sendTouch(e);
  }
}

Hier erfahren Sie, wann die einzelnen Funktionen in Ihrer Implementierung aufgerufen werden:

  • sendPlaybackStart(): Wenn die Videowiedergabe beginnt
  • sendPlaybackEnd(): Wenn die Videowiedergabe beendet wird
  • sendAdClick(): Jedes Mal, wenn der Zuschauer auf eine Anzeige klickt
  • sendTouch(): Bei jeder Touch-Interaktion mit dem Player

Optional: Google Ad Manager-Signale über Ad-Server von Drittanbietern senden

Wenn Sie den Ad-Server eines Drittanbieters für die Verwendung mit Google Ad Manager einrichten, lesen Sie in der Dokumentation Ihres Servers nach, wie Sie den Nonce-Wert in jeder Anzeigenanfrage erfassen und weiterleiten. Im Beispiel ist eine Anzeigenanfrage-URL mit dem Nonce-Parameter enthalten. Der Nonce-Parameter wird vom PAL SDK über deine Intermediärserver an Ad Manager übertragen, was eine bessere Monetarisierung ermöglicht.

Konfigurieren Sie den Ad-Server des Drittanbieters so, dass die Nonce in die Anfrage des Servers an Ad Manager aufgenommen wird. Hier ein Beispiel für ein Anzeigen-Tag, das im Ad-Server eines Drittanbieters konfiguriert wurde:

'https://pubads.serverside.net/gampad/ads?givn=%%custom_key_for_google_nonce%%&...'

Weitere Informationen finden Sie im Leitfaden zur serverseitigen Implementierung von Google Ad Manager.

In Ad Manager wird nach givn= gesucht, um den Nonce-Wert zu ermitteln. Der Ad-Server des Drittanbieters muss ein eigenes Makro wie %%custom_key_for_google_nonce%% unterstützen und es durch den im vorherigen Schritt angegebenen Abfrageparameter „nonce“ ersetzen. Weitere Informationen dazu finden Sie in der Dokumentation des Ad-Servers des Drittanbieters.