Impression-level revenue data는 사용자를 더 잘 이해하고, ROI를 정확하게 계산하며, 정밀한 LTV 모델을 구축하는 데 도움이 됩니다. 지원되는 network의 경우, MAX는 각 impression에 대한 데이터(매출, demand source 및 creative에 대한 정보)를 제공합니다.
이 데이터를 직접 처리할 수 있습니다. 또한 AppLovin이 지원하는 analytics provider 중 하나를 통해 데이터를 분석할 수도 있습니다(이러한 provider 목록은 이 페이지의 “MMP integration: MAX to MMP” 섹션에서 확인할 수 있습니다).
User-level revenue data를 가져오는 방법은 세 가지가 있습니다.
MAX에는 단일 dashboard에서 데이터에 액세스할 수 있도록 도와주는 analytics 파트너가 있습니다. AppLovin이 지원하는 파트너 중 누구와도 협력하여 impression-level ad revenue 또는 집계된 ad revenue 데이터에 액세스할 수 있습니다. 지원되는 파트너로는 Adjust, GameAnalytics, AppsFlyer 및 Singular이 있습니다. 해당 파트너가 제공하는 기능에 대한 자세한 내용은 해당 파트너가 유지 관리하는 설명서 페이지를 참조하세요.
이 기능을 활성화하려면 담당 어카운트 팀이나 지원 팀에 문의하세요.
AppLovin 서버는 MAX impression을 기록할 때마다 외부 엔드포인트로 postback을 보낼 수 있습니다.
이러한 요청을 받을 엔드포인트를 정의합니다.
Postback은 HTTP 또는 HTTPS GET 요청 형식입니다.
AppLovin은 impression 직후에 이러한 postback을 수행하지만 몇 분 정도 지연될 수 있습니다.
Impression timestamp 매크로를 사용하여 impression 시간과 postback 시간 사이의 지연을 조정할 수 있습니다.
엔드포인트에서 응답 없이 5초가 지나면 postback 요청이 타임아웃됩니다. Postback 요청에 대한 재시도는 없습니다.
https://myimpressionserver.com/impression?idfa={IDFA}&user_id={USER_ID}&event={EVENT_ID}&token={EVENT_TOKEN}
다음 표의 매크로를 postback URL에 통합할 수 있습니다.
위의 예시 URL에는 {IDFA}, {USER_ID}, {EVENT_ID} 및 {EVENT_TOKEN} 매크로가 포함되어 있습니다.
AppLovin 서버는 엔드포인트에 요청을 보낼 때 이러한 매크로 이름을 정확한 값으로 대체합니다.
| 이름 | 설명 |
|---|---|
{AD_UNIT_ID} | MAX ad unit ID (16진수 16자) 예시: 9ad0816ac071552a |
{AD_UNIT_NAME} | Ad unit 이름 (URL-encoded) 예시: My%20App%20Banners |
{AD_UNIT_TEST_NAME} | Ad unit 테스트 이름, URL-encoded 예시: Control |
{ALL_REVENUE} | FB Bidding 추정치를 포함한 예상 매출 예시: 0.0121, 5.74466e-05 |
{CC} | 사용자의 국가 코드 2자리 예시: gb |
{CUSTOM_DATA} | 연동에서 전달된 custom data (URL-encoded). AppLovin은 문자열 크기를 8192자 미만으로 유지할 것을 권장합니다. 이 매크로를 포함하는 경우 custom data에 앰퍼샌드(&) 문자를 포함해서는 안 됩니다.예시: my%20custom%20data |
{DEVICE_TYPE} | 사용자의 기기 유형. 예시: Tablet |
{EVENT_ID} | 고유 event ID, 16진수 40자 예시: 8dc948013d71f04264b8e5c1c61933154b226e08 |
{EVENT_TOKEN} | sha1( «event-ID» + «your-event-key» )예시: e000949f6d851c1f34adae08e6ef1076ba43cf31 |
{EVENT_TOKEN_ALL} | sha256( «알파벳 순서대로 정렬된 모든 매크로 그대로, URL-decoded가 아님» + «your-event-key» )참고: EVENT_TOKEN이 매크로 중 하나인 경우 “알파벳 순서대로 정렬된 모든 매크로” 문자열에서 제외하세요.예시: eba615583ed59bc679a495…ff6be5f218702a97a |
{FORMAT} | Ad Unit 포맷 예시: reward, banner, inter |
{IDFA} | iOS IDFA 또는 Google Advertising ID 예시: 860635ea-65bc-eaed-d355-1b5283b30b94 |
{IDFV} | Identifier for Vendor 예시: 4CD1C3C4-3FD7-00F5-1635-7BC6D9387E60 |
{IP} | 사용자의 IP 주소. (IPv6 값은 URL-encoded됨) 예시: 162.1.1.1, fe80%3A%3A1ff%3Afe23%3A4567%3A890a%0A |
{NETWORK} | Impression을 게재한 ad network의 이름. 이름은 Management API에서 사용되는 이름과 일치해야 합니다. 예시: APPLOVIN_NETWORK |
{NETWORK_PLACEMENT} | 외부 ad network의 placement 이름 예시: ca-app-pub-12345678%2F0987654321 |
{PACKAGE_NAME} | 앱 패키지 이름 (Android) 또는 Bundle ID (iOS). URL-encoded. 예시: com.test.app |
{PLACEMENT} | 퍼블리셔가 정의한 MAX ad placement 이름 (URL-encoded) 예시: Launch%20Screen |
{PLATFORM} | 플랫폼 예시: android, ios |
{PRECISION} | 매출 값의 정밀도에 대한 정보. 옵션은 다음과 같습니다:
예시: exact |
{REVENUE} | 예상 매출. FB Bidding 시 0으로 설정됩니다.예시: 0.0121, 5.74466e-05 |
{TS} | Impression 타임스탬프 (정수, epoch 이후 초 단위) 예시: 1546300800 |
{USER_ID} | 퍼블리셔가 정의한 URL-encoded 사용자 ID, 최대 길이는 8192자입니다. 예시: 7634657898 |
{WATERFALL_NAME} | Ad Unit waterfall의 이름 예시: LAT |
다음 코드 스니펫은 ad unit에 placement 이름을 추가하는 방법을 보여줍니다.
Placement 이름의 값은 postback 요청에서 {PLACEMENT} 매크로를 대체합니다:
AppLovinMAX.setBannerPlacement(«ad-unit-ID», «placement»);
AppLovinMAX.setMRecPlacement(«ad-unit-ID», «placement»);
AppLovinMAX.showInterstitial(«ad-unit-ID», «placement»);
nativeAdLoader.setPlacement(«placement»);
AppLovinMAX.showRewardedAd(«ad-unit-ID», «placement»);




