기본 요건
맞춤 이벤트 설정을 완료합니다.
배너 광고 요청
폭포식 구조 미디에이션 체인에서 맞춤 이벤트 광고 항목에 도달하면
맞춤 이벤트를 만들 때 제공한 클래스 이름에 loadBannerAd() 메서드가 호출됩니다.
이 경우 메서드는 SampleCustomEvent에 있으며, 그런 다음 SampleBannerCustomEventLoader에서 loadBannerAd() 메서드를 호출합니다.
배너 광고를 요청하려면 Adapter를 확장하여 loadBannerAd()를 구현하는 클래스를 만들거나 수정합니다. 또한 MediationBannerAd를 구현하는 새 클래스를 만듭니다.
맞춤 이벤트 예에서
SampleCustomEvent는 Adapter 클래스를 확장한 다음
SampleBannerCustomEventLoader에 위임합니다.
Java
package com.google.ads.mediation.sample.customevent; import com.google.android.gms.ads.mediation.Adapter; import com.google.android.gms.ads.mediation.MediationAdConfiguration; import com.google.android.gms.ads.mediation.MediationAdLoadCallback; import com.google.android.gms.ads.mediation.MediationBannerAd; import com.google.android.gms.ads.mediation.MediationBannerAdCallback; ... public class SampleCustomEvent extends Adapter { private SampleBannerCustomEventLoader bannerLoader; @Override public void loadBannerAd( @NonNull MediationBannerAdConfiguration adConfiguration, @NonNull MediationAdLoadCallback<MediationBannerAd, MediationBannerAdCallback> callback) { bannerLoader = new SampleBannerCustomEventLoader(adConfiguration, callback); bannerLoader.loadAd(); } }
SampleBannerCustomEventLoader는 다음 작업을 담당합니다.
배너 광고를 로드하고 로드가 완료되면
MediationAdLoadCallback메서드를 호출합니다.MediationBannerAd인터페이스를 구현합니다.광고 이벤트 콜백을 수신하고 GMA Next-Gen SDK에 보고합니다.
UI에 정의된 선택적 매개변수는 광고 구성에
포함됩니다. 이 매개변수는 adConfiguration.getServerParameters().getString(MediationConfiguration.CUSTOM_EVENT_SERVER_PARAMETER_FIELD)를 통해 액세스할 수 있습니다.
이 파라미터는 일반적으로 광고 네트워크 SDK가 광고 객체를 인스턴스화할 때 요구하는 광고 단위 식별자입니다.
Java
package com.google.ads.mediation.sample.customevent; import com.google.android.gms.ads.mediation.Adapter; import com.google.android.gms.ads.mediation.MediationBannerAdConfiguration; import com.google.android.gms.ads.mediation.MediationAdLoadCallback; import com.google.android.gms.ads.mediation.MediationBannerAd; import com.google.android.gms.ads.mediation.MediationBannerAdCallback; ... public class SampleBannerCustomEventLoader extends SampleAdListener implements MediationBannerAd { /** View to contain the sample banner ad. */ private SampleAdView sampleAdView; /** Configuration for requesting the banner ad from the third-party network. */ private final MediationBannerAdConfiguration mediationBannerAdConfiguration; /** Callback that fires on loading success or failure. */ private final MediationAdLoadCallback<MediationBannerAd, MediationBannerAdCallback> mediationAdLoadCallback; /** Callback for banner ad events. */ private MediationBannerAdCallback bannerAdCallback; /** Constructor. */ public SampleBannerCustomEventLoader( @NonNull MediationBannerAdConfiguration mediationBannerAdConfiguration, @NonNull MediationAdLoadCallback<MediationBannerAd, MediationBannerAdCallback> mediationAdLoadCallback) { this.mediationBannerAdConfiguration = mediationBannerAdConfiguration; this.mediationAdLoadCallback = mediationAdLoadCallback; } /** Loads a banner ad from the third-party ad network. */ public void loadAd() { // All custom events have a server parameter named "parameter" that returns // back the parameter entered into the UI when defining the custom event. Log.i("BannerCustomEvent", "Begin loading banner ad."); String serverParameter = mediationBannerAdConfiguration.getServerParameters().getString( MediationConfiguration.CUSTOM_EVENT_SERVER_PARAMETER_FIELD); Log.d("BannerCustomEvent", "Received server parameter."); Context context = mediationBannerAdConfiguration.getContext(); sampleAdView = new SampleAdView(context); // Assumes that the serverParameter is the ad unit of the Sample Network. sampleAdView.setAdUnit(serverParameter); AdSize size = mediationBannerAdConfiguration.getAdSize(); // Internally, smart banners use constants to represent their ad size, which // means a call to AdSize.getHeight could return a negative value. You can // accommodate this by using AdSize.getHeightInPixels and // AdSize.getWidthInPixels instead, and then adjusting to match the device's // display metrics. int widthInPixels = size.getWidthInPixels(context); int heightInPixels = size.getHeightInPixels(context); DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics(); int widthInDp = Math.round(widthInPixels / displayMetrics.density); int heightInDp = Math.round(heightInPixels / displayMetrics.density); sampleAdView.setSize(new SampleAdSize(widthInDp, heightInDp)); sampleAdView.setAdListener(this); SampleAdRequest request = createSampleRequest(mediationBannerAdConfiguration); Log.i("BannerCustomEvent", "Start fetching banner ad."); sampleAdView.fetchAd(request); } public SampleAdRequest createSampleRequest( MediationAdConfiguration mediationAdConfiguration) { SampleAdRequest request = new SampleAdRequest(); request.setTestMode(mediationAdConfiguration.isTestRequest()); request.setKeywords(mediationAdConfiguration.getMediationExtras().keySet()); return request; } }
광고를 성공적으로 가져왔는지 아니면 오류가 발생했는지에 따라 onSuccess() 또는 onFailure()를 호출합니다.
MediationBannerAd를 구현하는 클래스의 인스턴스를 전달하여 onSuccess()가 호출됩니다.
일반적으로 이러한 메서드는 어댑터가 구현하는 서드 파티 SDK의 콜백 내에서 구현됩니다. 이 예에서는 샘플 SDK에 관련 콜백이 있는 SampleAdListener가 있습니다.
Java
@Override public void onAdFetchSucceeded() { bannerAdCallback = mediationAdLoadCallback.onSuccess(this); } @Override public void onAdFetchFailed(SampleErrorCode errorCode) { mediationAdLoadCallback.onFailure(SampleCustomEventError.createSampleSdkError(errorCode)); }
MediationBannerAd에는 View getter 메서드를 구현해야 합니다.
Java
@Override @NonNull public View getView() { return sampleAdView; }
미디에이션 이벤트를 GMA Next-Gen SDK로 전달
onSuccess()가 호출되면 어댑터가 반환된 MediationBannerAdCallback 객체
를 사용하여 프레젠테이션 이벤트를
서드 파티 SDK에서 GMA Next-Gen SDK로 전달할 수 있습니다.
SampleBannerCustomEventLoader 클래스는 SampleAdListener 인터페이스
를 확장하여 샘플 광고 네트워크의 콜백을 GMA Next-Gen SDK로 전달합니다.
맞춤 이벤트가 이러한 콜백을 최대한 많이 전달하여 앱이 Google 모바일 광고 SDK에서 동등한 이벤트를 수신하도록 하는 것이 중요합니다. 다음은 콜백을 사용하는 예입니다.
Java
@Override public void onAdFullScreen() { bannerAdCallback.onAdOpened(); bannerAdCallback.reportAdClicked(); } @Override public void onAdClosed() { bannerAdCallback.onAdClosed(); }
이렇게 하면 배너 광고의 맞춤 이벤트 구현이 완료됩니다. 전체 예시는 다음에서 확인할 수 있습니다. GitHub 이미 지원되는 광고 네트워크에 예를 사용하거나 예를 수정하여 맞춤 이벤트 배너 광고를 게재할 수 있습니다.