在将第三方 SDK 集成到自己的移动端资产中时,您需要为此类集成承担全部责任。 您和第三方 SDK 提供商必须确保数据处理过程符合规定并且妥善处理任何基于用户或设备的隐私选择或标记。
从 SDK 11.0.0 开始,支持编译开源适配器。
您可以通过两种方式下载 MAX 聚合适配器并将其集成到应用中:
请勿更改适配器的名称或包名。 否则,MAX SDK 将无法识别适配器,广告也无法加载。
勾选下方复选框,选择要通过 MAX 聚合接入的广告平台。 勾选这些复选框后,本页面会显示这些平台的具体说明。
本页面还会为您创建一个自定义的 Gradle 脚本。
将下方的自定义 Gradle 脚本复制到您的应用层级 build.gradle。
// build.gradle
repositories {
google()
mavenCentral()
maven { url "https://artifactory.bidmachine.io/bidmachine" }
maven { url "https://cboost.jfrog.io/artifactory/chartboost-ads/" }
maven { url "https://imobile-maio.github.io/maven" }
maven { url "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea" }
maven { url "https://maven.ogury.co" }
maven { url "https://artifact.bytedance.com/repository/pangle" }
maven { url "https://repo.pubmatic.com/artifactory/public-repos" }
maven { url "https://s3.amazonaws.com/smaato-sdk-releases/" }
maven { url "https://verve.jfrog.io/artifactory/verve-gradle-release" }
maven { url "https://ysonetwork.s3.eu-west-3.amazonaws.com/sdk/android" }
}
dependencies {
implementation 'com.applovin.mediation:amazon-tam-adapter:+'
implementation 'com.amazon.android:aps-sdk:+'
implementation 'com.applovin.mediation:bidmachine-adapter:+'
implementation 'com.applovin.mediation:bigoads-adapter:+'
implementation 'com.applovin.mediation:chartboost-adapter:+'
implementation 'com.google.android.gms:play-services-base:16.1.0'
implementation 'com.applovin.mediation:fyber-adapter:+'
implementation 'com.applovin.mediation:google-ad-manager-adapter:+'
implementation 'com.applovin.mediation:google-adapter:+'
implementation 'com.applovin.mediation:hyprmx-adapter:+'
implementation 'com.applovin.mediation:inmobi-adapter:+'
implementation 'com.squareup.picasso:picasso:2.8'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'com.applovin.mediation:ironsource-adapter:+'
implementation 'com.applovin.mediation:vungle-adapter:+'
implementation 'com.applovin.mediation:line-adapter:+'
implementation 'com.applovin.mediation:maio-adapter:+'
implementation 'com.applovin.mediation:facebook-adapter:+'
implementation 'com.applovin.mediation:mintegral-adapter:+'
implementation 'com.applovin.mediation:mobilefuse-adapter:+'
implementation 'com.applovin.mediation:moloco-adapter:+'
implementation 'com.applovin.mediation:ogury-presage-adapter:+'
implementation 'com.applovin.mediation:bytedance-adapter:+'
implementation 'com.applovin.mediation:pubmatic-adapter:+'
implementation 'com.applovin.mediation:smaato-adapter:+'
implementation 'com.applovin.mediation:unityads-adapter:+'
implementation 'com.applovin.mediation:verve-adapter:+'
implementation 'com.applovin.mediation:mytarget-adapter:+'
implementation 'com.applovin.mediation:yandex-adapter:+'
implementation 'com.applovin.mediation:yso-network-adapter:+'
}// build.gradle.kts
repositories {
google()
mavenCentral()
maven { url = uri("https://artifactory.bidmachine.io/bidmachine") }
maven { url = uri("https://cboost.jfrog.io/artifactory/chartboost-ads/") }
maven { url = uri("https://imobile-maio.github.io/maven") }
maven { url = uri("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea") }
maven { url = uri("https://maven.ogury.co") }
maven { url = uri("https://artifact.bytedance.com/repository/pangle") }
maven { url = uri("https://repo.pubmatic.com/artifactory/public-repos") }
maven { url = uri("https://s3.amazonaws.com/smaato-sdk-releases/") }
maven { url = uri("https://verve.jfrog.io/artifactory/verve-gradle-release") }
maven { url = uri("https://ysonetwork.s3.eu-west-3.amazonaws.com/sdk/android") }
}
dependencies {
implementation("com.applovin.mediation:amazon-tam-adapter:+")
implementation("com.amazon.android:aps-sdk:+")
implementation("com.applovin.mediation:bidmachine-adapter:+")
implementation("com.applovin.mediation:bigoads-adapter:+")
implementation("com.applovin.mediation:chartboost-adapter:+")
implementation("com.google.android.gms:play-services-base:16.1.0")
implementation("com.applovin.mediation:fyber-adapter:+")
implementation("com.applovin.mediation:google-ad-manager-adapter:+")
implementation("com.applovin.mediation:google-adapter:+")
implementation("com.applovin.mediation:hyprmx-adapter:+")
implementation("com.applovin.mediation:inmobi-adapter:+")
implementation("com.squareup.picasso:picasso:2.8")
implementation("androidx.recyclerview:recyclerview:1.1.0")
implementation("com.applovin.mediation:ironsource-adapter:+")
implementation("com.applovin.mediation:vungle-adapter:+")
implementation("com.applovin.mediation:line-adapter:+")
implementation("com.applovin.mediation:maio-adapter:+")
implementation("com.applovin.mediation:facebook-adapter:+")
implementation("com.applovin.mediation:mintegral-adapter:+")
implementation("com.applovin.mediation:mobilefuse-adapter:+")
implementation("com.applovin.mediation:moloco-adapter:+")
implementation("com.applovin.mediation:ogury-presage-adapter:+")
implementation("com.applovin.mediation:bytedance-adapter:+")
implementation("com.applovin.mediation:pubmatic-adapter:+")
implementation("com.applovin.mediation:smaato-adapter:+")
implementation("com.applovin.mediation:unityads-adapter:+")
implementation("com.applovin.mediation:verve-adapter:+")
implementation("com.applovin.mediation:mytarget-adapter:+")
implementation("com.applovin.mediation:yandex-adapter:+")
implementation("com.applovin.mediation:yso-network-adapter:+")
}将 AndroidX 库集成到您的项目中。 参阅 Migrate to AndroidX 指南,了解有关如何迁移项目的更多信息。
使用 Google AdSense、AdManager 或 AdMob 的开发者和发行商必须使用经过 Google 认证的许可管理平台 (CMP)。 要向欧洲经济区 (EEA) 或英国的用户投放广告,您的 CMP 必须集成 IAB 的透明度和许可框架。 请参阅 Privacy: “TCF v2 Consent” 了解更多信息。
在应用的 AndroidManifest.xml 中,在 <application> 标签内添加一个 <meta-data> 标签。
以下示例展示了此标签的正确属性。
请用您的 Google 竞价和 Google AdMob / Google Ad Manager 应用 ID 替换 «your-admob-app-id»。
<?xml version="1.0" encoding="utf-8"?>
<manifest … >
<application … >
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="«your-admob-app-id»"/>
⋮
</application>
</manifest>
Google AdMob 需要Android Gradle 插件 4.2.0 或更高版本,Gradle 6.7.1 或更高版本。 如果看到以下错误信息,请更新 Android Gradle 插件和 Gradle 版本:
AAPT: error: unexpected element <property> found in <manifest><application>.
compileSdkVersionGoogle 移动广告 SDK 23.1.0 及更新版本要求 compileSdkVersion 为 34 或更高。
在应用的 build.gradle 中将 compileSdkVersion 设置为 34 或更高。
请参阅 Google 移动广告 SDK 发行说明,了解最新的 compileSdkVersion 要求。
Amazon Publisher Services SDK 需要在 MAX SDK 之外进行初始化:
// Amazon requires an 'Activity' instance
AdRegistration.getInstance( "AMAZON_APP_ID", this );
AdRegistration.setMRAIDSupportedVersions( new String[] { "1.0", "2.0", "3.0" } );
AdRegistration.setMRAIDPolicy( MRAIDPolicy.CUSTOM );要在 MAX 中集成 Amazon 广告,则必须先加载 Amazon 广告。
在加载 MAX 广告之前,将 DTBAdResponse 或 AdError 传递至 MaxAdView 实例。
您可以通过调用 MaxAdView#setLocalExtraParameter() 来完成此操作。
对于自动刷新横幅广告,只需加载广告一次。
class ExampleActivity
extends Activity
{
⋮
private void loadAd()
{
String amazonAdSlotId;
MaxAdFormat adFormat;
if ( AppLovinSdkUtils.isTablet( getApplicationContext() ) )
{
amazonAdSlotId = "«Amazon-leader-slot-ID»";
adFormat = MaxAdFormat.LEADER;
}
else
{
amazonAdSlotId = "«Amazon-banner-slot-ID»";
adFormat = MaxAdFormat.BANNER;
}
// Raw size will be 320x50 for BANNERs on phones, and 728x90 for LEADERs on tablets
AppLovinSdkUtils.Size rawSize = adFormat.getSize();
DTBAdSize size = new DTBAdSize( rawSize.getWidth(), rawSize.getHeight(), amazonAdSlotId );
DTBAdRequest adLoader = new DTBAdRequest( getApplicationContext(), new DTBAdNetworkInfo( ApsAdNetwork.MAX ) );
adLoader.setSizes( size );
adLoader.loadAd( new DTBAdCallback()
{
@Override
public void onSuccess(@NonNull final DTBAdResponse dtbAdResponse)
{
// 'adView' is your instance of MaxAdView
adView.setLocalExtraParameter( "amazon_ad_response", dtbAdResponse );
adView.loadAd();
}
@Override
public void onFailure(@NonNull final AdError adError)
{
// 'adView' is your instance of MaxAdView
adView.setLocalExtraParameter( "amazon_ad_error", adError );
adView.loadAd();
}
} );
}
}class ExampleActivity : Activity()
{
private val adView: MaxAdView? = null
private fun loadAd()
{
val amazonAdSlotId: String
val adFormat: MaxAdFormat
if (AppLovinSdkUtils.isTablet(applicationContext))
{
amazonAdSlotId = "«Amazon-leader-slot-ID»"
adFormat = MaxAdFormat.LEADER
}
else
{
amazonAdSlotId = "«Amazon-banner-slot-ID»"
adFormat = MaxAdFormat.BANNER
}
// Raw size will be 320x50 for BANNERs on phones, and 728x90 for LEADERs on tablets
val rawSize = adFormat.size
val size = DTBAdSize(rawSize.width, rawSize.height, amazonAdSlotId)
val adLoader = DTBAdRequest( applicationContext, DTBAdNetworkInfo( ApsAdNetwork.MAX ) )
adLoader.setSizes(size)
adLoader.loadAd(object : DTBAdCallback
{
override fun onSuccess(dtbAdResponse: DTBAdResponse)
{
// 'adView' is your instance of MaxAdView
adView?.setLocalExtraParameter("amazon_ad_response", dtbAdResponse)
adView?.loadAd()
}
override fun onFailure(adError: AdError)
{
// 'adView' is your instance of MaxAdView
adView?.setLocalExtraParameter("amazon_ad_error", adError)
adView?.loadAd()
}
})
}
}class ExampleActivity
extends Activity
{
⋮
private void loadAd()
{
String amazonAdSlotId;
DTBAdRequest adLoader = new DTBAdRequest( getApplicationContext(), new DTBAdNetworkInfo( ApsAdNetwork.MAX ) );
adLoader.setSizes( new DTBAdSize( 300, 250, amazonAdSlotId ) );
adLoader.loadAd( new DTBAdCallback()
{
@Override
public void onSuccess(@NonNull final DTBAdResponse dtbAdResponse)
{
// 'adView' is your instance of MaxAdView
adView.setLocalExtraParameter( "amazon_ad_response", dtbAdResponse );
adView.loadAd();
}
@Override
public void onFailure(@NonNull final AdError adError)
{
// 'adView' is your instance of MaxAdView
adView.setLocalExtraParameter( "amazon_ad_error", adError );
adView.loadAd();
}
} );
}
}class ExampleActivity : Activity()
{
private val adView: MaxAdView? = null
private fun loadAd()
{
val amazonAdSlotId: String
val adLoader = DTBAdRequest( applicationContext, DTBAdNetworkInfo( ApsAdNetwork.MAX ) )
adLoader.setSizes(DTBAdSize(300, 250, amazonAdSlotId))
adLoader.loadAd(object : DTBAdCallback
{
override fun onSuccess(dtbAdResponse: DTBAdResponse)
{
// 'adView' is your instance of MaxAdView
adView!!.setLocalExtraParameter("amazon_ad_response", dtbAdResponse)
adView.loadAd()
}
override fun onFailure(adError: AdError)
{
// 'adView' is your instance of MaxAdView
adView!!.setLocalExtraParameter("amazon_ad_error", adError)
adView.loadAd()
}
})
}
}要集成 Amazon 插屏广告到 MAX,您必须先加载 Amazon 广告。
在加载 MAX 广告之前,将 DTBAdResponse 或 AdError 传递至 MaxInterstitialAd 实例。您可以通过调用 MaxInterstitialAd#setLocalExtraParameter() 来完成此操作。
在每个会话中,您只能加载一次 Amazon DTBAdResponse 或 DTBAdErrorInfo 并将其发送到 MaxInterstitialAd 实例。
class ExampleActivity
extends Activity
{
private static MaxInterstitialAd interstitialAd; // static to ensure only one instance exists
private static boolean isFirstLoad = true;
private void loadAd()
{
if ( isFirstLoad )
{
isFirstLoad = false;
if ( interstitialAd == null )
{
interstitialAd = new MaxInterstitialAd( "«MAX-inter-ad-unit-ID»" );
}
DTBAdRequest adLoader = new DTBAdRequest( getApplicationContext(), new DTBAdNetworkInfo( ApsAdNetwork.MAX ) );
adLoader.setSizes( new DTBAdSize.DTBInterstitialAdSize( "«Amazon-inter-slot-ID»" ) );
adLoader.loadAd( new DTBAdCallback()
{
@Override
public void onSuccess(@NonNull final DTBAdResponse dtbAdResponse)
{
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd.setLocalExtraParameter( "amazon_ad_response", dtbAdResponse );
interstitialAd.loadAd();
}
@Override
public void onFailure(@NonNull final AdError adError)
{
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd.setLocalExtraParameter( "amazon_ad_error", adError );
interstitialAd.loadAd();
}
} );
}
else
{
interstitialAd.loadAd();
}
}
}class ExampleActivity : Activity()
{
private var interstitialAd: MaxInterstitialAd? = null // static to ensure only one instance exists
private var isFirstLoad = true
private fun loadAd()
{
if (isFirstLoad)
{
isFirstLoad = false
if (interstitialAd == null)
{
interstitialAd = MaxInterstitialAd("«MAX-inter-ad-unit-ID»", this)
}
val adLoader = DTBAdRequest( applicationContext, DTBAdNetworkInfo( ApsAdNetwork.MAX ) )
adLoader.setSizes(DTBAdSize.DTBInterstitialAdSize("«Amazon-inter-slot-ID»"))
adLoader.loadAd(object : DTBAdCallback
{
override fun onSuccess(dtbAdResponse: DTBAdResponse)
{
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd!!.setLocalExtraParameter("amazon_ad_response", dtbAdResponse)
interstitialAd!!.loadAd()
}
override fun onFailure(adError: AdError)
{
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd!!.setLocalExtraParameter("amazon_ad_error", adError)
interstitialAd!!.loadAd()
}
})
}
else
{
interstitialAd!!.loadAd()
}
}
}要集成 Amazon 视频插屏广告到 MAX,您必须先加载 Amazon 广告。
在加载 MAX 广告之前,将 DTBAdResponse 或 AdError 传递至 MaxInterstitialAd 实例。
您可以通过调用 MaxInterstitialAd#setLocalExtraParameter() 来完成此操作。
在每个会话中,您只能加载一次 DTBAdResponse 或 DTBAdErrorInfo 并将其发送到 MaxInterstitialAd 实例。
class ExampleActivity
extends Activity
{
private static MaxInterstitialAd interstitialAd; // static to ensure only one instance exists
private static boolean isFirstLoad = true;
private void loadAd()
{
if ( isFirstLoad )
{
isFirstLoad = false;
if ( interstitialAd == null )
{
interstitialAd = new MaxInterstitialAd( "«MAX-inter-ad-unit-ID»" );
}
DTBAdRequest adLoader = new DTBAdRequest( getApplicationContext(), new DTBAdNetworkInfo( ApsAdNetwork.MAX ) );
// Switch video player width and height values(320, 480) depending on device orientation
adLoader.setSizes( new DTBAdSize.DTBVideo(320, 480, "«Amazon-video-inter-slot-ID»") );
adLoader.loadAd( new DTBAdCallback()
{
@Override
public void onSuccess(@NonNull final DTBAdResponse dtbAdResponse)
{
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd.setLocalExtraParameter( "amazon_ad_response", dtbAdResponse );
interstitialAd.loadAd();
}
@Override
public void onFailure(@NonNull final AdError adError)
{
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd.setLocalExtraParameter( "amazon_ad_error", adError );
interstitialAd.loadAd();
}
} );
}
else
{
interstitialAd.loadAd();
}
}
}class ExampleActivity : Activity()
{
private var interstitialAd: MaxInterstitialAd? = null // static to ensure only one instance exists
private var isFirstLoad = true
private fun loadAd()
{
if (isFirstLoad)
{
isFirstLoad = false
if (interstitialAd == null)
{
interstitialAd = MaxInterstitialAd("«MAX-inter-ad-unit-iD»", this)
}
val adLoader = DTBAdRequest( applicationContext, DTBAdNetworkInfo( ApsAdNetwork.MAX ) )
// Switch video player width and height values(320, 480) depending on device orientation
adLoader.setSizes(DTBAdSize.DTBVideo(320, 480, "«Amazon-video-inter-slot-ID»"))
adLoader.loadAd(object : DTBAdCallback
{
override fun onSuccess(dtbAdResponse: DTBAdResponse)
{
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd!!.setLocalExtraParameter("amazon_ad_response", dtbAdResponse)
interstitialAd!!.loadAd()
}
override fun onFailure(adError: AdError)
{
// 'interstitialAd' is your instance of MaxInterstitialAd
interstitialAd!!.setLocalExtraParameter("amazon_ad_error", adError)
interstitialAd!!.loadAd()
}
})
}
else
{
interstitialAd!!.loadAd()
}
}
}要在 MAX 中集成 Amazon 激励视频,请先加载 Amazon 广告。
在加载 MAX 广告之前,将 DTBAdResponse 或 AdError 传递至 MaxRewardedAd 实例。您可以通过调用 MaxRewardedAd#setLocalExtraParameter() 来完成此操作。
在每个会话中,您只能加载一次 DTBAdResponse 或 AdError 并将其发送到 MaxRewardedAd 实例。
class ExampleActivity
extends Activity
{
private static MaxRewardedAd rewardedAd; // static to ensure only one instance exists
private static boolean isFirstLoad = true;
private void loadAd()
{
if ( isFirstLoad )
{
isFirstLoad = false;
if ( rewardedAd == null )
{
rewardedAd = MaxRewardedAd.getInstance( "«MAX-rewarded-ad-unit-ID»" );
}
DTBAdRequest adLoader = new DTBAdRequest( getApplicationContext(), new DTBAdNetworkInfo( ApsAdNetwork.MAX ) );
// Switch video player width and height values(320, 480) depending on device orientation
adLoader.setSizes( new DTBAdSize.DTBVideo( 320, 480, "«Amazon-video-rewarded-slot-ID»" ) );
adLoader.loadAd( new DTBAdCallback()
{
@Override
public void onSuccess(@NonNull final DTBAdResponse dtbAdResponse)
{
// 'rewardedAd' is your instance of MaxRewardedAd
rewardedAd.setLocalExtraParameter( "amazon_ad_response", dtbAdResponse );
rewardedAd.loadAd();
}
@Override
public void onFailure(@NonNull final AdError adError)
{
// 'rewardedAd' is your instance of MaxRewardedAd
rewardedAd.setLocalExtraParameter( "amazon_ad_error", adError );
rewardedAd.loadAd();
}
} );
}
else
{
rewardedAd.loadAd();
}
}
}class ExampleActivity
extends Activity
{
private static MaxRewardedAd rewardedAd; // static to ensure only one instance exists
private static boolean isFirstLoad = true;
private void loadAd()
{
if ( isFirstLoad )
{
isFirstLoad = false;
if ( rewardedAd == null )
{
rewardedAd = MaxRewardedAd.getInstance( "«MAX-rewarded-ad-unit-ID»" );
}
DTBAdRequest adLoader = new DTBAdRequest( getApplicationContext(), new DTBAdNetworkInfo( ApsAdNetwork.MAX ) );
// Switch video player width and height values(320, 480) depending on device orientation
adLoader.setSizes( new DTBAdSize.DTBVideo( 320, 480, "«Amazon-video-rewarded-slot-ID»" ) );
adLoader.loadAd( new DTBAdCallback()
{
@Override
public void onSuccess(@NonNull final DTBAdResponse dtbAdResponse)
{
// 'rewardedAd' is your instance of MaxRewardedAd
rewardedAd.setLocalExtraParameter( "amazon_ad_response", dtbAdResponse );
rewardedAd.loadAd();
}
@Override
public void onFailure(@NonNull final AdError adError)
{
// 'rewardedAd' is your instance of MaxRewardedAd
rewardedAd.setLocalExtraParameter( "amazon_ad_error", adError );
rewardedAd.loadAd();
}
} );
}
else
{
rewardedAd.loadAd();
}
}
}AppLovin 建议您为 Amazon SDK 启用测试模式, 以便接收测试广告。 通过进行以下调用来启用测试模式:
AdRegistration.enableTesting( true );
AdRegistration.enableLogging( true );
您可以过滤瀑布流,使其只包含 Amazon 广告。 为此,请在Mediation Debugger中选择Select Live Network,然后选择 Amazon 平台。
如果您不想启用限制数据使用 (LDU) 模式,请向 SetDataProcessingOptions() 传递一个空字符串数组:
import com.facebook.ads.AdSettings;
⋮
AdSettings.setDataProcessingOptions( new String[] {} );
⋮
// Initialize MAX SDKimport com.facebook.ads.AdSettings
⋮
AdSettings.setDataProcessingOptions( arrayOf<String>() )
⋮
// Initialize MAX SDK要为用户启用 LDU 并指定用户地理位置,请以如下形式调用 SetDataProcessingOptions():
import com.facebook.ads.AdSettings;
⋮
AdSettings.setDataProcessingOptions( new String[] {"LDU"}, «country», «state» );
⋮
// Initialize MAX SDKimport com.facebook.ads.AdSettings
⋮
AdSettings.setDataProcessingOptions( arrayOf("LDU"), «country», «state» )
⋮
// Initialize MAX SDK如果您使用 Google UMP 作为 CMP,则可以判断用户是否已向 Meta 授予许可。 为此,请使用如下代码:
Boolean hasMetaConsent = AppLovinPrivacySettings.getAdditionalConsentStatus( 89 );
if ( hasMetaConsent != null )
{
// Set Meta Data Processing Options accordingly.
}
else
{
// AC String is not available on disk. Please check for consent status after the user completes the CMP flow.
}val hasMetaConsent = AppLovinPrivacySettings.getAdditionalConsentStatus(89)
if ( hasMetaConsent != null )
{
// Set Meta Data Processing Options accordingly.
}
else
{
// AC String is not available on disk. Please check for consent status after the user completes the CMP flow.
}要了解如何在加利福尼亚州启用 Meta Audience Network 的 “Limited Data Use” (限制数据使用) 标记,请访问 Meta 开发者文档。
如果您使用代码混淆或资源缩减,请遵循 Pangle 的混淆指南。
一些平台 SDK 会在其打包的 Android Manifest 文件中使用 <queries> 元素。
如果使用的 Android Gradle 插件版本不兼容,则会导致以下编译错误之一:
com.android.builder.internal.aapt.v2.Aapt2Exception: Android resource linking failed
error: unexpected element <queries> found in <manifest>.
Missing 'package' key attribute on element package at [:com.my.target.mytarget-sdk-5.11.3:]
AndroidManifest Validation failed
要修复此错误,请升级至以下 Android Gradle 插件版本之一。
这些版本支持 <queries> 元素:
请升级 Android Gradle 插件,而非 Gradle Build Tools。
| 当前 Android Gradle 插件版本 | 支持 <queries> 元素的版本 |
|---|---|
| 4.1.* | 全部 |
| 4.0.* | 4.0.1+ |
| 3.6.* | 3.6.4+ |
| 3.5.* | 3.5.4+ |
| 3.4.* | 3.4.3+ |
| 3.3.* | 3.3.3+ |
您可以通过两种方式下载 MAX 聚合适配器并将其集成到应用中:
请勿更改适配器的名称。 否则,MAX SDK 将无法识别适配器,广告也无法加载。
勾选下方复选框,选择要通过 MAX 聚合接入的广告平台。 随后本页面会显示这些平台的具体说明。 本页面还会为您定制一个 CocoaPods 脚本。 将下方的定制 CocoaPods 脚本复制到您的 Podfile。
# Settings
use_frameworks!
inhibit_all_warnings!
# Pods
target 'YOUR_PROJECT_NAME' do
pod 'AmazonPublisherServicesSDK'
pod 'AppLovinMediationAmazonAdMarketplaceAdapter'
pod 'AppLovinMediationBidMachineAdapter'
pod 'AppLovinMediationBigoAdsAdapter'
pod 'AppLovinMediationChartboostAdapter'
pod 'AppLovinMediationCSJAdapter'
pod 'AppLovinMediationFyberAdapter'
pod 'AppLovinMediationGoogleAdManagerAdapter'
pod 'AppLovinMediationGoogleAdapter'
pod 'AppLovinMediationHyprMXAdapter'
pod 'AppLovinMediationInMobiAdapter'
pod 'AppLovinMediationIronSourceAdapter'
pod 'AppLovinMediationVungleAdapter'
pod 'AppLovinMediationLineAdapter'
pod 'AppLovinMediationMaioAdapter'
pod 'AppLovinMediationFacebookAdapter'
pod 'AppLovinMediationMintegralAdapter'
pod 'AppLovinMediationMobileFuseAdapter'
pod 'AppLovinMediationMolocoAdapter'
pod 'AppLovinMediationOguryPresageAdapter'
pod 'AppLovinMediationByteDanceAdapter'
pod 'AppLovinMediationPubMaticAdapter'
pod 'AppLovinMediationSmaatoAdapter'
pod 'AppLovinMediationTencentGDTAdapter'
pod 'AppLovinMediationUnityAdsAdapter'
pod 'AppLovinMediationVerveAdapter'
pod 'AppLovinMediationMyTargetAdapter'
pod 'AppLovinMediationYandexAdapter'
pod 'AppLovinMediationYSONetworkAdapter'
end从 Pangle iOS 适配器 4.9.1.0.0 版本开始,中国大陆地区已下架 Pangle。 要通过中国大陆流量变现,请设置 CSJ 平台并添加 CSJ 适配器。对于中国大陆以外的全球流量,可以继续使用 Pangle 进行变现。
要支持 iOS 12.2 以下版本的 Swift,请按照下列步骤操作:

