S2S 展示收益 API
展示层级收入数据能帮助您更好地理解用户,精准计算 ROI,并打造精确的 LTV 模型。对于受支持的平台,MAX 会为您提供每个展示的数据,包括收入、广告来源和素材信息。
您可以直接自行处理这些数据,也可以联系任何一个我们支持的数据分析服务提供商。要查看此类提供商的列表,请前往本页的MMP 集成: MAX 到 MMP 部分。
将 MAX 接入您的应用
您可以通过以下三种方式获取用户层级收入数据:
- 用户收入 API: 使用该 API 调取每日用户层级收入数据。您可以用两种形式导出这些数据:汇总某个特定用户的数据,或以每次展示一行的形式导出。数据会在 UTC 当日结束 8 小时后提供。要了解更多信息,请参阅用户收入 API 文档页面。
- 客户端: 您可以在客户端实时访问展示层级用户收入数据。在本文档中,您可以找到 Android 和 iOS 的集成说明。
- 服务器端到服务器端: 您也可以在服务器端访问实时收入数据。为此,请提供一个展示回调,用于跟踪展示层级用户广告收入数据。请联系您的客户团队或支持团队,以启用该功能。 要进一步了解此功能以及展示回调支持的宏,参阅本页面的服务器端到服务器端展示收入 API 部分。
MMP 集成:MAX 到 MMP
MAX 拥有多位数据分析合作伙伴,能帮您在单个控制面板中轻松访问所有数据。您可以选择与我们支持的任何伙伴合作,访问展示层级广告收入或汇总的广告收入数据。受支持的合作伙伴包括 Adjust、GameAnalytics、AppsFlyer 和 Singular。要了解这些合作伙伴的更多解决方案和功能,请参阅由他们维护的文档页面。
服务器端到服务器端展示收入 API
请联系您的客户团队或支持团队,以启用该功能。
每次 MAX 记录到展示时,AppLovin 的服务器就可以向外部终端发送回调。您可以指定接收这些请求的终端。回调采用 HTTP 或 HTTPS GET
请求的形式。AppLovin 会在展示后立即发送回调,但也可能发生几分钟的延迟。您可以使用展示时间戳宏,弥合展示与回调时间之间的延迟。
如果 5 秒后,您的终端没有做出响应,那么回调请求就会超时。回调请求不可重试。
示例
https://myimpressionserver.com/impression?idfa={IDFA}&user_id={USER_ID}&event={EVENT_ID}&token={EVENT_TOKEN}
可用宏
您可以将下表中的任意宏加入到回调 URL 。上述示例 URL 中包含 {IDFA}
、{USER_ID}
、{EVENT_ID}
和 {EVENT_TOKEN}
宏。当 AppLovin 服务器向您的终端发出请求时,这些宏就会被准确的值代替。
名称 | 描述 |
---|---|
{AD_UNIT_ID} | MAX ad unit ID (16 位十六进制字符) 示例: 9ad0816ac071552a |
{AD_UNIT_NAME} | 广告单元名称 (URL 编码) 示例: My%20App%20Banners |
{AD_UNIT_TEST_NAME} | 广告单元测试名称 (URL 编码) 示例: Control |
{ALL_REVENUE} | 估算收入,包括 FB 竞价的估算收入 示例: 0.0121 、5.74466e-05 |
{CC} | 用户国家/地区代码 (两个字母) 示例: gb |
{CUSTOM_DATA} | 从集成传入的自定义数据 (URL 编码)。AppLovin 建议字符串的长度不要超过 8192 个字符。如果您加入了此宏,那么自定义数据中就不能包含与号 ( & )。示例: my%20custom%20data |
{DEVICE_TYPE} | 用户的设备类型。 示例: Tablet |
{EVENT_ID} | 唯一事件 ID (40 位十六进制字符) 示例: 8dc948013d71f04264b8e5c1c61933154b226e08 |
{EVENT_TOKEN} | sha1( «event-ID» + «your-event-key» ) 示例: e000949f6d851c1f34adae08e6ef1076ba43cf31 |
{EVENT_TOKEN_ALL} | sha256( «按字母顺序排列的所有宏的原始形式, 未进行 URL 编码» + «your-event-key» ) 请注意: 如果您的宏中包含 EVENT_TOKEN ,请在按字母顺序排列所有宏的字符串时将其省略。示例: eba615583ed59bc679a495…ff6be5f218702a97a |
{FORMAT} | 广告单元格式 示例: reward 、banner 、inter |
{IDFA} | iOS IDFA 或 Google 广告 ID 示例: 860635ea-65bc-eaed-d355-1b5283b30b94 |
{IDFV} | 供应商标识符 示例: 4CD1C3C4-3FD7-00F5-1635-7BC6D9387E60 |
{IP} | 用户 IP 地址。(IPv6 的值已进行 URL 编码) 示例: 162.1.1.1 、fe80%3A%3A1ff%3Afe23%3A4567%3A890a%0A |
{NETWORK} | 展示广告的平台名称。名称应与 Management API 中使用的名称相同。 示例: APPLOVIN_NETWORK |
{NETWORK_PLACEMENT} | 外部广告平台的广告位名称 示例: ca-app-pub-12345678%2F0987654321 |
{PACKAGE_NAME} | 应用包名 (Android) 或 Bundle ID (iOS)。URL 编码。 |
{PLACEMENT} | 开发者定义的 MAX 广告位名称 (URL 编码) 示例: Launch%20Screen |
{PLATFORM} | 平台 示例: android 、ios |
{PRECISION} | 有关收入值精确度的信息。选项如下:
示例: exact |
{REVENUE} | 估算收入。FB 竞价时设置为 0 。示例: 0.0121 、5.74466e-05 |
{TS} | 展示时间戳 (整数,UNIX 时间秒数) 示例: 1546300800 |
{USER_ID} | 开发者定义的、经过 URL 编码的用户 ID;长度不超过 8192 个字符 示例: 7634657898 |
{WATERFALL_NAME} | 广告单元瀑布流的名称 示例: LAT |
设置广告位名称
下面的代码片段展示了如何向广告单元添加广告位名称。
广告位名称的值会替换回调请求中的 {PLACEMENT}
宏:
ActionScript
C++
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»);
C#
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»");
Dart
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»);
GDScript
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»);
Java
adViewAd.setPlacement( "«placement»" );
interstitial.showAd( "«placement»" );
rewardedAd.showAd( "«placement»" );
nativeAdLoader.setPlacement( "«placement»" );
MaxAdPlacerSettings settings = new MaxAdPlacerSettings( "«ad-unit-ID»" );settings.setPlacement( "«placement»" );
JavaScript (Cordova)
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»);
JavaScript (React Native)
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»" ⋮/>
Kotlin
adView.setPlacement( "«placement»" )
interstitial.showAd( "«placement»" )
rewardedAd.showAd( "«placement»" )
nativeAdLoader.setPlacement( "«placement»" )
val settings = MaxAdPlacerSettings( "«ad-unit-ID»" )settings.placement = "«placement»"
Lua
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»);
Objective-C
adView.placement = @"«placement»";[adView loadAd];
[interstitialAd showAdForPlacement: @"«placement»"];
[rewardedAd showAdForPlacement: @"«placement»"];
nativeAdLoader.placement = @"«placement»";
MAAdPlacerSettings *settings = [MAAdPlacerSettings settingsWithAdUnitIdentifier: @"«ad-unit-ID»"];settings.placement = @"«placement»";
Swift
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»"
设置内部用户 ID
下面的代码片段展示了如何使用您的内部用户 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 ).settingssettings.userIdentifier = "«user-ID»"
applovin.set_user_id("«user-ID»")
ALSdkSettings *settings = [ALSdk shared].settings;settings.userIdentifier = @"«user-ID»";
let settings = ALSdk.shared().settingssettings.userIdentifier = "«user-ID»"
设置自定义数据
以下代码片段展示了如何向回调添加自定义字符串数据。
该字符串数据将替换回调中的 {CUSTOM_DATA}
宏。
AppLovin 建议字符串不要超过 8192 个字符。
横幅和 MREC
MaxSdk.SetBannerCustomData("«ad-unit-ID»", "«custom-data»"); // BannersMaxSdk.SetMRecCustomData("«ad-unit-ID»", "«custom-data»"); // MRECs
adViewAd.setCustomData( "«custom-data»" );
BannerAd.setCustomData("«ad-unit-ID»", "«custom-data»"); // BannersMRec.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»")