高级设置

广告位

您可以为每个广告单元设置广告位名称 (例如 “Rewarded VideoLevels”、“INTER_levelEnd” 或 “RewardedVideoCoinStore”)。 这可以帮助您汇总不同广告位类别的统计数据。 下面的片段展示了如何为不同的广告格式设置广告位名称。

banner / MREC

对于 banner 和 MREC,您必须在加载 banner 或 MREC 之前设置广告位名称。

adView.setPlacement( "«placement»" );
adView.loadAd();

interstitial

interstitial.showAd( "«placement»" );

rewarded 广告

rewardedAd.showAd( "«placement»" );

native 广告

nativeAdLoader.setPlacement( "«placement»" );

native 广告 (ad placer)

MaxAdPlacerSettings settings = new MaxAdPlacerSettings( "«ad-unit-ID»" );
settings.setPlacement( "«placement»" );

静音

您可以在启动应用时将某些 mediation SDK network 的音频设为静音。 通过 AppLovin SDK 支持此功能的 network 如下:

  • AppLovin
  • Bigo (仅限 native)
  • DT Exchange
  • Google Ad Manager
  • Google bidding 和 Google AdMob
  • LINE
  • Mintegral

对于其他 network,请咨询您的 network 账户团队,了解此功能是否可用以及如何访问。

下面的代码片段展示了如何在支持此功能的 network 中静音音频:

AppLovinSdk sdk = AppLovinSdk.getInstance( context );
sdk.getSettings().setMuted( true );  // to mute
sdk.getSettings().setMuted( false ); // to unmute

在加载广告之前设置静音状态。 有些 network (如 Google bidding 和 Google AdMob) 会基于广告加载前的静音状态返回静音或未静音的视频。

注意:静音广告可能会导致广告收入下降。

启用详细日志

在 SDK 设置对象中设置布尔标记,以启用详细日志:

通过编程方式

AppLovinSdk.getInstance( context ).getSettings().setVerboseLogging( true );

Android Manifest

您还可以编辑应用程序的 Android Manifest 文件,以启用详细日志。 为此,请按照下列方式添加 <meta-data> 元素:

<application>
⋮
  <meta-data android:name="applovin.sdk.verbose_logging" android:value="true" />
⋮
</application>

验证

要验证是否已成功启用详细日志,请查看 AppLovin SDK 日志初始化部分中是否有 Verbose Logging On: true 行。

AppLovin SDK
Version: 12.4.2
⋮
Verbose Logging On: true
⋮

AppLovin SDK 的日志标签为 “/AppLovinSdk: [AppLovinSdk]”。

Creative ID 和 network 名称

您可以调取各个聚合 network 已展示广告的 Creative ID 和 network 名称。 请参阅 Creative Debugger 文档了解更多信息。

DSP 名称

要调取 AppLovin Exchange 投放的 MAX 广告的 DSP 名称,请调用广告的 getDspName() 方法:

@Override
public void onAdLoaded(final MaxAd ad)
{
  System.out.println( "AppLovin Exchange DSP name: " + ad.getDspName() );
}

impression 层级用户收入 API

您可以在客户端访问 impression 层级的用户收入数据。 您可以使用此数据来比较不同的来源 and campaign。 您也可以使用 MAX 用户收入 API 访问此数据。 需要访问此数据的 MMP,请参阅针对 MMP 的 impression 层级用户收入 API 文档。

您可以针对所有受支持的 network 与 Adjust 等移动监测合作伙伴分享 impression 层级广告收入数据。

您可以在所有广告生命周期回传中调取收入金额。 为此,请创建一个 MaxAdRevenueListener,实现它的 onAdRevenuePaid() 方法,然后将该监听器传递至 setRevenueListener()。 以下示例展示了如何在 “ad revenue paid” 回传中执行此操作:

@Override
public void onAdRevenuePaid(final MaxAd ad)
{
  double revenue = ad.getRevenue(); // In USD

  // Miscellaneous data
  String countryCode = AppLovinSdk.getInstance( context ).getConfiguration().getCountryCode(); // "US" for the United States, etc - Note: Do not confuse this with currency code which is "USD"
  String networkName = ad.getNetworkName(); // Display name of the network that showed the ad
  String adUnitId = ad.getAdUnitId(); // The MAX Ad Unit ID
  MaxAdFormat adFormat = ad.getFormat(); // The ad format of the ad (e.g. BANNER, MREC, INTERSTITIAL, REWARDED)
  String placement = ad.getPlacement(); // The placement this ad's postbacks are tied to
  String networkPlacement = ad.getNetworkPlacement(); // The placement ID from the network that showed the ad
}

出现错误时,ad.getRevenue()/ad.revenue 的值可能为 -1

您还可以获取收入值的精确度评估,如下所示:

String revenuePrecision = ad.getRevenuePrecision();

该精确度采用下列值之一:

"publisher_defined"
收入金额为开发者指定的价格
"exact"
收入金额为实时 auction 的结果
"estimated"
收入金额基于 Auto-CPM 或 FB Bidding 估算
"undefined"
未定义收入金额,也没有足够的数据来估算
""
收入和精确度无效 (例如在测试模式下)

