각 ad unit에 대해 placement를 설정할 수 있습니다 (예: “Rewarded VideoLevels”, “INTER_levelEnd”, 또는 “RewardedVideoCoinStore”). 이를 통해 다양한 placement 카테고리에 대한 통계를 수집할 수 있습니다. 다음 스니펫은 다양한 광고 포맷에 대해 placement를 설정하는 방법을 보여줍니다.
AppLovinMAX.createBanner(«ad-unit-ID», «position»);
AppLovinMAX.setBannerPlacement(«ad-unit-ID», «placement»);
AppLovinMAX.createMRec(«ad-unit-ID», «position»);
AppLovinMAX.setMRecPlacement(«ad-unit-ID», «placement»);
AppLovinMAX.showInterstitial(«ad-unit-ID», placement: «placement»);
AppLovinMAX.showRewardedAd(«ad-unit-ID», placement: «placement»);
앱을 실행할 때 일부 mediation SDK network에 대해 오디오를 음소거할 수 있습니다. AppLovin SDK를 통해 이 기능을 지원하는 network는 다음과 같습니다.
다른 network의 경우, 해당 network의 담당 팀에 문의하여 이 기능의 지원 여부 및 액세스 방법을 확인하십시오.
다음 코드 스니펫은 이 기능을 지원하는 network에서 오디오를 음소거하는 방법을 보여줍니다:
AppLovinMAX.setMuted(true);
AppLovinMAX.setMuted(false);
다음 호출을 통해 상세 로그를 활성화합니다.
AppLovinMAX.setVerboseLogging(true);
상세 로그가 활성화되었는지 확인하려면 AppLovin SDK 로그의 초기화 섹션에서 Verbose Logging On: true라고 표시된 줄을 확인하십시오.
AppLovin SDK
Version: 12.4.2
⋮
Verbose Logging On: true
⋮
AppLovin SDK는 로그에 “/AppLovinSdk: [AppLovinSdk]” 태그를 지정합니다.
노출된 광고의 creative ID와 mediation network 이름을 가져올 수 있습니다. 자세한 내용은 Creative Debugger 문서를 참조하십시오.
광고의 dspName 속성을 통해 AppLovin Exchange에서 서빙된 MAX 광고의 DSP 이름을 가져올 수 있습니다.
AppLovinMAX.setInterstitialListener(InterstitialListener(
onAdLoadedCallback: (ad) {
print("AppLovin Exchange DSP Name: " + ad.dspName);
},
⋮
);
클라이언트 측에서 impression-level user revenue 데이터에 액세스할 수 있습니다. 이 데이터를 사용하여 다양한 소스 및 캠페인을 비교할 수 있습니다. 또한 MAX user revenue API를 사용하여 이 데이터에 액세스할 수도 있습니다.
AppLovin 블로그의 “Take Ad-Revenue Attribution to the Next Level With MAX”
지원되는 모든 network에 대해 Adjust 등 원하는 모바일 측정 파트너(MMP)와 impression-level ad revenue 데이터를 공유할 수 있습니다.
모든 광고 라이프사이클 콜백에서 revenue 금액을 가져올 수 있습니다. 다음 예시는 “ad revenue paid” 콜백에서 이를 수행하는 방법을 보여줍니다.
AppLovinMAX.setInterstitialListener(InterstitialListener(onAdRevenuePaidCallback: (ad) {…}));
AppLovinMAX.setRewardedAdListener(RewardedAdListener(onAdRevenuePaidCallback: (ad) {…}));
AppLovinMAX.setBannerListener(AdViewAdListener(onAdRevenuePaidCallback: (ad) {…}));
AppLovinMAX.setMRecListener(AdViewAdListener(onAdRevenuePaidCallback: (ad) {…}));
AppLovinMAX.setInterstitialListener(InterstitialListener(onAdLoadedCallback: (ad) { },
onAdLoadFailedCallback: (adUnitId, error) { },
onAdDisplayedCallback: (ad) { },
onAdDisplayFailedCallback: (ad, error) { },
onAdClickedCallback: (ad) { },
onAdHiddenCallback: (ad) { },
onAdRevenuePaidCallback: (ad) {
print('Interstitial ad revenue paid: ${ad.revenue}');
},
));
MaxAdView(
adUnitId: _ad_unit_id,
adFormat: AdFormat.banner,
listener: AdViewAdListener(onAdLoadedCallback: (ad) { },
onAdLoadFailedCallback: (adUnitId, error) { },
onAdClickedCallback: (ad) { },
onAdExpandedCallback: (ad) { },
onAdCollapsedCallback: (ad) { },
onAdRevenuePaidCallback: (ad) {
print('Banner widget ad revenue paid: ${ad.revenue}');
}))
특정 ad unit으로 SDK를 초기화할 수 있습니다. 그렇게 하면 SDK는 지정한 ad unit에 대해 구성한 network만 초기화합니다. (ad unit을 지정하지 않으면 SDK는 현재 세션에 모든 ad unit이 필요하다고 가정합니다. 그런 다음 해당 ad unit에 대해 구성한 모든 network를 초기화합니다.) 다음 예시는 이 기능을 구현하는 방법을 보여줍니다.
AppLovinMAX.setInitializationAdUnitIds([ "«ad-unit-ID-1»", "«ad-unit-ID-2»" ]);
MaxConfiguration? configuration = await AppLovinMAX.initialize(«your-SDK-key»);
선택적 초기화를 사용할 때, MAX는 명시적으로 지정하지 않은 ad unit이 현재 세션에서 광고를 서빙하지 못하도록 제외합니다.
선택적 초기화는 테스트 모드를 활성화한 경우에는 적용되지 않습니다.
Waterfall Information API는 광고(로드되었거나 로드에 실패한 광고)의 현재 waterfall에 대한 정보를 제공합니다. 이 API는 waterfall에 있는 각 광고의 ad load state, latency, 자격 증명(credentials) 및 mediation network 정보를 반환합니다. waterfall의 광고가 로드에 실패하면 API는 에러 정보를 제공합니다.
| 값 | 설명 |
|---|---|
| 0 | Ad Load Not Attempted |
| 1 | Ad Loaded |
| 2 | Ad Failed To Load |
AppLovinMAX.setInterstitialListener(InterstitialListener(
onAdLoadedCallback: (ad) {
MaxAdWaterfallInfo waterfall = ad.waterfall;
print('Waterfall Name: ${waterfall.name} and Test Name: ${waterfall.testName}');
print('Waterfall latency was: ${waterfall.latencyMillis} milliseconds');
for (var networkResponse in waterfall.networkResponses) {
var mediatedNetwork = networkResponse.mediatedNetwork;
print('Network - mediatedNetwork: [name: ${mediatedNetwork.name} '
'adapterClassName: ${mediatedNetwork.adapterClassName} '
'sdkVersion: ${mediatedNetwork.sdkVersion} '
'adapterVersion: ${mediatedNetwork.adapterVersion}');
print('...adLoadState: ${networkResponse.adLoadState}');
print('...latencyMillis: ${networkResponse.latencyMillis}');
print('...credentials: ${networkResponse.credentials}');
var error = networkResponse.error;
if (error != null) {
print('...error code: ${error.code} message: ${error.message}');
}
}
},
onAdLoadFailedCallback: (adUnitId, error) {
MaxAdWaterfallInfo? waterfall = error.waterfall;
if (waterfall == null) return;
print('Waterfall Name: ${waterfall.name} and Test Name: ${waterfall.testName}');
print('Waterfall latency was: ${waterfall.latencyMillis} milliseconds');
for (var networkResponse in waterfall.networkResponses) {
var mediatedNetwork = networkResponse.mediatedNetwork;
print('Network - mediatedNetwork: [name: ${mediatedNetwork.name} '
'adapterClassName: ${mediatedNetwork.adapterClassName} '
'sdkVersion: ${mediatedNetwork.sdkVersion} '
'adapterVersion: ${mediatedNetwork.adapterVersion}');
print('...adLoadState: ${networkResponse.adLoadState}');
print('...latencyMillis: ${networkResponse.latencyMillis}');
print('...credentials: ${networkResponse.credentials}');
var error = networkResponse.error;
if (error != null) {
print('...error code: ${error.code} message: ${error.message}');
}
}
}
));
Waterfall Name: Default Waterfall and Test Name: Control
Waterfall latency was: 1635 milliseconds
Network -> mediatedNetwork: [name: Mintegral adapterClassName: com.applovin.mediation.adapters.MintegralMediationAdapter sdkVersion: MAL_16.2.61 adapterVersion: 16.2.61.2]
...adLoadState: 1
...latencyMillis: 1635
...credentials: 1542105
Network -> mediatedNetwork: [name: InMobi adapterClassName: com.applovin.mediation.adapters.InMobiMediationAdapter sdkVersion: 10.1.2 adapterVersion: 10.1.2.1]
...adLoadState: 0
...latencyMillis: -1
...credentials: 1550734895971
Network -> mediatedNetwork: [name: LINE adapterClassName: com.applovin.mediation.adapters.LineMediationAdapter sdkVersion: 2.4.20220216 adapterVersion: 2022.2.16.3]
...adLoadState: 0
...latencyMillis: -1
...credentials: 849050
Network -> mediatedNetwork: [name: Pangle adapterClassName: com.applovin.mediation.adapters.ByteDanceMediationAdapter sdkVersion: 4.8.0.9 adapterVersion: 4.8.0.9.0]
...adLoadState: 0
...latencyMillis: -1
...credentials: 980040498