window 属性请勿移除应用委托文件的 window 属性。
否则,InMobi 的 SDK 可能会崩溃。
@property (nonatomic, strong) UIWindow *window;
var window: UIWindow?如果您不想启用限制数据使用 (LDU) 模式,请向 SetDataProcessingOptions() 传递一个空数组:
#import <FBAudienceNetwork/FBAudienceNetwork.h>
⋮
[FBAdSettings setDataProcessingOptions: @[]];
⋮
// Initialize MAX SDK
import FBAudienceNetwork
⋮
FBAdSettings.setDataProcessingOptions([])
⋮
// Initialize MAX SDK要为用户启用 LDU 并指定用户地理位置,请按如下方式调用 SetDataProcessingOptions():
#import <FBAudienceNetwork/FBAudienceNetwork.h>
⋮
[FBAdSettings setDataProcessingOptions: @[@"LDU"] country: «country» state: «state»];
⋮
// Initialize MAX SDK
import FBAudienceNetwork
⋮
FBAdSettings.setDataProcessingOptions(["LDU"], country: «country», state: «state»)
⋮
// Initialize MAX SDK如果您使用 Google UMP 作为 CMP,则可以判断用户是否已向 Meta 授予许可。 为此,请使用如下代码:
NSNumber *hasMetaConsent = [ALPrivacySettings additionalConsentStatusForIdentifier: 89];
if ( hasMetaConsent )
{
BOOL consentGiven = hasMetaConsent.boolValue;
// Set Meta Data Processing Options accordingly.
}
else
{
// AC String is not available on disk. Please check for consent status after the user completes the CMP flow.
}
let hasMetaConsent = ALPrivacySetting.additionalConsentStatus(forIdentifier: 89)
if let consentGiven = hasMetaConsent?.boolValue
{
// Set Meta Data Processing Options accordingly.
}
else
{
// AC String is not available on disk. Please check for consent status after the user completes the CMP flow.
}要了解如何在加利福尼亚州启用 Meta Audience Network 的 “Limited Data Use” (限制数据使用) 标记,请参阅 Meta 开发者文档。
Audience Network SDK 6.2.1 于 2021 年 1 月 11 日发布。 此版本包含以下重要要求:
setAdvertiserTrackingEnabled 标记。
Meta 会据此判断能否使用这些数据来投放个性化广告。Info.plist,以便广告主可以监测广告 Campaign 的成效。
请参阅 SKAdNetwork 文档 了解集成说明。[sdk initializeSdkWithCompletionHandler:^(ALSdkConfiguration *sdkConfiguration)
{
if ( @available(iOS 14.5, *) )
{
// Note that App transparency tracking authorization can be checked via `sdkConfiguration.appTrackingTransparencyStatus`
// 1. Set Meta ATE flag here, THEN
}
// 2. Load ads
}];
sdk.initializeSdk { (sdkConfiguration: ALSdkConfiguration) in
if #available(iOS 14.5, *)
{
// Note that App transparency tracking authorization can be checked via `sdkConfiguration.appTrackingTransparencyStatus`
// 1. Set Meta ATE flag here, THEN
}
// 2. Load ads
}使用 Google AdSense、AdManager 或 AdMob 的开发者和发行商必须使用经过 Google 认证的许可管理平台 (CMP)。 要向欧洲经济区 (EEA) 或英国的用户投放广告,您的 CMP 必须集成 IAB 的透明度和许可框架。 请参阅 Privacy: “TCF v2 Consent” 了解更多信息。
在应用的 Info.plist 中添加 GADApplicationIdentifier 键,
其字符串值为 Google 竞价和 Google AdMob / Google Ad Manager 应用 ID。

