Mulai

PAL memungkinkan Anda mengirim sinyal iklan Google dalam permintaan iklan dan selama pemutaran iklan.

Panduan ini membahas cara menambahkan Android PAL SDK ke aplikasi Anda. Untuk melihat aplikasi contoh yang menggunakan PAL untuk membuat nonce, download contoh Android dari GitHub.

Menambahkan Android PAL SDK sebagai library

Mulai versi 18.0.0, PAL SDK dihosting di repositori Maven Google dan dapat ditambahkan ke aplikasi Anda sebagai berikut:

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

Atau, PAL SDK dapat didownload dari repositori Maven Google dan ditambahkan secara manual ke aplikasi Anda.

Buat nonce

Nonce adalah satu string terenkripsi yang dibuat PAL menggunakan class NonceLoader. PAL mengharuskan setiap permintaan streaming disertai dengan nonce unik. Namun, Anda dapat menggunakan kembali nonce untuk beberapa permintaan iklan dalam streaming yang sama. Untuk membuat nonce menggunakan PAL SDK, lakukan perubahan berikut untuk mengimpor dan menyiapkan PAL, serta membuat fungsi untuk membuat nonce:

  1. Impor dan siapkan PAL dengan melakukan hal berikut:

    1. Mengimpor kelas PAL:

      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. Buat variabel pribadi untuk menyimpan instance NonceLoader dan NonceManager:

      private NonceLoader nonceLoader;
      private NonceManager nonceManager;
      
    3. Lakukan inisialisasi instance NonceLoader dengan instance ConsentSettings dalam metode onCreate:

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

    Di aplikasi Anda, buat satu instance class NonceLoader untuk setiap sesi pengguna. Jika aplikasi Anda memiliki beberapa halaman atau konstruksi yang setara, buat instance NonceLoader baru untuk setiap halaman atau yang setara dengan halaman. Dengan menggunakan instance NonceLoader yang sama, Anda mempertahankan &correlator korelasinya tidak berubah selama masa aktif halaman atau sesi pengguna di aplikasi. Anda tetap memiliki kontrol atas &scor korelasinya, yang harus Anda reset untuk setiap aliran baru dengan membuat nonce baru.

    Semua permintaan iklan dari streaming yang sama harus menggunakan instance NonceLoader yang sama dan nilai korelator streaming untuk fitur pembatasan frekuensi dan pengecualian kompetitif.

  2. Membuat nonce:

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

    Anda hanya memerlukan satu nonce untuk semua permintaan iklan dalam pemutaran streaming tunggal. Untuk tujuan pengujian, panggil fungsi ini saat mengklik tombol di aplikasi pengujian Anda. Parameter NonceRequest yang ditetapkan dalam panduan ini adalah contoh parameter. Tetapkan parameter berdasarkan karakteristik aplikasi Anda sendiri.

    Fungsi ini menghasilkan nonce secara asinkron. Anda harus menangani kasus berhasil dan gagal dari permintaan nonce. Setelah pengelola nonce tersedia, ambil nonce sebelum Anda membuat permintaan iklan menggunakan metode nonceManager.getNonce().

Lampirkan nonce ke permintaan iklan

Untuk menggunakan nonce yang dibuat, tambahkan parameter givn dan nilai nonce ke tag iklan Anda sebelum membuat permintaan iklan:

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

Melacak peristiwa pemutaran

Untuk melacak peristiwa pemutaran, Anda harus menyiapkan pengendali peristiwa untuk mengirim sinyal iklan ke Google:

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

Berikut adalah waktu untuk memanggil setiap fungsi dalam penerapan Anda:

  • sendPlaybackStart(): Saat sesi pemutaran video Anda dimulai
  • sendPlaybackEnd(): Saat sesi pemutaran video Anda berakhir
  • sendAdClick(): Setiap kali penonton mengklik iklan
  • sendTouch(): Pada setiap interaksi sentuh dengan pemutar

Untuk tujuan pengujian, lampirkan metode pengendali peristiwa ke peristiwa klik tombol. Dalam penerapan produksi, siapkan aplikasi Anda untuk peristiwa pemain guna memanggil metode pengendali peristiwa.

(Opsional) Mengirim sinyal Google Ad Manager melalui server iklan pihak ketiga

Saat menyiapkan server iklan pihak ketiga agar berfungsi dengan Google Ad Manager, lihat dokumentasi server Anda untuk mengambil dan meneruskan nilai nonce di setiap permintaan iklan. Contoh yang diberikan adalah URL permintaan iklan dengan parameter nonce yang disertakan. Parameter nonce disebarkan dari PAL SDK, melalui server perantara, lalu ke Ad Manager, sehingga memungkinkan monetisasi yang lebih baik.

Konfigurasi server iklan pihak ketiga Anda untuk menyertakan nonce dalam permintaan server ke Ad Manager. Berikut contoh tag iklan yang dikonfigurasi di dalam server iklan pihak ketiga:

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

Untuk mengetahui detail selengkapnya, lihat Panduan penerapan sisi server Google Ad Manager.

Ad Manager mencari givn= untuk mengidentifikasi nilai nonce. Server iklan pihak ketiga harus mendukung beberapa makronya sendiri, seperti %%custom_key_for_google_nonce%%, dan menggantinya dengan parameter kueri nonce yang Anda berikan pada langkah sebelumnya. Informasi selengkapnya tentang cara melakukannya tersedia dalam dokumentasi server iklan pihak ketiga.