Bước đầu tiên là thêm SDK Android PAL vào ứng dụng.
Thêm SDK Android PAL 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à bạn có thể thêm SDK này vào ứng dụng của mình như sau:
app/build.gradle
...
dependencies {
implementation 'com.google.android.gms:play-services-pal:22.0.0'
...
}
Ngoài ra, bạn có thể tải SDK PAL xuống từ kho lưu trữ Maven của Google và thêm vào ứng dụng 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 do PAL tạo bằng NonceLoader
.
SDK PAL yêu cầu mỗi yêu cầu truyền phát mới phải đi kèm với một số chỉ dùng một lần mới tạo. 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 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 ví dụ về 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ữ NonceLoader
và NonceManager
, sau đó khởi chạy NonceLoader.
Bạn chỉ nên tạo một thực thể của lớp NonceLoader
cho mỗi phiên người dùng trong ứng dụng, trừ phi ứng dụng của bạn có nhiều trang hoặc các cấu trúc tương đương. Điều này giúp bộ tương quan trang (&correlator
) không thay đổi 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 bộ tương quan luồng (&scor
) và bạn nên đặt lại bộ tương quan này một lần cho mỗi luồng mới.
Tất cả yêu cầu quảng cáo của cùng một luồng phải có cùng một NonceLoader
và giá trị đối tượng tương quan của luồng để các tính năng giới hạn tần suất và 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 quá trình 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ử. Các tham số NonceRequest
được đặt ở đây là tham số mẫu. Bạn nên đặt các tham số dựa trên đặc điểm của ứng dụng.
Hàm này kích hoạt việc tạo số chỉ dùng một lần một cách 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 hoặc không thành công:
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());
}
}
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 cách sử dụ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 tham số givn
và giá trị số chỉ dùng một lần vào thẻ quảng cáo trước khi tạo 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. Để 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);
}
}
Sau đây là thời điểm gọi từng hàm trong quá trình triển khai:
sendPlaybackStart()
: Thời điểm bắt đầu phiên phát videosendPlaybackEnd()
: Khi phiên phát video của bạn kết thúcsendAdClick()
: Mỗi khi người xem nhấp vào một quảng cáosendTouch()
: Trong mọi lượt tương tác chạm với người chơi
(Không bắt buộc) Gửi tín hiệu của 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ố số chỉ dùng một lần. Tham số số chỉ dùng một lần được truyền từ SDK PAL, thông qua các máy chủ trung gian, sau đó đến Ad Manager, giúp tăng 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ủ đến Ad Manager. Dưới đây là ví dụ về thẻ quảng cáo được định cấu hình bên 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, 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 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.