UAppLovinMAX::CreateBanner(«ad-unit-ID», «position»);
UAppLovinMAX::SetBannerPlacement(«ad-unit-ID», «placement»);
UAppLovinMAX::CreateMRec(«ad-unit-ID», «position»);
UAppLovinMAX::SetMRecPlacement(«ad-unit-ID», «placement»);
UAppLovinMAX::ShowInterstitial(«ad-unit-ID», «placement»);
UAppLovinMAX::ShowInterstitial(«ad-unit-ID», «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»");
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»);
AppLovinMAX.createBanner(«ad-unit-ID», «position»);
AppLovinMAX.set_banner_placement(«ad-unit-ID», «placement»);
AppLovinMAX.createMRec(«ad-unit-ID», «position»);
AppLovinMAX.set_mrec_placement(«ad-unit-ID», «placement»);
AppLovinMAX.show_interstitial(«ad-unit-ID», «placement»);
AppLovinMAX.show_rewarded_ad(«ad-unit-ID», «placement»);
adViewAd.setPlacement( "«placement»" );
interstitial.showAd( "«placement»" );
rewardedAd.showAd( "«placement»" );
nativeAdLoader.setPlacement( "«placement»" );
MaxAdPlacerSettings settings = new MaxAdPlacerSettings( "«ad-unit-ID»" );
settings.setPlacement( "«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»);
AppLovinMAX.showRewardedAd(«ad-unit-ID», «placement»);
AppLovinMAX.createBanner(«ad-unit-ID», «position»);
AppLovinMAX.setBannerPlacement(«ad-unit-ID», «placement»);
import { AdView, AdFormat } from 'react-native-applovin-max';
⋮
<AdView adUnitId={«ad-unit-ID»}
adFormat={AdFormat.BANNER}
placement={«placement»} />
import { MRecAd } from 'react-native-applovin-max';
⋮
MRecAd.createAd(«ad-unit-ID», «position»);
MRecAd.setPlacement(«ad-unit-ID», «placement»);
import { AdView, AdFormat } from 'react-native-applovin-max';
⋮
<AdView adUnitId={«ad-unit-ID»}
adFormat={AdFormat.MREC}
placement={«placement»} />
import { InterstitialAd } from 'react-native-applovin-max';
⋮
InterstitialAd.showAd(«ad-unit-ID», "«placement»");
import { RewardedAd } from 'react-native-applovin-max';
⋮
RewardedAd.showAd(«ad-unit-ID», "«placement»");
<NativeAdView
adUnitId={«ad-unit-ID»}
placement="«placement»"
⋮
/>
adView.setPlacement( "«placement»" )
interstitial.showAd( "«placement»" )
rewardedAd.showAd( "«placement»" )
nativeAdLoader.setPlacement( "«placement»" )
val settings = MaxAdPlacerSettings( "«ad-unit-ID»" )
settings.placement = "«placement»"
applovin.create_banner(«ad-unit-ID», «position»)
applovin.set_banner_placement(«ad-unit-ID», «placement»)
applovin.create_mrec(«ad-unit-ID», «position»)
applovin.set_mrec_placement(«ad-unit-ID», «placement»)
applovin.show_interstitial(«ad-unit-ID», «placement»);
applovin.show_rewarded_ad(«ad-unit-ID», «placement»);
adView.placement = @"«placement»";
[adView loadAd];
[interstitialAd showAdForPlacement: @"«placement»"];
[rewardedAd showAdForPlacement: @"«placement»"];
nativeAdLoader.placement = @"«placement»";
MAAdPlacerSettings *settings = [MAAdPlacerSettings settingsWithAdUnitIdentifier: @"«ad-unit-ID»"];
settings.placement = @"«placement»";
adView.placement = "«placement»"
adView.loadAd()
interstitial.show(forPlacement: "«placement»")
rewardedAd.show(forPlacement: "«placement»")
nativeAdLoader.placement = "«placement»"
let settings = MAAdPlacerSettings(adUnitIdentifier: "«ad-unit-ID»")
settings.placement = @"«placement»"
다음 코드 스니펫은 자체 내부 User ID로 사용자를 태그하는 방법을 보여줍니다. User ID 문자열의 최대 크기는 8192자입니다.
AppLovinMAX.setUserId("«user-ID»");
MaxSdk.SetUserId("«user-ID»");
val settings = AppLovinSdk.getInstance( this ).getSettings();
settings.setUserIdentifier( "«user-ID»" );
AppLovinMAX.setUserId("«user-ID»");
val settings = AppLovinSdk.getInstance( this ).settings
settings.userIdentifier = "«user-ID»"
applovin.set_user_id("«user-ID»")
ALSdkSettings *settings = [ALSdk shared].settings;
settings.userIdentifier = @"«user-ID»";
let settings = ALSdk.shared().settings
settings.userIdentifier = "«user-ID»"
다음 코드 스니펫은 postback에 custom String 데이터를 추가하는 방법을 보여줍니다.
이 String 데이터는 postback에서 {CUSTOM_DATA} 매크로를 대체합니다.
AppLovin은 문자열에 8192자 미만이 포함되도록 권장합니다.
Banner ad 또는 MREC ad를 로드하기 전에 custom data를 설정해야 합니다. 그렇지 않으면 해당 데이터가 ad와 관련된 postback에 나타나지 않습니다.
MaxSdk.SetBannerCustomData("«ad-unit-ID»", "«custom-data»"); // Banners
MaxSdk.SetMRecCustomData("«ad-unit-ID»", "«custom-data»"); // MRECs
adViewAd.setCustomData( "«custom-data»" );
BannerAd.setCustomData("«ad-unit-ID»", "«custom-data»"); // Banners
MRec.setCustomData("«ad-unit-ID»", "«custom-data»"); // MRECs
adView.setCustomData( "«custom-data»" )
adView.customData = @"«custom-data»";
adView.customData = "«custom-data»"
MaxSdk.ShowInterstitial(«adUnitIdentifier», «placement», «custom data»);
MaxInterstitialAd.showAd(«placement», «custom data»);
InterstitialAd.showAd(interAdUnitId, "«placement»", "«custom data»");
MaxInterstitialAd.showAd(«placement», «custom data»)
-[MAInterstitialAd showAdForPlacement:customData:]
[interstitialAd showAdForPlacement: @"«placement»" customData: @"«custom-data»"];
MaxSdk.ShowRewardedAd(«adUnitIdentifier», «placement», «custom data»);
MaxRewardedAd.showAd(«placement», «custom data»);
RewardedAd.showAd(adUnitId, "«placement»", "«custom data»");
MaxRewardedAd.showAd(«placement», «custom data»)
-[MARewardedAd showAdForPlacement:customData:]
rewardedAd.show(forPlacement: "«placement»" customData: "«custom-data»")
nativeAdLoader.setCustomData( "«custom data»" );
<NativeAdView
adUnitId={«ad-unit-ID»}
customData="«custom-data»"
⋮
/>
nativeAdLoader.setCustomData( "«custom data»" )
nativeAdLoader.customData = @"«custom data»";
nativeAdLoader.customData = "«custom data»"