PAL을 사용하면 광고 요청 시 및 광고 재생 중에 Google 광고 신호를 전송할 수 있습니다.
이 가이드에서는 앱에 Android PAL SDK를 추가하는 방법을 설명합니다. PAL을 사용하여 nonce를 생성하는 샘플 앱을 보려면 GitHub에서 Android 예시를 다운로드하세요.
Android PAL SDK를 라이브러리로 추가
버전 18.0.0부터 PAL SDK는 Google의 Maven 저장소에서 호스팅되며 다음과 같이 앱에 추가할 수 있습니다.
implementation 'com.google.android.gms:play-services-pal:22.1.0'
또는 Google의 Maven 저장소에서 PAL SDK를 다운로드하여 앱에 수동으로 추가할 수 있습니다.
nonce 생성
nonce는 PAL이 NonceLoader
클래스를 사용하여 생성하는 단일 암호화 문자열입니다. PAL에서는 각 스트림 요청에 고유한 nonce가 포함되어야 합니다. 하지만 동일한 스트림에서 여러 광고 요청에 대해 nonce를 재사용할 수 있습니다. PAL SDK를 사용하여 nonce를 생성하려면 다음 변경사항을 적용하여 PAL을 가져오고 설정하고 nonce를 생성하는 함수를 만드세요.
다음을 실행하여 PAL을 가져오고 설정합니다.
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;
NonceLoader
및NonceManager
인스턴스를 저장할 비공개 변수를 만듭니다.private NonceLoader nonceLoader; private NonceManager nonceManager;
onCreate
메서드에서ConsentSettings
인스턴스로NonceLoader
인스턴스를 초기화합니다.@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()); }
앱에서 각 사용자 세션에 대해
NonceLoader
클래스의 인스턴스를 하나씩 만듭니다. 앱에 여러 페이지 또는 이에 상응하는 구조가 있는 경우 각 페이지 또는 페이지에 상응하는 항목에 대해 새NonceLoader
인스턴스를 만듭니다. 동일한NonceLoader
인스턴스를 사용하면 페이지 또는 앱의 사용자 세션 수명 동안 페이지 상관자&correlator
가 변경되지 않습니다. 새 무작위 값을 생성하여 각 새 스트림에 대해 재설정해야 하는 스트림 상관자&scor
는 계속 제어할 수 있습니다.최대 게재빈도 설정 및 경쟁 제외 기능이 작동하려면 동일한 스트림의 모든 광고 요청이 동일한
NonceLoader
인스턴스와 스트림 상관자 값을 공유해야 합니다.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()); } }); }
단일 스트림 재생의 모든 광고 요청에 대해 하나의 nonce만 있으면 됩니다. 테스트 목적으로 테스트 앱에서 버튼을 클릭할 때 이 함수를 호출합니다. 이 가이드에 설정된
NonceRequest
매개변수는 예시 매개변수입니다. 자체 앱 특성에 따라 매개변수를 설정합니다.이 함수는 비동기적으로 nonce를 생성합니다. nonce 요청의 성공 사례와 실패 사례를 모두 처리해야 합니다. nonce 관리자를 사용할 수 있게 되면
nonceManager.getNonce()
메서드를 사용하여 광고 요청을 하기 전에 nonce를 가져옵니다.
광고 요청에 nonce 첨부
생성된 nonce를 사용하려면 광고 요청을 하기 전에 givn
매개변수와 nonce 값을 광고 태그에 추가하세요.
// From here you would trigger your ad request and move on to initialize content.
exampleMakeAdRequest(DEFAULT_AD_TAG + "&givn=" + nonceString);
재생 이벤트 추적
재생 이벤트를 추적하려면 광고 신호를 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();
}
}
구현에서 각 함수를 호출해야 하는 경우는 다음과 같습니다.
sendPlaybackStart()
: 동영상 재생 세션이 시작되는 시점sendPlaybackEnd()
: 동영상 재생 세션이 종료되는 경우sendAdClick()
: 시청자가 광고를 클릭할 때마다sendTouch()
: 플레이어와의 모든 터치 상호작용
테스트를 위해 이벤트 핸들러 메서드를 버튼 클릭 이벤트에 연결합니다. 프로덕션 구현에서는 플레이어 이벤트가 이벤트 핸들러 메서드를 호출하도록 앱을 설정합니다.
(선택사항) 서드 파티 광고 서버를 통해 Google Ad Manager 신호 전송
Google Ad Manager와 함께 작동하도록 서드 파티 광고 서버를 설정할 때는 서버 문서를 참고하여 각 광고 요청에서 nonce 값을 캡처하고 전달하세요. 제공된 예는 nonce 매개변수가 포함된 광고 요청 URL입니다. nonce 매개변수는 PAL SDK에서 중개 서버를 거쳐 Ad Manager로 전파되어 더 나은 수익 창출을 지원합니다.
서버가 Ad Manager에 요청할 때 nonce를 포함하도록 서드 파티 광고 서버를 구성합니다. 다음은 외부 광고 서버 내에서 구성된 광고 태그의 예입니다.
'https://pubads.serverside.net/gampad/ads?givn=%%custom_key_for_google_nonce%%&...'
자세한 내용은 Google Ad Manager 서버 측 구현 가이드를 참고하세요.
Ad Manager는 givn=
를 찾아 nonce 값을 식별합니다. 서드 파티 광고 서버는 %%custom_key_for_google_nonce%%
와 같은 자체 매크로를 지원하고 이를 이전 단계에서 제공한 nonce 쿼리 매개변수로 대체해야 합니다. 이 작업을 수행하는 방법에 관한 자세한 내용은 서드 파티 광고 서버의 문서를 참고하세요.