Bắt đầu

PAL cho phép bạn gửi tín hiệu quảng cáo của Google trong các yêu cầu quảng cáo và trong quá trình phát quảng cáo.

Hướng dẫn này đề cập đến việc thêm Android PAL SDK vào ứng dụng của bạn. Để 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 ví dụ Android xuống từ GitHub.

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

Kể từ phiên bản 18.0.0, PAL SDK đượ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:

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

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

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

Số chỉ dùng một lần là một chuỗi được mã hoá duy nhất mà PAL tạo bằng cách sử dụng lớp NonceLoader. PAL yêu cầu mỗi yêu cầu phát trực tuyến phải đi kèm với một số chỉ dùng một lần duy nhất. Tuy nhiên, bạn có thể sử dụng lại số chỉ dùng một lần 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 PAL SDK, hãy thực hiện các thay đổi sau để nhập và thiết lập PAL, đồng thời tạo một hàm để tạo số chỉ dùng một lần:

  1. Nhập và thiết lập PAL bằng cách làm như sau:

    1. Nhập lớp học 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. Tạo các biến riêng tư để lưu trữ các thực thể NonceLoaderNonceManager:

      private NonceLoader nonceLoader;
      private NonceManager nonceManager;
      
    3. Khởi chạy phiên bản NonceLoader bằng phiên bản ConsentSettings trong phương thức 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());
      }
      
      

    Trong ứng dụng, hãy tạo một phiên bản của lớp NonceLoader cho mỗi phiên người dùng. Nếu ứng dụng của bạn có nhiều trang hoặc cấu trúc tương đương, hãy tạo một phiên bản NonceLoader mới cho mỗi trang hoặc trang tương đương. Bằng cách sử dụng cùng một thực thể NonceLoader, bạn giữ nguyên giá trị nhận dạng trang &correlator trong suốt vòng đời 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 giá trị nhận dạng luồng &scor. Bạn phải đặt lại giá trị này cho mỗi luồng mới bằng cách tạo một số chỉ dùng một lần mới.

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

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

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

    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. Để kiểm thử, hãy gọi hàm này khi nhấp vào một nút trong ứng dụng kiểm thử. Các tham số NonceRequest được đặt trong hướng dẫn này là các tham số ví dụ. Đặt các thông số dựa trên đặc điểm của ứng dụng.

    Hàm này tạo một số chỉ dùng một lần không đồng bộ. Bạn phải xử lý cả trường hợp thành công và thất bại của yêu cầu số chỉ dùng một lần. Sau khi trình quản lý số chỉ dùng một lần có sẵn, hãy truy xuất số chỉ dùng một lần trước khi bạn đưa ra yêu cầu quảng cáo bằng phương thức 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 tham số givn và giá trị số chỉ dùng một lần vào thẻ quảng cáo trước khi thực hiện yêu cầu quảng cáo:

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

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

Để theo dõi các sự kiện phát, bạn phải thiết lập trình xử lý sự kiện để gửi tín hiệu quảng cáo đến 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();
  }
}

Sau đâ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(): Trong mọi tương tác chạm với trình phát

Để kiểm thử, hãy đính kèm các phương thức trình xử lý sự kiện vào các sự kiện nhấp vào nút. Trong quá trình triển khai sản xuất, hãy thiết lập ứng dụng của bạn cho các sự kiện của trình phát để gọi các phương thức trình xử lý sự kiện.

(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 bên thứ ba để hoạt động với Google Ad Manager, hãy tham khảo tài liệu của máy chủ để thu thập 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à URL yêu cầu quảng cáo có tham số nonce. Tham số nonce truyền từ PAL SDK, thông qua các máy chủ trung gian của bạn, rồi đến Ad Manager, giúp cải thiện khả năng kiếm tiền.

Định cấu hình máy chủ quảng cáo của 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ề thẻ quảng cáo được định cấu hình trong máy chủ quảng cáo của 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 kiế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 có thể 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.