AppLovin MAX SDK 集成完整教程:Android、iOS、Unity 从入门到精通(2025最新版)
Meta描述:最详细的 AppLovin MAX SDK 集成教程!包含 Android、iOS、Unity 三大平台的完整步骤,从环境准备、SDK 初始化、Banner/插屏/激励视频/原生广告集成,到测试调试、性能优化和常见问题,手把手教你实现应用变现。
教程概览
本教程将覆盖:
- ✅ 账户和应用配置
- ✅ 环境准备(各平台)
- ✅ SDK 下载和初始化
- ✅ 5 种广告格式的完整实现
- ✅ 测试工具和调试
- ✅ 常见问题解决
- ✅ 性能优化建议
预计完成时间:2-5 小时(取决于平台和经验)
0. 前期准备(所有平台通用)
1. 注册 AppLovin 账户
访问:https://dash.applovin.com/
步骤:
- 使用 Google 账号或邮箱注册
- 完成账户审核(2-3 天)
- 获取 SDK Key(需要后续使用)
查看 SDK Key:
登录后台
↓
Account(右上角用户菜单)
↓
General > Keys
↓
复制 SDK Key
2. 创建应用
路径:
MAX Dashboard
↓
Apps > Create New App(或 Add App)
↓
选择平台(Android / iOS)
↓
输入应用信息
↓
获取 App ID (ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX)
3. 创建广告单元
推荐配置:
应用 > Ad Units > Create
1. Banner(320x50)- ID: BANNER_AD_UNIT_ID
2. Interstitial - ID: INTERSTITIAL_AD_UNIT_ID
3. Rewarded Video - ID: REWARDED_AD_UNIT_ID
4. Native(可选)
5. MREC(可选)
保存这些 ID,集成时需要用到
第一部分:Android 平台集成
环境要求
- Android Studio 4.0+,minSdkVersion 19+,Gradle 7.0+
- Java 8+ 或 Kotlin 1.7+
- 真实设备或模拟器
步骤 1:添加依赖
项目级 build.gradle:
buildscript {
repositories {
google()
mavenCentral()
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
应用级 build.gradle:
plugins {
id 'com.android.application'
}
android {
compileSdk 34
defaultConfig {
applicationId "com.yourapp.package"
minSdk 19
targetSdk 34
versionCode 1
versionName "1.0"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
// AppLovin MAX SDK(核心)
implementation 'com.applovin:applovin-sdk:13.0.1'
// 广告网络适配器(可选但推荐)
implementation 'com.applovin.mediation:google-adapter:23.5.0.0'
implementation 'com.applovin.mediation:facebook-adapter:6.17.0.2'
implementation 'com.applovin.mediation:unity-ads-adapter:4.12.2.0'
implementation 'com.applovin.mediation:ironsource-adapter:8.3.0.0'
}
同步项目: Android Studio > Sync Now
步骤 2:添加权限
AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 必需权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 可选权限(提高 eCPM) -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<activity android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
步骤 3:初始化 SDK
MyApplication.java(推荐):
import android.app.Application;
import com.applovin.sdk.AppLovinSdk;
import com.applovin.sdk.AppLovinSdkInitializationConfiguration;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 创建初始化配置
AppLovinSdkInitializationConfiguration initConfig =
AppLovinSdkInitializationConfiguration.builder("YOUR_SDK_KEY", this)
.setMediationProvider("max")
.build();
// 初始化 SDK
AppLovinSdk.getInstance(this).initialize(initConfig, config -> {
// SDK 初始化完成,可以开始加载广告
startLoadingAds();
});
}
private void startLoadingAds() {
// 在这里开始加载广告
}
}
Kotlin 版本:
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
val initConfig = AppLovinSdkInitializationConfiguration.builder("YOUR_SDK_KEY", this)
.setMediationProvider("max")
.build()
AppLovinSdk.getInstance(this).initialize(initConfig) { config ->
startLoadingAds()
}
}
private fun startLoadingAds() {
// 开始加载广告
}
}
在 AndroidManifest.xml 中注册应用类:
<application android:name=".MyApplication" ...>
步骤 4:集成 Banner 广告
布局文件(activity_main.xml):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 应用内容 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:layout_centerInParent="true" />
<!-- Banner 容器 -->
<FrameLayout
android:id="@+id/banner_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />
</RelativeLayout>
Activity 代码:
import com.applovin.mediation.MaxAd;
import com.applovin.mediation.MaxAdViewAdListener;
import com.applovin.mediation.MaxError;
import com.applovin.mediation.ads.MaxAdView;
public class MainActivity extends AppCompatActivity {
private MaxAdView bannerAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
createBannerAd();
}
private void createBannerAd() {
bannerAd = new MaxAdView("BANNER_AD_UNIT_ID", this);
bannerAd.setListener(new MaxAdViewAdListener() {
@Override
public void onAdLoaded(MaxAd ad) {
Log.d("Banner", "广告加载成功");
}
@Override
public void onAdLoadFailed(String adUnitId, MaxError error) {
Log.e("Banner", "广告加载失败: " + error.getMessage());
}
@Override
public void onAdDisplayed(MaxAd ad) {}
@Override
public void onAdHidden(MaxAd ad) {}
@Override
public void onAdClicked(MaxAd ad) {}
@Override
public void onAdDisplayFailed(MaxAd ad, MaxError error) {}
@Override
public void onAdExpanded(MaxAd ad) {}
@Override
public void onAdCollapsed(MaxAd ad) {}
});
bannerAd.setBackgroundColor(Color.WHITE);
FrameLayout bannerContainer = findViewById(R.id.banner_container);
bannerContainer.addView(bannerAd);
bannerAd.loadAd();
}
@Override
protected void onDestroy() {
if (bannerAd != null) {
bannerAd.destroy();
}
super.onDestroy();
}
}
步骤 5:集成插屏广告
import com.applovin.mediation.MaxInterstitialAd;
import com.applovin.mediation.MaxAdListener;
import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
private MaxInterstitialAd interstitialAd;
private int retryAttempt = 0;
private void createInterstitialAd() {
interstitialAd = new MaxInterstitialAd("INTERSTITIAL_AD_UNIT_ID", this);
interstitialAd.setListener(new MaxAdListener() {
@Override
public void onAdLoaded(MaxAd ad) {
retryAttempt = 0;
}
@Override
public void onAdLoadFailed(String adUnitId, MaxError error) {
retryAttempt++;
long delayMillis = TimeUnit.SECONDS.toMillis(
(long) Math.pow(2, Math.min(6, retryAttempt))
);
new Handler().postDelayed(() -> interstitialAd.loadAd(), delayMillis);
}
@Override
public void onAdDisplayed(MaxAd ad) {}
@Override
public void onAdHidden(MaxAd ad) {
interstitialAd.loadAd();
}
@Override
public void onAdClicked(MaxAd ad) {}
@Override
public void onAdDisplayFailed(MaxAd ad, MaxError error) {
interstitialAd.loadAd();
}
});
interstitialAd.loadAd();
}
private void showInterstitial() {
if (interstitialAd.isReady()) {
interstitialAd.showAd();
}
}
}
步骤 6:集成激励视频
import com.applovin.mediation.MaxRewardedAd;
import com.applovin.mediation.MaxRewardedAdListener;
import com.applovin.mediation.MaxReward;
public class MainActivity extends AppCompatActivity {
private MaxRewardedAd rewardedAd;
private int retryAttempt = 0;
private void createRewardedAd() {
rewardedAd = MaxRewardedAd.getInstance("REWARDED_AD_UNIT_ID", this);
rewardedAd.setListener(new MaxRewardedAdListener() {
@Override
public void onAdLoaded(MaxAd ad) {
retryAttempt = 0;
}
@Override
public void onAdLoadFailed(String adUnitId, MaxError error) {
retryAttempt++;
long delayMillis = TimeUnit.SECONDS.toMillis(
(long) Math.pow(2, Math.min(6, retryAttempt))
);
new Handler().postDelayed(() -> rewardedAd.loadAd(), delayMillis);
}
@Override
public void onAdDisplayed(MaxAd ad) {}
@Override
public void onAdHidden(MaxAd ad) {
rewardedAd.loadAd();
}
@Override
public void onAdClicked(MaxAd ad) {}
@Override
public void onAdDisplayFailed(MaxAd ad, MaxError error) {
rewardedAd.loadAd();
}
@Override
public void onUserRewarded(MaxAd ad, MaxReward reward) {
// 用户完成观看,发放奖励
int amount = reward.getAmount();
String label = reward.getLabel();
giveRewardToUser(amount);
}
@Override
public void onRewardedVideoStarted(MaxAd ad) {}
@Override
public void onRewardedVideoCompleted(MaxAd ad) {}
});
rewardedAd.loadAd();
}
private void showRewardedAd() {
if (rewardedAd.isReady()) {
rewardedAd.showAd();
}
}
private void giveRewardToUser(int amount) {
// 实现奖励逻辑
}
}
第二部分:iOS 平台集成
环境要求
- Xcode 15.0+,iOS 12.0+ deployment target
- CocoaPods 1.10+ 或 Swift Package Manager
- iOS 设备或模拟器
步骤 1:安装 SDK
使用 CocoaPods:
# 1. 创建 Podfile
cd /path/to/project
pod init
# 2. 编辑 Podfile
Podfile 内容:
platform :ios, '12.0'
target 'YourApp' do
use_frameworks!
# AppLovin MAX SDK
pod 'AppLovinSDK'
# 广告网络适配器(可选)
pod 'AppLovinMediationGoogleAdManagerAdapter'
pod 'AppLovinMediationFacebookAdapter'
pod 'AppLovinMediationUnityAdsAdapter'
end
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
end
end
end
# 3. 安装依赖
pod install
# 4. 打开 .xcworkspace(不是 .xcodeproj)
open YourApp.xcworkspace
使用 Swift Package Manager:
- Xcode > File > Add Packages
- 输入:
https://github.com/AppLovin/AppLovin-MAX-Swift-Package.git - 选择版本并添加
步骤 2:配置 Info.plist
<key>AppLovinSdkKey</key>
<string>YOUR_SDK_KEY</string>
<key>NSUserTrackingUsageDescription</key>
<string>我们使用数据来为您提供更好的广告体验</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
步骤 3:初始化 SDK
Swift 版本:
import UIKit
import AppLovinSDK
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 初始化 AppLovin SDK
ALSdk.shared()!.mediationProvider = "max"
ALSdk.shared()!.initializeSdk { configuration in
print("AppLovin SDK 初始化完成")
self.requestTrackingAuthorization()
}
return true
}
func requestTrackingAuthorization() {
if #available(iOS 14, *) {
ATTrackingManager.requestTrackingAuthorization { status in
print("ATT Status: \(status.rawValue)")
}
}
}
}
Objective-C 版本:
#import <AppLovinSDK/AppLovinSDK.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[ALSdk shared] setMediationProvider:@"max"];
[[ALSdk shared] initializeSdkWithCompletionHandler:^(ALSdkConfiguration *config) {
NSLog(@"SDK 初始化完成");
}];
return YES;
}
@end
步骤 4-6:集成各类型广告
由于篇幅限制,iOS 版的 Banner、插屏、激励视频代码与 Android 逻辑相同,只是 API 略有不同。详细代码请参考前面 Android 部分的逻辑,转换为 Swift/Objective-C 即可。
核心逻辑相同:
- 创建广告实例
- 设置监听器
- 加载广告
- 展示广告
- 销毁广告
第三部分:Unity 平台集成
环境要求
- Unity 2019.4 LTS 或更高版本
- Android Build Support 和 iOS Build Support
- 推荐 Unity 2021 LTS 或 2022 LTS
步骤 1:安装 AppLovin Max Unity Plugin
方法 1:使用 Package Manager(推荐)
下载插件:https://dash.applovin.com/documentation/mediation/unity/getting-started
在 Xcode 中导入:
- Assets > Import Package > Custom Package
- 选择下载的
.unitypackage - 点击 Import
方法 2:通过 Package Manager
编辑 Packages/manifest.json:
{
"scopedRegistries": [
{
"name": "AppLovin",
"url": "https://registry.npmjs.org",
"scopes": ["com.applovin"]
}
],
"dependencies": {
"com.applovin.max": "1.8.0"
}
}
步骤 2:配置 SDK
导入后会自动打开 Integration Manager:
菜单:AppLovin > Integration Manager
配置步骤:
- 输入 SDK Key
- 选择需要的广告网络
- 点击 Install
步骤 3:初始化 SDK
C# 脚本:
using UnityEngine;
using max = MaxSdk;
public class AppLovinManager : MonoBehaviour {
void Start() {
// 设置 SDK Key
MaxSdk.SetSdkKey("YOUR_SDK_KEY");
// 初始化 SDK
MaxSdk.InitializeSdk();
// 监听初始化完成
MaxSdkCallbacks.OnSdkInitializedEvent += (MaxSdk.SdkConfiguration sdkConfig) => {
Debug.Log("AppLovin SDK 初始化成功");
StartLoadingAds();
};
}
void StartLoadingAds() {
// 开始加载广告
}
}
步骤 4:集成 Banner 广告
using UnityEngine;
using max = MaxSdk;
public class BannerAdManager : MonoBehaviour {
private string bannerAdUnitId = "BANNER_AD_UNIT_ID";
void Start() {
CreateBannerAd();
}
void CreateBannerAd() {
// 设置监听
MaxSdkCallbacks.Banner.OnAdLoadedEvent += OnBannerAdLoaded;
MaxSdkCallbacks.Banner.OnAdLoadFailedEvent += OnBannerAdLoadFailed;
// 创建 Banner
MaxSdk.CreateBanner(bannerAdUnitId, MaxSdkBase.BannerPosition.BottomCenter);
MaxSdk.SetBannerBackgroundColor(bannerAdUnitId, Color.white);
}
void OnBannerAdLoaded(string adUnitId, MaxSdkBase.AdInfo adInfo) {
Debug.Log("Banner 广告加载成功");
}
void OnBannerAdLoadFailed(string adUnitId, MaxSdkBase.ErrorInfo errorInfo) {
Debug.Log("Banner 广告加载失败: " + errorInfo.Message);
}
public void ShowBanner() {
MaxSdk.ShowBanner(bannerAdUnitId);
}
public void HideBanner() {
MaxSdk.HideBanner(bannerAdUnitId);
}
}
步骤 5:集成插屏广告
using UnityEngine;
using max = MaxSdk;
public class InterstitialAdManager : MonoBehaviour {
private string interstitialAdUnitId = "INTERSTITIAL_AD_UNIT_ID";
private int retryAttempt = 0;
void Start() {
CreateInterstitialAd();
}
void CreateInterstitialAd() {
MaxSdkCallbacks.Interstitial.OnAdLoadedEvent += OnInterstitialLoaded;
MaxSdkCallbacks.Interstitial.OnAdLoadFailedEvent += OnInterstitialLoadFailed;
MaxSdkCallbacks.Interstitial.OnAdHiddenEvent += OnInterstitialHidden;
LoadInterstitial();
}
void LoadInterstitial() {
MaxSdk.LoadInterstitial(interstitialAdUnitId);
}
void OnInterstitialLoaded(string adUnitId, MaxSdkBase.AdInfo adInfo) {
retryAttempt = 0;
Debug.Log("插屏广告加载成功");
}
void OnInterstitialLoadFailed(string adUnitId, MaxSdkBase.ErrorInfo errorInfo) {
retryAttempt++;
float delay = Mathf.Pow(2, Mathf.Min(6, retryAttempt));
Invoke("LoadInterstitial", delay);
}
void OnInterstitialHidden(string adUnitId, MaxSdkBase.AdInfo adInfo) {
LoadInterstitial();
}
public void ShowInterstitial() {
if (MaxSdk.IsInterstitialReady(interstitialAdUnitId)) {
MaxSdk.ShowInterstitial(interstitialAdUnitId);
}
}
}
步骤 6:集成激励视频
using UnityEngine;
using max = MaxSdk;
public class RewardedAdManager : MonoBehaviour {
private string rewardedAdUnitId = "REWARDED_AD_UNIT_ID";
private int retryAttempt = 0;
void Start() {
CreateRewardedAd();
}
void CreateRewardedAd() {
MaxSdkCallbacks.Rewarded.OnAdLoadedEvent += OnRewardedLoaded;
MaxSdkCallbacks.Rewarded.OnAdLoadFailedEvent += OnRewardedLoadFailed;
MaxSdkCallbacks.Rewarded.OnAdHiddenEvent += OnRewardedHidden;
MaxSdkCallbacks.Rewarded.OnAdReceivedRewardEvent += OnRewardedEarned;
LoadRewardedAd();
}
void LoadRewardedAd() {
MaxSdk.LoadRewardedAd(rewardedAdUnitId);
}
void OnRewardedLoaded(string adUnitId, MaxSdkBase.AdInfo adInfo) {
retryAttempt = 0;
Debug.Log("激励视频加载成功");
}
void OnRewardedLoadFailed(string adUnitId, MaxSdkBase.ErrorInfo errorInfo) {
retryAttempt++;
float delay = Mathf.Pow(2, Mathf.Min(6, retryAttempt));
Invoke("LoadRewardedAd", delay);
}
void OnRewardedHidden(string adUnitId, MaxSdkBase.AdInfo adInfo) {
LoadRewardedAd();
}
void OnRewardedEarned(string adUnitId, MaxSdkBase.Reward reward, MaxSdkBase.AdInfo adInfo) {
Debug.Log($"用户获得奖励: {reward.Amount} {reward.Label}");
GiveRewardToUser(reward.Amount);
}
public void ShowRewardedAd() {
if (MaxSdk.IsRewardedAdReady(rewardedAdUnitId)) {
MaxSdk.ShowRewardedAd(rewardedAdUnitId);
}
}
void GiveRewardToUser(int amount) {
// 实现你的奖励逻辑
}
}
第四部分:测试和调试
测试广告 ID
集成期间使用测试 ID,避免真实广告的问题:
Android/iOS/Unity 通用测试 ID:
Banner: ca-app-pub-3940256099942544/6300978111
Interstitial: ca-app-pub-3940256099942544/1033173712
Rewarded: ca-app-pub-3940256099942544/5224354917
Mediation Debugger
用于检查广告网络是否正确集成:
Android:
// 在 onCreate 中添加
MaxSdk.showMediationDebugger(MainActivity.this);
iOS:
// 在初始化后添加
MaxSdk.showMediationDebugger()
Unity:
// 按下 Tab 键 3 次打开
// 或调用
MaxSdk.ShowMediationDebugger();
Creative Debugger
查看广告创意详情,报告有问题的广告:
在 Mediation Debugger 中找到”Creative Debugger”选项
第五部分:常见问题和解决方案
Q1:广告无法加载(NO FILL)
可能原因:
- Ad Unit ID 错误
- 包名/Bundle ID 不一致
- 应用未正式发布
- 地区或广告主问题
- 应用内容违反政策
解决步骤:
- 检查 Ad Unit ID 是否正确
- 验证包名与 AppLovin 后台一致
- 查看 logcat 的详细错误信息
- 使用 Mediation Debugger 检查网络状态
- 等待 24-48 小时,某些地区需要时间
Q2:应用崩溃
常见原因:
- SDK 初始化失败
- 在错误的线程调用 API
- 内存不足
解决方法:
// 确保在主线程初始化
runOnUiThread(() -> {
AppLovinSdk.getInstance(context).initialize(...);
});
Q3:广告无法展示
检查清单:
- [ ] SDK 是否正确初始化
- [ ] 广告是否已加载(isReady() 返回 true)
- [ ] 是否在主线程调用 showAd()
- [ ] 广告位置是否遮挡重要内容


