Bắt đầu

Bước đầu tiên là thêm SDK PAL của Android vào ứng dụng.

Thêm SDK PAL Android làm thư viện

Kể từ phiên bản 18.0.0, SDK PAL được lưu trữ trên kho lưu trữ Maven của Google và có thể được thêm vào ứng dụng của bạn như sau:

app/build.gradle

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

Ngoài ra, bạn có thể tải SDK PAL xuống từ kho lưu trữ Maven của Google rồi tự thêm vào ứng dụng của mình.

Tạo số chỉ dùng một lần

"Số chỉ dùng một lần" là một chuỗi mã hoá đơn do PAL tạo bằng NonceLoader. SDK PAL yêu cầu mỗi yêu cầu luồng mới đi kèm với một số chỉ dùng một lần mới được tạo. Tuy nhiên, bạn có thể sử dụng lại số nonces cho nhiều yêu cầu quảng cáo trong cùng một luồng. Để tạo một số chỉ dùng một lần bằng SDK PAL, hãy thực hiện các thay đổi đối với MyActivity.java. Để xem một ứng dụng mẫu sử dụng PAL để tạo số chỉ dùng một lần, hãy tải mẫu Android xuống từ GitHub.

Trước tiên, bạn cần nhập SDK PAL, tạo một số thuộc tính riêng tư để lưu trữ NonceLoaderNonceManager, sau đó khởi chạy NonceLoader.

Bạn chỉ nên tạo một thực thể của lớp NonceLoader cho từng phiên hoạt động của người dùng trong ứng dụng, trừ phi ứng dụng của bạn có nhiều trang hoặc cấu trúc tương đương. Thao tác này sẽ giữ nguyên giá trị tương quan trang (&correlator) trong suốt thời gian hoạt động của một trang hoặc phiên của người dùng trên ứng dụng. Bạn vẫn có quyền kiểm soát đối với giá trị tương quan luồng (&scor) cần đặt lại một lần cho mỗi luồng mới.

Tất cả các yêu cầu quảng cáo của cùng một luồng phải chia sẻ cùng một NonceLoader và giá trị tương quan luồng để giới hạn tần suất và các tính năng loại trừ cạnh tranh để hoạt động đúng cách.

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

Tiếp theo, hãy tạo một hàm để kích hoạt tính năng tạo số chỉ dùng một lần. Bạn chỉ cần một số chỉ dùng một lần cho tất cả các yêu cầu quảng cáo trong một lần phát trực tuyến. Đối với mục đích kiểm thử, bạn có thể gọi hàm này khi nhấp vào một nút trong ứng dụng kiểm thử.

Hàm này kích hoạt việc tạo số chỉ dùng một lần không đồng bộ, vì vậy, bạn cần triển khai AsyncTask để xử lý yêu cầu số chỉ dùng một lần thành công hay không thành công:

public void generateNonceForAdRequest() {
  Set supportedApiFrameWorksSet = new HashSet();
  supportedApiFrameWorksSet.add(2);
  supportedApiFrameWorksSet.add(7);
  supportedApiFrameWorksSet.add(9);

  NonceRequest nonceRequest = NonceRequest.builder()
      .descriptionURL("https://example.com/content1")
      .iconsSupported(true)
      .omidVersion("1.0.0")
      .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(true)
      .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());
  }
}

Sau khi tạo trình quản lý số chỉ dùng một lần, bạn có thể truy xuất số chỉ dùng một lần bất cứ lúc nào bằng nonceManager.getNonce().

Đính kèm số chỉ dùng một lần vào yêu cầu quảng cáo

Để sử dụng số chỉ dùng một lần đã tạo, hãy thêm thẻ quảng cáo với thông số givn và giá trị số chỉ dùng một lần trước khi thực hiện yêu cầu quảng cáo.

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

Theo dõi sự kiện phát

Cuối cùng, bạn cần triển khai nhiều trình xử lý sự kiện cho trình phát của mình. Đối với mục đích kiểm thử, bạn có thể đính kèm các sự kiện này vào sự kiện nhấp vào nút, nhưng trong quá trình triển khai thực tế, các sự kiện này sẽ được kích hoạt bởi các sự kiện người chơi thích hợp:

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

Dưới đây là thời điểm gọi từng hàm trong quá trình triển khai:

  • sendPlaybackStart(): Khi phiên phát video bắt đầu
  • sendPlaybackEnd(): Khi phiên phát video kết thúc
  • sendAdClick(): Mỗi khi người xem nhấp vào một quảng cáo
  • sendTouch(): Cho mỗi lần tương tác chạm với trình phát

(Không bắt buộc) Gửi tín hiệu Google Ad Manager thông qua máy chủ quảng cáo của bên thứ ba

Khi bạn thiết lập máy chủ quảng cáo của bên thứ ba để làm việc với Google Ad Manager, hãy tham khảo tài liệu của máy chủ để nắm bắt và chuyển tiếp giá trị số chỉ dùng một lần trong mỗi yêu cầu quảng cáo. Ví dụ được cung cấp là về URL yêu cầu quảng cáo có bao gồm tham số số chỉ dùng một lần. Thông số số chỉ dùng một lần truyền từ SDK PAL, thông qua các máy chủ trung gian của bạn, sau đó truyền đến Ad Manager, giúp kiếm tiền hiệu quả hơn.

Định cấu hình máy chủ quảng cáo bên thứ ba để đưa số chỉ dùng một lần vào yêu cầu của máy chủ đối với Ad Manager. Dưới đây là ví dụ về một thẻ quảng cáo được định cấu hình bên trong máy chủ quảng cáo bên thứ ba:

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

Để biết thêm thông tin chi tiết, hãy xem Hướng dẫn triển khai phía máy chủ của Google Ad Manager.

Ad Manager tìm givn= để xác định giá trị số chỉ dùng một lần. Máy chủ quảng cáo bên thứ ba cần hỗ trợ một số macro của riêng mình, chẳng hạn như %%custom_key_for_google_nonce%% và thay thế bằng tham số truy vấn số chỉ dùng một lần mà bạn đã cung cấp ở bước trước. Bạn nên xem thêm thông tin về cách thực hiện việc này trong tài liệu của máy chủ quảng cáo bên thứ ba.