4a859a054837148371afabfa35454931161b6a42

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/

步骤:

  1. 使用 Google 账号或邮箱注册
  2. 完成账户审核(2-3 天)
  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:

  1. Xcode > File > Add Packages
  2. 输入:https://github.com/AppLovin/AppLovin-MAX-Swift-Package.git
  3. 选择版本并添加

步骤 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 即可。

核心逻辑相同:

  1. 创建广告实例
  2. 设置监听器
  3. 加载广告
  4. 展示广告
  5. 销毁广告

第三部分: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 中导入:

  1. Assets > Import Package > Custom Package
  2. 选择下载的 .unitypackage
  3. 点击 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

配置步骤:

  1. 输入 SDK Key
  2. 选择需要的广告网络
  3. 点击 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)

可能原因:

  1. Ad Unit ID 错误
  2. 包名/Bundle ID 不一致
  3. 应用未正式发布
  4. 地区或广告主问题
  5. 应用内容违反政策

解决步骤:

  1. 检查 Ad Unit ID 是否正确
  2. 验证包名与 AppLovin 后台一致
  3. 查看 logcat 的详细错误信息
  4. 使用 Mediation Debugger 检查网络状态
  5. 等待 24-48 小时,某些地区需要时间

Q2:应用崩溃

常见原因:

  • SDK 初始化失败
  • 在错误的线程调用 API
  • 内存不足

解决方法:

// 确保在主线程初始化
runOnUiThread(() -> {
    AppLovinSdk.getInstance(context).initialize(...);
});

Q3:广告无法展示

检查清单:

  • [ ] SDK 是否正确初始化
  • [ ] 广告是否已加载(isReady() 返回 true)
  • [ ] 是否在主线程调用 showAd()
  • [ ] 广告位置是否遮挡重要内容