Jetzt starten

Mit PAL können Sie Google-Anzeigensignale in Ihren Anzeigenanfragen und während der Anzeigenwiedergabe senden.

In diesem Leitfaden wird beschrieben, wie Sie das Android PAL SDK in Ihre App einfügen. Eine Beispiel-App, in der PAL zum Generieren einer Nonce verwendet wird, können Sie GitHub herunterladen.

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:

implementation 'com.google.android.gms:play-services-pal:22.1.0'

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

Nonce generieren

Eine Nonce ist ein einzelner verschlüsselter String, der von PAL mit der Klasse NonceLoader generiert wird. Für PAL muss jeder Streamanfrage eine eindeutige Nonce beigefügt werden. Sie können Nonces jedoch für mehrere Anzeigenanfragen im selben Stream wiederverwenden. So generieren Sie eine Nonce mit dem PAL SDK: Nehmen Sie die folgenden Änderungen vor, um PAL zu importieren und einzurichten und eine Funktion zum Generieren einer Nonce zu erstellen:

  1. So importieren und richten Sie PAL ein:

    1. PAL-Kurse importieren:

      import com.google.ads.interactivemedia.pal.ConsentSettings;
      import com.google.ads.interactivemedia.pal.NonceLoader;
      import com.google.ads.interactivemedia.pal.NonceManager;
      import com.google.ads.interactivemedia.pal.NonceRequest;
      import com.google.android.gms.tasks.OnFailureListener;
      import com.google.android.gms.tasks.OnSuccessListener;
      import java.util.HashSet;
      import java.util.Set;
      
      
    2. Erstellen Sie private Variablen zum Speichern der NonceLoader- und NonceManager-Instanzen:

      private NonceLoader nonceLoader;
      private NonceManager nonceManager;
      
    3. Initialisieren Sie Ihre NonceLoader-Instanz mit einer ConsentSettings-Instanz in der onCreate-Methode:

      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
      
        // 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 isStorageAllowed = getConsentToStorage();
      
        ConsentSettings consentSettings =
            ConsentSettings.builder().allowStorage(isStorageAllowed).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);
      
        adClickButton = findViewById(R.id.send_click_button);
      
        logView = findViewById(R.id.log_view);
        logView.setMovementMethod(new ScrollingMovementMethod());
      }
      
      

    Erstellen Sie in Ihrer App für jede Nutzersitzung eine Instanz der Klasse NonceLoader. Wenn Ihre App mehrere Seiten oder ähnliche Konstrukte hat, erstellen Sie für jede Seite oder jedes seitenähnliche Element eine neue NonceLoader-Instanz. Wenn Sie dieselbe NonceLoader-Instanz verwenden, bleibt der Seitenkorrelator &correlator für die gesamte Lebensdauer einer Seite oder einer Nutzersitzung in der App unverändert. Sie haben weiterhin die Kontrolle über den Stream-Korrelator &scor, den Sie für jeden neuen Stream zurücksetzen müssen, indem Sie eine neue Nonce generieren.

    Alle Anzeigenanfragen desselben Streams müssen dieselbe NonceLoader-Instanz und denselben Stream-Korrelatorwert haben, damit die Funktionen für Frequency Capping und Konkurrenzausschluss funktionieren.

  2. Nonce generieren:

    public void generateNonceForAdRequest(View view) {
      logMessage("Generate Nonce Request");
      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();
    
      nonceLoader
          .loadNonceManager(nonceRequest)
          .addOnSuccessListener(
              new OnSuccessListener<NonceManager>() {
                @Override
                public void onSuccess(NonceManager manager) {
                  nonceManager = manager;
                  String nonceString = manager.getNonce();
                  logMessage("Nonce generated");
                  logMessage(nonceString.substring(0, 20) + "...");
                  Log.i(LOG_TAG, "Generated nonce: " + nonceString);
    
                  // From here you would trigger your ad request and move on to initialize content.
                  exampleMakeAdRequest(DEFAULT_AD_TAG + "&givn=" + nonceString);
    
                  adClickButton.setEnabled(true);
                }
              })
          .addOnFailureListener(
              new OnFailureListener() {
                @Override
                public void onFailure(Exception error) {
                  logMessage("Nonce generation failed");
                  Log.e(LOG_TAG, "Nonce generation failed: " + error.getMessage());
                }
              });
    }
    
    

    Sie benötigen nur einen Nonce-Wert für alle Anzeigenanfragen in einer einzelnen Streamwiedergabe. Rufen Sie diese Funktion zu Testzwecken auf, wenn Sie in Ihrer Test-App auf eine Schaltfläche klicken. Die in dieser Anleitung festgelegten NonceRequest-Parameter sind Beispielparameter. Legen Sie die Parameter anhand der Merkmale Ihrer App fest.

    Diese Funktion generiert asynchron eine Nonce. Sie müssen sowohl Erfolgs- als auch Fehlerfälle der Nonce-Anfrage behandeln. Nachdem der Nonce-Manager verfügbar ist, rufen Sie die Nonce mit der Methode nonceManager.getNonce() ab, bevor Sie eine Anzeigenanfrage stellen.

