高级设置
广告位
您可以为每个广告单元设置广告位名称 (例如 “Rewarded VideoLevels”、“INTER_levelEnd” 或 “RewardedVideoCoinStore”)。 这可以帮助您汇总不同广告位类别的统计数据。 下面的片段展示了如何为不同的广告格式设置广告位名称。
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»);
静音
您可以在启动应用时将某些 SDK 平台的音频设为关闭。 通过 AppLovin SDK 支持该功能的平台包括 Google 竞价和 Google AdMob、AppLovin、DT Exchange、Google Ad Manager、LINE、Mintegral、腾讯和 Verve。 对于其他平台,请咨询平台客户团队,了解此功能是否可用以及使用方法。
下面的代码片段展示了如何在支持静音的平台中设置静音:
AppLovinMAX.setMuted(true);
AppLovinMAX.setMuted(false);
启用详细日志
通过以下方式启用详细日志:
AppLovinMAX.setVerboseLogging(true);
要验证是否已成功启用详细日志,请查看 AppLovin SDK 日志初始化部分中是否有 Verbose Logging On: true
行。
AppLovin SDKVersion: 11.4.2⋮Verbose Logging On: true⋮
AppLovin SDK 的日志标签为 “/AppLovinSdk: [AppLovinSdk]
”。
Creative ID 和平台名称
您可以调取各个聚合平台已展示广告的 Creative ID 和平台名称。 请参阅 the Creative Debugger documentation 了解更多信息。
DSP 名称
您可以通过广告的 dspName
属性调取 AppLovin Exchange 投放的 MAX 广告的 DSP 名称:
AppLovinMAX.setInterstitialListener(InterstitialListener( onAdLoadedCallback: (ad) { print("AppLovin Exchange DSP Name: " + ad.dspName); }, ⋮);
展示层级 User Revenue API
从 Flutter Plugin 2.2.0 开始,您可以在客户端访问展示级别的用户收入数据,并且使用此数据来比较不同的来源和 campaign。您也可以使用 MAX User Revenue API 访问此数据。
您可以针对所有受支持的平台与 Adjust 等移动监测合作伙伴分享展示层级广告收入数据。
您可以在所有广告生命周期回传中调取收入金额。 以下示例展示了如何在 “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'); }))
选择性初始化
从 Flutter plugin 3.4.0 版本开始,您可以针对指定广告单元初始化 SDK。 此时,SDK 只会初始化您为指定广告单元配置的广告平台。 (如果未指定任何广告单元,SDK 会假定当前会话需要您的所有广告单元。 此时,SDK 会初始化您为所有广告单元配置的全部平台。) 以下示例展示了如何实施此功能:
AppLovinMAX.setInitializationAdUnitIds([ "«ad-unit-ID-1»", "«ad-unit-ID-2»" ]);MaxConfiguration? configuration = await AppLovinMAX.initialize(«your-SDK-key»);
Waterfall Information API
Waterfall Information API 可向您展示广告的当前瀑布流 (已加载或加载失败的广告)。 API 会返回瀑布流中每则广告的广告加载状态、延迟、配置信息和聚合平台信息。 如果瀑布流中的广告加载失败,API 会提供错误信息。
Flutter plugin 2.3.2 及之后的版本支持该 API。
AdLoadState Values
值 | 解释 |
---|---|
0 | 未尝试加载广告 |
1 | 广告已加载 |
2 | 广告加载失败 |
示例
AppLovinMAX.setInterstitialListener(InterstitialListener( onAdLoadedCallback: (ad) { MaxAdWaterfallInfo waterfall = ad.waterfall;
print('Waterfall Name: ${waterfall.name} and Test Name: ${waterfall.testName}'); print('Waterfall latency was: ${waterfall.latency} 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.latency}'); 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.latency} 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.latency}'); 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: ControlWaterfall latency was: 1635 millisecondsNetwork -> mediatedNetwork: [name: Mintegral adapterClassName: com.applovin.mediation.adapters.MintegralMediationAdapter sdkVersion: MAL_16.2.61 adapterVersion: 16.2.61.2]...adLoadState: 1...latencyMillis: 1635...credentials: 1542105Network -> mediatedNetwork: [name: InMobi adapterClassName: com.applovin.mediation.adapters.InMobiMediationAdapter sdkVersion: 10.1.2 adapterVersion: 10.1.2.1]...adLoadState: 0...latencyMillis: -1...credentials: 1550734895971Network -> mediatedNetwork: [name: LINE adapterClassName: com.applovin.mediation.adapters.LineMediationAdapter sdkVersion: 2.4.20220216 adapterVersion: 2022.2.16.3]...adLoadState: 0...latencyMillis: -1...credentials: 849050Network -> 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