각 광고 단위에 대해 placement 이름을 설정할 수 있습니다 (예: “Rewarded VideoLevels”, “INTER_levelEnd” 또는 “RewardedVideoCoinStore”). 이를 통해 다양한 placement 카테고리에 대한 통계를 수집하는 데 도움을 받을 수 있습니다. 다음 스니펫은 다양한 광고 포맷에 대해 placement 이름을 설정하는 방법을 보여줍니다.
MaxSdk.CreateBanner(«ad-unit-ID», «position»);
MaxSdk.SetBannerPlacement(«ad-unit-ID», "«placement»");
MaxSdk.CreateMRec(«ad-unit-ID», «position»);
MaxSdk.SetMRecPlacement(«ad-unit-ID», "«placement»");
MaxSdk.ShowInterstitial(«ad-unit-ID», "«placement»");
MaxSdk.ShowRewardedAd(«ad-unit-ID», "«placement»");
Banner 및 MREC의 경우, banner 또는 MREC를 생성한 직후에 placement 이름을 설정하십시오.
앱을 실행할 때 일부 mediation SDK 네트워크에 대해 오디오를 음소거할 수 있습니다. AppLovin SDK를 통해 이 기능을 지원하는 네트워크는 다음과 같습니다.
다른 네트워크의 경우, 해당 네트워크의 담당 팀에 문의하여 이 기능의 지원 여부 및 액세스 방법을 확인하십시오.
다음 코드 스니펫은 이 기능을 지원하는 네트워크에서 오디오를 음소거하는 방법을 보여줍니다:
MaxSdk.SetMuted(true);
MaxSdk.SetMuted(false);
광고를 로드하기 전에 음소거 상태를 설정하십시오. 일부 네트워크(Google bidding 및 Google AdMob 등)는 광고 로드 전의 음소거 상태에 따라 음소거되거나 음소거 해제된 비디오를 반환합니다.
참고: 광고를 음소거하면 광고 수익이 감소할 수 있습니다.
다음 호출을 사용하여 verbose 로그를 활성화합니다.
MaxSdk.SetVerboseLogging(true);
verbose 로그가 활성화되었는지 확인하려면 AppLovin SDK 로그의 초기화 섹션에서 Verbose Logging On: true라고 표시된 라인을 확인하십시오.
AppLovin SDK
Version: 12.4.2
⋮
Verbose Logging On: true
⋮
AppLovin SDK는 로그에 “/AppLovinSdk: [AppLovinSdk]” 태그를 지정합니다.
mediated 네트워크에서 노출된 광고의 creative ID와 network name을 가져올 수 있습니다. 자세한 내용은 Creative Debugger 문서를 참조하십시오.
광고의 DspName 속성을 통해 AppLovin Exchange에서 서빙된 MAX 광고의 DSP 이름을 가져올 수 있습니다.
private void OnInterstitialLoadedEvent(string adUnitId, MaxSdk.AdInfo adInfo)
{
Debug.Log("AppLovin Exchange DSP Name: " + adInfo.DspName);
}
클라이언트 측에서 impression-level user revenue 데이터에 액세스할 수 있습니다. 이 데이터를 사용하여 다양한 소스 및 캠페인을 비교할 수 있습니다. 또한 MAX user revenue API를 사용하여 이 데이터에 액세스할 수도 있습니다.
AppLovin 블로그의 “Take Ad-Revenue Attribution to the Next Level With MAX” 글을 참고하십시오.
지원되는 모든 네트워크에 대해 Adjust와 같이 원하는 모바일 측정 파트너(MMP)와 impression-level ad revenue 데이터를 공유할 수 있습니다.
모든 광고 라이프사이클 콜백에서 revenue 금액을 가져올 수 있습니다. 다음 예시는 “ad revenue paid” 콜백에서 이를 수행하는 방법을 보여줍니다.
// 사용하는 광고 포맷에 따라 콜백을 연결합니다
MaxSdkCallbacks.Interstitial.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.Rewarded.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.Banner.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
MaxSdkCallbacks.MRec.OnAdRevenuePaidEvent += OnAdRevenuePaidEvent;
⋮
private void OnAdRevenuePaidEvent(string adUnitId, MaxSdk.AdInfo adInfo)
{
double revenue = adInfo.Revenue;
// 기타 데이터
string countryCode = MaxSdk.GetSdkConfiguration().CountryCode; // 미국의 경우 "US" 등 - 참고: 통화 코드인 "USD"와 혼동하지 마십시오
string networkName = adInfo.NetworkName; // 광고를 노출한 네트워크의 표시 이름
string adUnitIdentifier = adInfo.AdUnitIdentifier; // MAX Ad Unit ID
string placement = adInfo.Placement; // 이 광고의 포스트백이 연결된 placement
string networkPlacement = adInfo.NetworkPlacement; // 광고를 노출한 네트워크의 placement ID
}
Revenue가 -1인 경우, 이는 오류를 나타냅니다.
다음 예시와 같이 revenue 값에 대한 정밀도 평가(precision evaluation)를 가져올 수도 있습니다.
string revenuePrecision = adInfo.RevenuePrecision;
이 정밀도는 다음 값 중 하나를 가집니다.
"publisher_defined""exact""estimated""undefined"""특정 광고 단위로 SDK를 초기화할 수 있습니다. 그렇게 하면 SDK는 지정한 광고 단위에 대해 구성한 네트워크만 초기화합니다. (광고 단위를 지정하지 않으면 SDK는 현재 세션에 모든 광고 단위가 필요하다고 가정합니다. 이 경우 해당 광고 단위에 대해 구성한 모든 네트워크를 초기화합니다.) 다음 예시는 이 기능을 구현하는 방법을 보여줍니다.
MaxSdkCallbacks.OnSdkInitializedEvent += (MaxSdk.SdkConfiguration config) => {
⋮
};
MaxSdk.InitializeSdk(new[]{"«ad-unit-ID-1»", "«ad-unit-ID-2»"});
selective init을 사용하면, MAX는 명시적으로 지정하지 않은 광고 단위를 현재 세션의 광고 서빙에서 제외합니다.
테스트 모드를 활성화한 경우 selective init은 적용되지 않습니다.
Waterfall Information API는 광고(로드되었거나 로드에 실패한 광고)의 현재 waterfall에 대한 정보를 제공합니다. 이 API는 waterfall에 있는 각 광고의 광고 로드 상태, 지연 시간(latency), 자격 증명(credentials) 및 mediated 네트워크 정보를 반환합니다. waterfall의 광고가 로드에 실패하면 API는 오류 정보를 제공합니다.
| 값 | 설명 |
|---|---|
| 0 | Ad Load Not Attempted |
| 1 | Ad Loaded |
| 2 | Ad Failed To Load |
private void OnInterstitialLoadedEvent(string adUnitId, MaxSdk.AdInfo adInfo)
{
print("Waterfall Name: " + adInfo.WaterfallInfo.Name + " and Test Name: " + adInfo.WaterfallInfo.TestName);
print("Waterfall latency was: " + adInfo.WaterfallInfo.LatencyMillis + " milliseconds");
string waterfallInfoStr = "";
foreach (var networkResponse in adInfo.WaterfallInfo.NetworkResponses)
{
waterfallInfoStr = "Network -> " + networkResponse.MediatedNetwork +
"\n...adLoadState: " + networkResponse.AdLoadState +
"\n...latency: " + networkResponse.LatencyMillis + " milliseconds" +
"\n...credentials: " + networkResponse.Credentials;
if(networkResponse.Error != null)
{
waterfallInfoStr += "\n...error: " + networkResponse.Error;
}
}
print(waterfallInfoStr);
}
private void OnInterstitialLoadFailedEvent(string adUnitId, MaxSdk.ErrorInfo errorInfo)
{
print("Waterfall Name: " + errorInfo.WaterfallInfo.Name + " and Test Name: " + errorInfo.WaterfallInfo.TestName);
print("Waterfall latency was: " + errorInfo.WaterfallInfo.LatencyMillis + " milliseconds");
foreach (var networkResponse in errorInfo.WaterfallInfo.NetworkResponses)
{
print("Network -> " + networkResponse.MediatedNetwork +
"\n...latency: " + networkResponse.LatencyMillis + " milliseconds" +
"\n...credentials: " + networkResponse.Credentials +
"\n...error: " + networkResponse.Error);
}
}
Waterfall Name: Default Waterfall and Test Name: Control
Waterfall latency was: 10176 milliseconds
Network -> [MediatedNetworkInfo name: Fyber, adapterClassName: ALInnteractiveMediationAdapter, adapterVersion: 8.1.1.0, sdkVersion: 8.1.1.0]
...latency: 1542 milliseconds
...credentials: System.Collections.Generic.Dictionary`2[System.String,System.Object]
...error: [ErrorInfo code: -5200, message: Unspecified Error, adLoadFailure: Load failed - Failed to load Interstitial ad]
Network -> [MediatedNetworkInfo name: AppLovin, adapterClassName: ALAppLovinMediationAdapter, adapterVersion: 10.3.7, sdkVersion: 10.3.7]
...adLoadState: AdLoaded
...latency: 245 milliseconds
...credentials: System.Collections.Generic.Dictionary`2[System.String,System.Object]
Ad Unit UI에서 구성할 수 있는 것처럼, 연동 과정에서 직접 banner 및 MREC 광고 refresh 주기를 커스텀할 수 있습니다. 최소 refresh 주기는 10초입니다. 최대 refresh 주기는 120초입니다. MAX는 이 범위를 벗어나는 값을 무시합니다. 다음 코드 샘플은 이러한 refresh 주기를 커스텀하는 방법을 보여줍니다.
MaxSdk.SetBannerExtraParameter(«ad-unit-ID», "ad_refresh_seconds", «ad-refresh-rate»)
MaxSdk.SetMRecExtraParameter(«ad-unit-ID», "ad_refresh_seconds", «ad-refresh-rate»)