Nonce an die Anzeigenanfrage anhängen

Wenn Sie die generierte Nonce verwenden möchten, hängen Sie vor dem Senden der Anzeigenanfragen den Parameter givn und den Nonce-Wert an Ihr Anzeigen-Tag an:

// From here you would trigger your ad request and move on to initialize content.
exampleMakeAdRequest(DEFAULT_AD_TAG + "&givn=" + nonceString);

Wiedergabeereignisse erfassen

Wenn Sie Wiedergabeereignisse erfassen möchten, müssen Sie Ereignishandler einrichten, um Anzeigensignale an Google zu senden:

// Triggered when a user clicks-through on an ad which was requested using a PAL nonce.
public void sendAdClick(View view) {
  logMessage("Ad click sent");
  if (nonceManager != null) {
    nonceManager.sendAdClick();
  }
}

// In a typical PAL app, this is called when a user touch or click is detected,
// on the ad other than an ad click-through.
public void onVideoViewTouch(MotionEvent e) {
  if (nonceManager != null) {
    nonceManager.sendAdTouch(e);
  }
}

// In a typical PAL app, this is called when a content playback session starts.
public void sendPlaybackStart() {
  logMessage("Playback start");
  if (nonceManager != null) {
    nonceManager.sendPlaybackStart();
  }
}

// In a typical PAL app, this is called when a content playback session ends.
public void sendPlaybackEnd() {
  logMessage("Playback end");
  if (nonceManager != null) {
    nonceManager.sendPlaybackEnd();
  }
}

Hier sehen Sie, wann Sie die einzelnen Funktionen in Ihrer Implementierung aufrufen sollten:

  • 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

Hängen Sie die Event-Handler-Methoden zu Testzwecken an Schaltflächen-Click-Events an. Richten Sie in einer Produktionsimplementierung Ihre App für Player-Ereignisse ein, damit die Event-Handler-Methoden aufgerufen werden.

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

Wenn Sie Ihren Drittanbieter-Ad-Server 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. Das angegebene Beispiel ist eine Anzeigenanfrage-URL mit dem Nonce-Parameter. Der Nonce-Parameter wird vom PAL SDK über Ihre Vermittlungsserver an Ad Manager weitergegeben, was zu einer besseren Monetarisierung führt.

Konfigurieren Sie den Ad-Server eines Drittanbieters so, dass die Nonce in der Serveranfrage an Ad Manager enthalten ist. Hier sehen Sie ein Beispiel für ein Anzeigen-Tag, das auf dem 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 Drittanbieter-Ad-Server muss ein eigenes Makro wie %%custom_key_for_google_nonce%% unterstützen und es durch den Nonce-Abfrageparameter ersetzen, den Sie im vorherigen Schritt angegeben haben. Weitere Informationen dazu finden Sie in der Dokumentation des Ad-Servers des Drittanbieters.