建立广告请求回传

要监听广告请求,请设置 MaxAdRequestListener,实现其 onAdRequestStarted() 方法,并将该监听器传递给 setRequestListener()。 以下示例展示了如何实现此类 “ad request started” 回传:

@Override
public void onAdRequestStarted(final String adUnitId)
{
  // Ad request started here
}

选择性初始化

您可以通过在 AppLovinSdkInitializationConfiguration 中指定广告单元,来使用特定的广告单元初始化 SDK。 如果这样做,SDK 将仅初始化您为所指定广告单元配置的 network。 如果您未指定任何广告单元,SDK 将假定当前会话需要您的所有广告单元。 在这种情况下,它会初始化您为这些广告单元配置的所有 network。 以下示例展示了如何实现此功能:

AppLovinSdkInitializationConfiguration.Builder initConfigBuilder = AppLovinSdkInitializationConfiguration.builder( «your-SDK-key» );
initConfigBuilder.setMediationProvider( AppLovinMediationProvider.MAX );
List<String> adUnitIds = new ArrayList<>();
adUnitIds.add( "«ad-unit-ID-1»" );
adUnitIds.add( "«ad-unit-ID-2»" );
initConfigBuilder.setAdUnitIds( adUnitIds ).build();

AppLovinSdk.getInstance( this ).initialize( initConfigBuilder, new AppLovinSdk.SdkInitializationListener()
  {
    @Override
    public void onSdkInitialized(final AppLovinSdkConfiguration sdkConfig)
    {
      ⋮
    }
  } );

您可以在 AppLovin dashboard 的 Account > General > Keys 部分找到您的 SDK key。

当您使用选择性初始化时,MAX 会在当前会话中排除任何您未明确指定的广告单元来展示广告。

当您启用 测试模式 时,选择性初始化将不起作用。

waterfall 信息 API

waterfall 信息 API 可向您展示广告的当前 waterfall (已加载或加载失败的广告)。 API 会返回 waterfall 中每则广告的广告加载状态、延迟、配置信息和聚合 network 信息。 如果 waterfall 中的广告加载失败,API 会提供错误信息。

AdLoadState 值

解释
0未尝试加载广告
1广告已加载
2广告加载失败

示例

@Override
public void onAdLoaded(final MaxAd ad)
{
  MaxAdWaterfallInfo waterfall = ad.getWaterfall();
  if ( waterfall == null ) return;
  System.out.println( "Waterfall Name: " + waterfall.getName() + " and Test Name: " + waterfall.getTestName() );
  System.out.println( "Waterfall latency was: " + waterfall.getLatencyMillis() + " milliseconds" );

  String waterfallInfoStr;
  for ( MaxNetworkResponseInfo networkResponse : waterfall.getNetworkResponses() )
  {
    waterfallInfoStr = "Network -> " + networkResponse.getMediatedNetwork() +
            "\n...adLoadState: " + networkResponse.getAdLoadState() +
            "\n...latency: " + networkResponse.getLatencyMillis() + " milliseconds" +
            "\n...credentials: " + networkResponse.getCredentials();
    if ( networkResponse.getError() != null )
    {
      waterfallInfoStr += "\n...error: " + networkResponse.getError();
    }
    System.out.println( waterfallInfoStr );
  }
}

@Override
public void onAdLoadFailed(final String adUnitId, final MaxError error)
{
  MaxAdWaterfallInfo waterfall = error.getWaterfall();
  if ( waterfall == null ) return;
  System.out.println( "Waterfall Name: " + waterfall.getName() + " and Test Name: " + waterfall.getTestName() );
  System.out.println( "Waterfall latency was: " + waterfall.getLatencyMillis() + " milliseconds" );

  for ( MaxNetworkResponseInfo networkResponse : waterfall.getNetworkResponses() )
  {
    System.out.println( "Network -> " + networkResponse.getMediatedNetwork() +
                        "...latency: " + networkResponse.getLatencyMillis() +
                        "...credentials: " + networkResponse.getCredentials() + " milliseconds" +
                        "...error: " + networkResponse.getError() );
  }
}

如果 waterfall 为空,MaxError.getWaterfall() 将返回 null。 如果是这样,您将无法查询 waterfall 属性。 但是,您可以通过调用 getRequestLatencyMillis() 方法来获取空 waterfall 的广告加载延迟:

@Override
public void onAdLoaded(final MaxAd ad)
{
  System.out.println("Successful ad load latency: " + ad.getRequestLatencyMillis() + " ms");
}

@Override
public void onAdLoadFailed(final String adUnitId, final MaxError error)
{
  System.out.println("Failed ad load latency: " + error.getRequestLatencyMillis() + " ms");
}

自定义 banner / MREC 广告刷新

您可以通过 API 自定义 banner 和 MREC 广告的刷新间隔,就像在广告单元 UI 中配置它们一样。 允许的最小和最大刷新间隔分别为 10 秒和 120 秒。 MAX 会忽略这些限制之外的值。 以下代码示例展示了如何自定义这些刷新间隔:

// Where adView is an instance of MaxAdView
adView.setExtraParameter( "ad_refresh_seconds", «ad-refresh-rate» );

search