Amazon Publisher Services SDK 需要在 MAX SDK 之外进行初始化:
[[DTBAds sharedInstance] setAppKey: appId];
[DTBAds sharedInstance].mraidCustomVersions = @[@"1.0", @"2.0", @"3.0"];
[DTBAds sharedInstance].mraidPolicy = CUSTOM_MRAID;
请使用最新版本的 Amazon Publisher Services 适配器,避免报告差异。
要在 MAX 中集成 Amazon 广告,则必须先加载 Amazon 广告。
在加载 MAX 广告之前,将 DTBAdResponse 或 DTBAdErrorInfo 传递至 MAAdView 实例。
您可以通过调用 -[MAAdView setLocalExtraParameterForKey:value:] 来完成此操作。
对于自动刷新横幅广告,只需加载广告一次。
@interface ExampleViewController ()<DTBAdCallback>
⋮
@end
@implementation ExampleViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *amazonAdSlotId;
MAAdFormat *adFormat;
if ( UIDevice.currentDevice.userInterfaceIdiom == UIUserInterfaceIdiomPad )
{
amazonAdSlotId = @"«Amazon-leader-slot-ID»";
adFormat = MAAdFormat.leader;
}
else
{
amazonAdSlotId = @"«Amazon-banner-slot-ID»";
adFormat = MAAdFormat.banner;
}
CGSize rawSize = adFormat.size;
DTBAdSize *size = [[DTBAdSize alloc] initBannerAdSizeWithWidth: rawSize.width
height: rawSize.height
andSlotUUID: amazonAdSlotId];
DTBAdNetworkInfo *adNetworkInfo = [[DTBAdNetworkInfo alloc] initWithNetworkName: DTBADNETWORK_MAX];
DTBAdLoader *adLoader = [[DTBAdLoader alloc] initWithAdNetworkInfo: adNetworkInfo];
[adLoader setAdSizes: @[size]];
[adLoader loadAd: self];
}
- (void)onSuccess:(DTBAdResponse *)adResponse
{
// 'adView' is your instance of MAAdView
[self.adView setLocalExtraParameterForKey: @"amazon_ad_response" value: adResponse];
[self.adView loadAd];
}
- (void)onFailure:(DTBAdError)error dtbAdErrorInfo:(DTBAdErrorInfo *)errorInfo
{
// 'adView' is your instance of MAAdView
[self.adView setLocalExtraParameterForKey: @"amazon_ad_error" value: errorInfo];
[self.adView loadAd];
}
@end
import AppLovinSDK
import DTBiOSSDK
class ExampleViewController: UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
let amazonAdSlotId: String
let adFormat: MAAdFormat
if UIDevice.current.userInterfaceIdiom == .pad
{
amazonAdSlotId = "«Amazon-leader-slot-ID»"
adFormat = MAAdFormat.leader
}
else
{
amazonAdSlotId = "«Amazon-banner-slot-ID»"
adFormat = MAAdFormat.banner
}
let rawSize = adFormat.size
let size = DTBAdSize(bannerAdSizeWithWidth: Int(rawSize.width),
height: Int(rawSize.height),
andSlotUUID: amazonAdSlotId)!
let adLoader = DTBAdLoader(adNetworkInfo: DTBAdNetworkInfo(networkName: DTBADNETWORK_MAX))
adLoader.setAdSizes([size])
adLoader.loadAd(self)
}
}
extension ExampleViewController: DTBAdCallback
{
func onSuccess(_ adResponse: DTBAdResponse!)
{
// 'adView' is your instance of MAAdView
adView.setLocalExtraParameterForKey("amazon_ad_response", value: adResponse)
adView.loadAd()
}
func onFailure(_ error: DTBAdError, dtbAdErrorInfo: DTBAdErrorInfo!)
{
// 'adView' is your instance of MAAdView
adView.setLocalExtraParameterForKey("amazon_ad_error", value:dtbAdErrorInfo)
adView.loadAd()
}
}import AppLovinSDK
import DTBiOSSDK
struct ExampleSwiftUIWrapper: UIViewRepresentable
{
func makeUIView(context: Context) -> MAAdView
{
let adView = MAAdView(adUnitIdentifier: "«ad-unit-ID»")
adView.delegate = context.coordinator
let amazonAdSlotId: String
let adFormat: MAAdFormat
if UIDevice.current.userInterfaceIdiom == .pad
{
amazonAdSlotId = "«Amazon-leader-slot-ID»"
adFormat = MAAdFormat.leader
}
else
{
amazonAdSlotId = "«Amazon-banner-slot-ID»"
adFormat = MAAdFormat.banner
}
let rawSize = adFormat.size
let size = DTBAdSize(bannerAdSizeWithWidth: Int(rawSize.width),
height: Int(rawSize.height),
andSlotUUID: amazonAdSlotId)!
let adLoader = DTBAdLoader(adNetworkInfo: DTBAdNetworkInfo(networkName: DTBADNETWORK_MAX))
adLoader.setAdSizes([size])
adLoader.loadAd(adView)
return adView
}
}
extension ExampleSwiftUIWrapper
{
class Coordinator: DTBAdCallback
{
func onSuccess(_ adResponse: DTBAdResponse!)
{
// 'adView' is your instance of MAAdView
adView.setLocalExtraParameterForKey("amazon_ad_response", value: adResponse)
adView.loadAd()
}
func onFailure(_ error: DTBAdError, dtbAdErrorInfo: DTBAdErrorInfo!)
{
// 'adView' is your instance of MAAdView
adView.setLocalExtraParameterForKey("amazon_ad_error", value: dtbAdErrorInfo)
adView.loadAd()
}
}
}@interface ExampleViewController ()<DTBAdCallback>
⋮
@end
@implementation ExampleViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *amazonAdSlotId = @"«Amazon-MREC-slot-ID»";
DTBAdNetworkInfo *adNetworkInfo = [[DTBAdNetworkInfo alloc] initWithNetworkName: DTBADNETWORK_MAX];
DTBAdLoader *adLoader = [[DTBAdLoader alloc] initWithAdNetworkInfo: adNetworkInfo];
[adLoader setAdSizes: [[DTBAdSize alloc] initBannerAdSizeWithWidth: 300
height: 250
andSlotUUID: amazonAdSlotId]];
[adLoader loadAd: self];
}
- (void)onSuccess:(DTBAdResponse *)adResponse
{
// 'adView' is your instance of MAAdView
[self.adView setLocalExtraParameterForKey: @"amazon_ad_response" value: adResponse];
[self.adView loadAd];
}
- (void)onFailure:(DTBAdError)error dtbAdErrorInfo:(DTBAdErrorInfo *)errorInfo
{
// 'adView' is your instance of MAAdView
[self.adView setLocalExtraParameterForKey: @"amazon_ad_error" value: errorInfo];
[self.adView loadAd];
}
@end
import AppLovinSDK
import DTBiOSSDK
class ExampleViewController: UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
let amazonAdSlotId: String = "«Amazon-MREC-slot-ID»"
let adLoader = DTBAdLoader(adNetworkInfo: DTBAdNetworkInfo(networkName: DTBADNETWORK_MAX))
adLoader.setAdSizes([DTBAdSize(bannerAdSizeWithWidth: 300,
height: 250,
andSlotUUID: amazonAdSlotId)!])
adLoader.loadAd(self)
}
}
extension ExampleViewController: DTBAdCallback
{
func onSuccess(_ adResponse: DTBAdResponse!)
{
// 'adView' is your instance of MAAdView
adView.setLocalExtraParameterForKey("amazon_ad_response", value: adResponse)
adView.loadAd()
}
func onFailure(_ error: DTBAdError, dtbAdErrorInfo: DTBAdErrorInfo!)
{
// 'adView' is your instance of MAAdView
adView.setLocalExtraParameterForKey("amazon_ad_error", value:dtbAdErrorInfo)
adView.loadAd()
}
}import AppLovinSDK
import DTBiOSSDK
struct ExampleSwiftUIWrapper: UIViewRepresentable
{
func makeUIView(context: Context) -> MAAdView
{
let adView = MAAdView(adUnitIdentifier: "«ad-unit-ID»", adFormat: MAAdFormat.mrec)
adView.delegate = context.coordinator
let amazonAdSlotId: String = "«Amazon-MREC-slot-ID»"
let adLoader = DTBAdLoader(adNetworkInfo: DTBAdNetworkInfo(networkName: DTBADNETWORK_MAX))
adLoader.setAdSizes([DTBAdSize(bannerAdSizeWithWidth: 300,
height: 250,
andSlotUUID: amazonAdSlotId)!])
adLoader.loadAd(adView)
return adView
}
}
extension ExampleSwiftUIWrapper
{
class Coordinator: DTBAdCallback
{
func onSuccess(_ adResponse: DTBAdResponse!)
{
// 'adView' is your instance of MAAdView
adView.setLocalExtraParameterForKey("amazon_ad_response", value: adResponse)
adView.loadAd()
}
func onFailure(_ error: DTBAdError, dtbAdErrorInfo: DTBAdErrorInfo!)
{
// 'adView' is your instance of MAAdView
adView.setLocalExtraParameterForKey("amazon_ad_error", value: dtbAdErrorInfo)
adView.loadAd()
}
}
}要集成 Amazon 插屏广告到 MAX,您必须先加载 Amazon 广告。
在加载 MAX 广告之前,将 DTBAdResponse 或 DTBAdErrorInfo 传递至 MAInterstitialAd 实例。
您可以通过调用 -[MAInterstitialAd setLocalExtraParameterForKey:value:] 来完成此操作。
在每个会话中,您只能加载一次 Amazon DTBAdResponse 或 DTBAdErrorInfo 并将其发送到 MAInterstitialAd 实例。
#import <AppLovinSDK/AppLovinSDK.h>
#import <DTBiOSSDK/DTBiOSSDK.h>
@interface ExampleViewController ()<DTBAdCallback>
⋮
@end
@implementation ExampleViewController
static MAInterstitialAd *interstitialAd;
static BOOL isFirstLoad;
+ (void)initialize
{
[super initialize];
interstitialAd = [[MAInterstitialAd alloc] initWithAdUnitIdentifier: @"«MAX-inter-ad-unit-ID»"];
isFirstLoad = YES;
}
- (void)loadAd
{
// If first load - load ad from Amazon's SDK, then load ad for MAX
if ( isFirstLoad )
{
isFirstLoad = NO;
DTBAdNetworkInfo *adNetworkInfo = [[DTBAdNetworkInfo alloc] initWithNetworkName: DTBADNETWORK_MAX];
DTBAdLoader *adLoader = [[DTBAdLoader alloc] initWithAdNetworkInfo: adNetworkInfo];
[adLoader setAdSizes: @[
[[DTBAdSize alloc] initInterstitialAdSizeWithSlotUUID: @"«Amazon-inter-slot-ID»"]
]];
[adLoader loadAd: self];
}
else
{
[interstitialAd loadAd];
}
}
- (void)onSuccess:(DTBAdResponse *)adResponse
{
// 'interstitialAd' is your instance of MAInterstitialAd
[interstitialAd setLocalExtraParameterForKey: @"amazon_ad_response" value: adResponse];
[interstitialAd loadAd];
}
- (void)onFailure:(DTBAdError)error dtbAdErrorInfo:(DTBAdErrorInfo *)errorInfo
{
// 'interstitialAd' is your instance of MAInterstitialAd
[interstitialAd setLocalExtraParameterForKey: @"amazon_ad_error" value: errorInfo];
[interstitialAd loadAd];
}
@end
import AppLovinSDK
import DTBiOSSDK
class ExampleViewController: UIViewController
{
private static var interstitialAd = MAInterstitialAd(adUnitIdentifier: "«MAX-inter-ad-unit-ID»")
private static var isFirstLoad = true
func loadAd()
{
// If first load - load ad from Amazon's SDK, then load ad for MAX
if Self.isFirstLoad
{
Self.isFirstLoad = false
let adLoader = DTBAdLoader(adNetworkInfo: DTBAdNetworkInfo(networkName: DTBADNETWORK_MAX))
adLoader.setAdSizes([DTBAdSize(interstitialAdSizeWithSlotUUID: "«Amazon-inter-slot-ID»")!])
adLoader.loadAd(self)
}
else
{
Self.interstitialAd.load()
}
}
}
extension ExampleViewController: DTBAdCallback
{
func onSuccess(_ adResponse: DTBAdResponse!)
{
// 'interstitialAd' is your instance of MAInterstitialAd
Self.interstitialAd.setLocalExtraParameterForKey("amazon_ad_response", value: adResponse)
Self.interstitialAd.load()
}
func onFailure(_ error: DTBAdError, dtbAdErrorInfo: DTBAdErrorInfo!)
{
// 'interstitialAd' is your instance of MAInterstitialAd
Self.interstitialAd.setLocalExtraParameterForKey("amazon_ad_error", value: dtbAdErrorInfo)
Self.interstitialAd.load()
}
}要集成 Amazon 插屏广告到 MAX,您必须先加载 Amazon 广告。
在加载 MAX 广告之前,将 DTBAdResponse 或 DTBAdErrorInfo 传递至 MAInterstitialAd 实例。
您可以通过调用 -[MAInterstitialAd setLocalExtraParameterForKey:value:] 来完成此操作。
在每个会话中,您只能加载一次 Amazon DTBAdResponse 或 DTBAdErrorInfo 并将其发送到 MAInterstitialAd 实例。
#import <AppLovinSDK/AppLovinSDK.h>
#import <DTBiOSSDK/DTBiOSSDK.h>
@interface ExampleViewController ()<DTBAdCallback>
⋮
@end
@implementation ExampleViewController
static MAInterstitialAd *interstitialAd;
static BOOL isFirstLoad;
+ (void)initialize
{
[super initialize];
interstitialAd = [[MAInterstitialAd alloc] initWithAdUnitIdentifier: @"«MAX-inter-ad-unit-ID»"];
isFirstLoad = YES;
}
- (void)loadAd
{
// If first load - load ad from Amazon's SDK, then load ad for MAX
if ( isFirstLoad )
{
isFirstLoad = NO;
DTBAdNetworkInfo *adNetworkInfo = [[DTBAdNetworkInfo alloc] initWithNetworkName: DTBADNETWORK_MAX];
DTBAdLoader *adLoader = [[DTBAdLoader alloc] initWithAdNetworkInfo: adNetworkInfo];
// Switch video player width and height values(320, 480) depending on device orientation
[adLoader setAdSizes: @[
[[DTBAdSize alloc] initVideoAdSizeWithPlayerWidth: 320 height: 480 andSlotUUID:@"«Amazon-video-inter-slot-ID»"]
]];
[adLoader loadAd: self];
}
else
{
[interstitialAd loadAd];
}
}
- (void)onSuccess:(DTBAdResponse *)adResponse
{
// 'interstitialAd' is your instance of MAInterstitialAd
[interstitialAd setLocalExtraParameterForKey: @"amazon_ad_response" value: adResponse];
[interstitialAd loadAd];
}
- (void)onFailure:(DTBAdError)error dtbAdErrorInfo:(DTBAdErrorInfo *)errorInfo
{
// 'interstitialAd' is your instance of MAInterstitialAd
[interstitialAd setLocalExtraParameterForKey: @"amazon_ad_error" value: errorInfo];
[interstitialAd loadAd];
}
@end
import AppLovinSDK
import DTBiOSSDK
class ExampleViewController: UIViewController
{
private static var interstitialAd = MAInterstitialAd(adUnitIdentifier: "«MAX-inter-ad-unit-ID»")
private static var isFirstLoad = true
func loadAd()
{
// If first load - load ad from Amazon's SDK, then load ad for MAX
if Self.isFirstLoad
{
Self.isFirstLoad = false
let adLoader = DTBAdLoader(adNetworkInfo: DTBAdNetworkInfo(networkName: DTBADNETWORK_MAX))
// Switch video player width and height values(320, 480) depending on device orientation
adLoader.setAdSizes([DTBAdSize(videoAdSizeWithPlayerWidth: 320, height: 480, andSlotUUID: "«Amazon-video-inter-slot-ID»")!])
adLoader.loadAd(self)
}
else
{
Self.interstitialAd.load()
}
}
}
extension ExampleViewController: DTBAdCallback
{
func onSuccess(_ adResponse: DTBAdResponse!)
{
// 'interstitialAd' is your instance of MAInterstitialAd
Self.interstitialAd.setLocalExtraParameterForKey("amazon_ad_response", value: adResponse)
Self.interstitialAd.load()
}
func onFailure(_ error: DTBAdError, dtbAdErrorInfo: DTBAdErrorInfo!)
{
// 'interstitialAd' is your instance of MAInterstitialAd
Self.interstitialAd.setLocalExtraParameterForKey("amazon_ad_error", value: dtbAdErrorInfo)
Self.interstitialAd.load()
}
}要将 Amazon 激励视频广告集成到 MAX,必须先加载 Amazon 广告。
在加载 MAX 广告之前,将 DTBAdResponse 或 DTBAdErrorInfo 传递至 MARewardedAd 实例。
您可以通过调用 -[MARewardedAd setLocalExtraParameterForKey:value:] 来完成此操作。
您只能加载一次 Amazon DTBAdResponse 或 DTBAdErrorInfo 并将其发送到 MARewardedAd 实例。
#import <AppLovinSDK/AppLovinSDK.h>
#import <DTBiOSSDK/DTBiOSSDK.h>
@interface ExampleViewController ()<DTBAdCallback>
⋮
@end
@implementation ExampleViewController
static MARewardedAd *rewardedAd;
static BOOL isFirstLoad;
+ (void)initialize
{
[super initialize];
rewardedAd = [MARewardedAd sharedWithAdUnitIdentifier: @"«MAX-rewarded-ad-unit-ID»"];
isFirstLoad = YES;
}
- (void)loadAd
{
// If first load - load ad from Amazon's SDK, then load ad for MAX
if ( isFirstLoad )
{
isFirstLoad = NO;
DTBAdNetworkInfo *adNetworkInfo = [[DTBAdNetworkInfo alloc] initWithNetworkName: DTBADNETWORK_MAX];
DTBAdLoader *adLoader = [[DTBAdLoader alloc] initWithAdNetworkInfo: adNetworkInfo];
// Switch video player width and height values(320, 480) depending on device orientation
[adLoader setAdSizes: @[
[[DTBAdSize alloc] initVideoAdSizeWithPlayerWidth: 320 height: 480 andSlotUUID:@"«Amazon-video-rewarded-slot-ID»"]
]];
[adLoader loadAd: self];
}
else
{
[rewardedAd loadAd];
}
}
- (void)onSuccess:(DTBAdResponse *)adResponse
{
// 'rewardedAd' is your instance of MARewardedAd
[rewardedAd setLocalExtraParameterForKey: @"amazon_ad_response" value: adResponse];
[rewardedAd loadAd];
}
- (void)onFailure:(DTBAdError)error dtbAdErrorInfo:(DTBAdErrorInfo *)errorInfo
{
// 'rewardedAd' is your instance of MARewardedAd
[rewardedAd setLocalExtraParameterForKey: @"amazon_ad_error" value: errorInfo];
[rewardedAd loadAd];
}
@end
import AppLovinSDK
import DTBiOSSDK
class ExampleViewController: UIViewController
{
private static var rewardedAd = MARewardedAd.shared(withAdUnitIdentifier: "«MAX-rewarded-ad-unit-ID»")
private static var isFirstLoad = true
func loadAd()
{
// If first load - load ad from Amazon's SDK, then load ad for MAX
if Self.isFirstLoad
{
Self.isFirstLoad = false
let adLoader = DTBAdLoader(adNetworkInfo: DTBAdNetworkInfo(networkName: DTBADNETWORK_MAX))
// Switch video player width and height values(320, 480) depending on device orientation
adLoader.setAdSizes([DTBAdSize(videoAdSizeWithPlayerWidth: 320, height: 480, andSlotUUID: "«Amazon-video-rewarded-slot-ID»")!])
adLoader.loadAd(self)
}
else
{
Self.rewardedAd.load()
}
}
}
extension ExampleViewController: DTBAdCallback
{
func onSuccess(_ adResponse: DTBAdResponse!)
{
// 'rewardedAd' is your instance of MARewardedAd
Self.rewardedAd.setLocalExtraParameterForKey("amazon_ad_response", value: adResponse)
Self.rewardedAd.load()
}
func onFailure(_ error: DTBAdError, dtbAdErrorInfo: DTBAdErrorInfo!)
{
// 'rewardedAd' is your instance of MARewardedAd
Self.rewardedAd.setLocalExtraParameterForKey("amazon_ad_error", value: dtbAdErrorInfo)
Self.rewardedAd.load()
}
}AppLovin 建议您为 Amazon SDK 启用测试模式, 这样您就会收到测试广告。 使用以下调用启用测试模式:
[[DTBAds sharedInstance] setLogLevel: DTBLogLevelAll];
[[DTBAds sharedInstance] setTestMode: YES];
DTBAds.sharedInstance().setLogLevel(DTBLogLevelAll)
DTBAds.sharedInstance().testMode = true您可以过滤瀑布流,使其只包含 Amazon 广告。 为此,请在Mediation Debugger中选择Select Live Network,然后选择 Amazon 平台。
要禁用 App Transport Security (ATS),请将 NSAppTransportSecurity 添加至应用的 Info.plist。
然后添加 NSAllowsArbitraryLoads键并将其布尔值设置为 YES。
确保这是唯一的键。

请参阅 the SKAdNetwork documentation 了解集成说明。
在命令行中运行以下命令。
pod install --repo-update