站点图标 顶峰出海

AppLovin MAX SDK 集成完整教程:Android、iOS、Unity 从零到上线

unnamed

Meta描述:最详细的 AppLovin MAX SDK 集成教程!涵盖 Android、iOS、Unity 三大平台,从环境准备、SDK 安装、初始化、Banner/插屏/激励视频广告集成,到测试调试和上线发布,手把手教你完成 MAX 广告接入,快速实现应用变现。


教程概览

本教程将指导你完成:

预计完成时间:2-4 小时


前期准备

1. 注册 AppLovin 账号

步骤:

  1. 访问 https://dash.applovin.com/
  2. 使用 Google 账号注册
  3. 等待账号审核通过(2-3天)

2. 创建应用

在 MAX 后台:

登录 MAX Dashboard
    ↓
Apps > Add App
    ↓
选择平台(Android/iOS)
    ↓
输入应用商店链接或手动添加
    ↓
获取 App ID (ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX)

3. 创建广告单元

路径:Apps > 选择应用 > Ad Units > Create

推荐配置:

记录每个广告单元的 Ad Unit ID

4. 开发环境要求

Android

iOS

Unity


一、Android 平台完整集成

步骤 1:添加依赖

1.1 项目级 build.gradle

// 项目根目录的 build.gradle
buildscript {
    repositories {
        google()
        mavenCentral()
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

1.2 应用级 build.gradle

// app/build.gradle
plugins {
    id 'com.android.application'
    id 'kotlin-android' // 如果使用 Kotlin
}

android {
    compileSdk 34
    
    defaultConfig {
        applicationId "com.yourapp.package"
        minSdk 19
        targetSdk 34
        versionCode 1
        versionName "1.0"
        
        // 启用 MultiDex(如果 minSdk < 21)
        multiDexEnabled true
    }
    
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    // AppLovin MAX SDK(核心库)
    implementation 'com.applovin:applovin-sdk:12.6.1'
    
    // 可选:添加广告网络适配器
    implementation 'com.applovin.mediation:google-adapter:23.3.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'
    
    // MultiDex(如果需要)
    implementation 'androidx.multidex:multidex:2.0.1'
}

⚠️ 注意: 查看最新版本号请访问: https://github.com/AppLovin/AppLovin-MAX-SDK-Android/releases

1.3 同步项目

点击 Android Studio 顶部的 “Sync Now”,等待依赖下载完成。


步骤 2:添加权限

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yourapp.package">

    <!-- 必需权限 -->
    <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"
        android:theme="@style/Theme.YourApp">
        
        <!-- 你的 Activities -->
        <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

方案 1:在 Application 类中初始化(推荐)

创建 MyApplication.java:

package com.yourapp.package;

import android.app.Application;
import android.util.Log;
import com.applovin.sdk.AppLovinSdk;
import com.applovin.sdk.AppLovinSdkConfiguration;

public class MyApplication extends Application {
    private static final String TAG = "MyApplication";
    
    @Override
    public void onCreate() {
        super.onCreate();
        
        // 初始化 AppLovin SDK
        AppLovinSdk.getInstance(this).setMediationProvider("max");
        AppLovinSdk.initializeSdk(this, new AppLovinSdk.SdkInitializationListener() {
            @Override
            public void onSdkInitialized(final AppLovinSdkConfiguration config) {
                Log.d(TAG, "AppLovin SDK 初始化成功");
                
                // 可选:打印测试设备信息
                Log.d(TAG, "Test Device: " + AppLovinSdk.getInstance(getApplicationContext()).getConfiguration().getTestDeviceAdvertisingIds());
            }
        });
    }
}

Kotlin 版本:

package com.yourapp.package

import android.app.Application
import android.util.Log
import com.applovin.sdk.AppLovinSdk

class MyApplication : Application() {
    companion object {
        private const val TAG = "MyApplication"
    }
    
    override fun onCreate() {
        super.onCreate()
        
        // 初始化 AppLovin SDK
        AppLovinSdk.getInstance(this).mediationProvider = "max"
        AppLovinSdk.initializeSdk(this) { config ->
            Log.d(TAG, "AppLovin SDK 初始化成功")
        }
    }
}

在 AndroidManifest.xml 中注册:

<application
    android:name=".MyApplication"
    ...>

方案 2:在 MainActivity 中初始化

如果不想创建 Application 类,也可以在主 Activity 中初始化:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    // 初始化 AppLovin SDK
    AppLovinSdk.getInstance(this).setMediationProvider("max");
    AppLovinSdk.initializeSdk(this, config -> {
        // SDK 初始化完成,可以开始加载广告
        loadAds();
    });
}

步骤 4:集成 Banner 广告

4.1 在布局文件中添加容器

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<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"
        android:background="#FFFFFF" />

</RelativeLayout>

4.2 加载和展示 Banner

MainActivity.java:

import com.applovin.mediation.MaxAd;
import com.applovin.mediation.MaxAdViewAdListener;
import com.applovin.mediation.MaxError;
import com.applovin.mediation.ads.MaxAdView;
import android.widget.FrameLayout;
import android.graphics.Color;

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() {
        // 替换为你的 Ad Unit ID
        String bannerAdUnitId = "YOUR_BANNER_AD_UNIT_ID";
        
        bannerAd = new MaxAdView(bannerAdUnitId, this);
        
        // 设置广告监听器
        bannerAd.setListener(new MaxAdViewAdListener() {
            @Override
            public void onAdLoaded(MaxAd ad) {
                Log.d(TAG, "Banner 广告加载成功");
            }
            
            @Override
            public void onAdLoadFailed(String adUnitId, MaxError error) {
                Log.e(TAG, "Banner 广告加载失败: " + error.getMessage());
            }
            
            @Override
            public void onAdDisplayed(MaxAd ad) {}
            @Override
            public void onAdHidden(MaxAd ad) {}
            @Override
            public void onAdClicked(MaxAd ad) {
                Log.d(TAG, "Banner 广告被点击");
            }
            @Override
            public void onAdDisplayFailed(MaxAd ad, MaxError error) {}
            @Override
            public void onAdExpanded(MaxAd ad) {}
            @Override
            public void onAdCollapsed(MaxAd ad) {}
        });
        
        // 设置大小(宽度填充,高度自适应)
        int width = ViewGroup.LayoutParams.MATCH_PARENT;
        int heightPx = getResources().getDimensionPixelSize(R.dimen.banner_height);
        bannerAd.setLayoutParams(new FrameLayout.LayoutParams(width, heightPx));
        
        // 设置背景色
        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();
    }
}

Kotlin 版本:

import com.applovin.mediation.MaxAd
import com.applovin.mediation.MaxAdViewAdListener
import com.applovin.mediation.MaxError
import com.applovin.mediation.ads.MaxAdView

class MainActivity : AppCompatActivity() {
    private var bannerAd: MaxAdView? = null
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        createBannerAd()
    }
    
    private fun createBannerAd() {
        val bannerAdUnitId = "YOUR_BANNER_AD_UNIT_ID"
        
        bannerAd = MaxAdView(bannerAdUnitId, this).apply {
            setListener(object : MaxAdViewAdListener {
                override fun onAdLoaded(ad: MaxAd) {
                    Log.d(TAG, "Banner 广告加载成功")
                }
                
                override fun onAdLoadFailed(adUnitId: String, error: MaxError) {
                    Log.e(TAG, "Banner 广告加载失败: ${error.message}")
                }
                
                override fun onAdDisplayed(ad: MaxAd) {}
                override fun onAdHidden(ad: MaxAd) {}
                override fun onAdClicked(ad: MaxAd) {}
                override fun onAdDisplayFailed(ad: MaxAd, error: MaxError) {}
                override fun onAdExpanded(ad: MaxAd) {}
                override fun onAdCollapsed(ad: MaxAd) {}
            })
            
            layoutParams = FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                resources.getDimensionPixelSize(R.dimen.banner_height)
            )
            
            setBackgroundColor(Color.WHITE)
        }
        
        findViewById<FrameLayout>(R.id.banner_container).addView(bannerAd)
        bannerAd?.loadAd()
    }
    
    override fun onDestroy() {
        bannerAd?.destroy()
        super.onDestroy()
    }
}

步骤 5:集成插屏广告

import com.applovin.mediation.MaxAd;
import com.applovin.mediation.MaxAdListener;
import com.applovin.mediation.MaxError;
import com.applovin.mediation.ads.MaxInterstitialAd;
import java.util.concurrent.TimeUnit;

public class MainActivity extends AppCompatActivity {
    private MaxInterstitialAd interstitialAd;
    private int retryAttempt;
    
    private void createInterstitialAd() {
        String interstitialAdUnitId = "YOUR_INTERSTITIAL_AD_UNIT_ID";
        
        interstitialAd = new MaxInterstitialAd(interstitialAdUnitId, this);
        
        interstitialAd.setListener(new MaxAdListener() {
            @Override
            public void onAdLoaded(MaxAd ad) {
                // 广告加载成功,重置重试次数
                retryAttempt = 0;
                Log.d(TAG, "插屏广告加载成功");
            }
            
            @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);
                Log.e(TAG, "插屏广告加载失败," + (delayMillis/1000) + "秒后重试");
            }
            
            @Override
            public void onAdDisplayed(MaxAd ad) {
                Log.d(TAG, "插屏广告展示");
            }
            
            @Override
            public void onAdHidden(MaxAd ad) {
                // 广告关闭后,预加载下一个
                Log.d(TAG, "插屏广告关闭");
                interstitialAd.loadAd();
            }
            
            @Override
            public void onAdClicked(MaxAd ad) {
                Log.d(TAG, "插屏广告被点击");
            }
            
            @Override
            public void onAdDisplayFailed(MaxAd ad, MaxError error) {
                // 展示失败,预加载下一个
                Log.e(TAG, "插屏广告展示失败: " + error.getMessage());
                interstitialAd.loadAd();
            }
        });
        
        // 预加载第一个广告
        interstitialAd.loadAd();
    }
    
    // 在合适的时机展示广告
    private void showInterstitial() {
        if (interstitialAd.isReady()) {
            interstitialAd.showAd();
        } else {
            Log.d(TAG, "插屏广告还未准备好");
            // 如果还没准备好,重新加载
            interstitialAd.loadAd();
        }
    }
    
    @Override
    protected void onDestroy() {
        if (interstitialAd != null) {
            interstitialAd.destroy();
        }
        super.onDestroy();
    }
}

展示时机建议:


步骤 6:集成激励视频广告

import com.applovin.mediation.MaxAd;
import com.applovin.mediation.MaxError;
import com.applovin.mediation.MaxReward;
import com.applovin.mediation.MaxRewardedAdListener;
import com.applovin.mediation.ads.MaxRewardedAd;

public class MainActivity extends AppCompatActivity {
    private MaxRewardedAd rewardedAd;
    private int retryAttempt;
    
    private void createRewardedAd() {
        String rewardedAdUnitId = "YOUR_REWARDED_AD_UNIT_ID";
        
        rewardedAd = MaxRewardedAd.getInstance(rewardedAdUnitId, this);
        
        rewardedAd.setListener(new MaxRewardedAdListener() {
            @Override
            public void onAdLoaded(MaxAd ad) {
                retryAttempt = 0;
                Log.d(TAG, "激励视频广告加载成功");
                // 可以启用"观看广告"按钮
            }
            
            @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) {
                Log.d(TAG, "激励视频开始播放");
            }
            
            @Override
            public void onAdHidden(MaxAd ad) {
                // 广告关闭,预加载下一个
                Log.d(TAG, "激励视频关闭");
                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 rewardAmount = reward.getAmount();
                String rewardLabel = reward.getLabel();
                Log.d(TAG, "用户获得奖励: " + rewardAmount + " " + rewardLabel);
                
                // 在这里实现你的奖励逻辑
                giveRewardToUser(rewardAmount);
            }
            
            @Override
            public void onRewardedVideoStarted(MaxAd ad) {
                Log.d(TAG, "激励视频开始播放");
            }
            
            @Override
            public void onRewardedVideoCompleted(MaxAd ad) {
                Log.d(TAG, "激励视频播放完成");
            }
        });
        
        // 预加载广告
        rewardedAd.loadAd();
    }
    
    // 用户点击"观看广告"按钮时调用
    private void showRewardedAd() {
        if (rewardedAd.isReady()) {
            rewardedAd.showAd();
        } else {
            Log.d(TAG, "激励视频还未准备好");
            // 显示加载提示给用户
            Toast.makeText(this, "广告正在加载,请稍后...", Toast.LENGTH_SHORT).show();
        }
    }
    
    private void giveRewardToUser(int amount) {
        // 实现你的奖励逻辑
        // 例如:增加金币、解锁关卡、获得道具等
        Log.d(TAG, "发放 " + amount + " 个金币给用户");
    }
}

步骤 7:集成原生广告(可选)

原生广告允许你自定义广告样式,融入应用界面。

import com.applovin.mediation.MaxAd;
import com.applovin.mediation.MaxError;
import com.applovin.mediation.nativeAds.MaxNativeAdListener;
import com.applovin.mediation.nativeAds.MaxNativeAdLoader;
import com.applovin.mediation.nativeAds.MaxNativeAdView;

public class MainActivity extends AppCompatActivity {
    private MaxNativeAdLoader nativeAdLoader;
    private MaxAd nativeAd;
    
    private void createNativeAd() {
        String nativeAdUnitId = "YOUR_NATIVE_AD_UNIT_ID";
        
        nativeAdLoader = new MaxNativeAdLoader(nativeAdUnitId, this);
        
        nativeAdLoader.setNativeAdListener(new MaxNativeAdListener() {
            @Override
            public void onNativeAdLoaded(final MaxNativeAdView nativeAdView, final MaxAd ad) {
                // 清除之前的广告
                if (nativeAd != null) {
                    nativeAdLoader.destroy(nativeAd);
                }
                nativeAd = ad;
                
                // 添加到布局
                FrameLayout nativeAdContainer = findViewById(R.id.native_ad_container);
                nativeAdContainer.removeAllViews();
                nativeAdContainer.addView(nativeAdView);
                
                Log.d(TAG, "原生广告加载成功");
            }
            
            @Override
            public void onNativeAdLoadFailed(final String adUnitId, final MaxError error) {
                Log.e(TAG, "原生广告加载失败: " + error.getMessage());
            }
            
            @Override
            public void onNativeAdClicked(final MaxAd ad) {
                Log.d(TAG, "原生广告被点击");
            }
        });
        
        // 加载广告
        nativeAdLoader.loadAd();
    }
    
    @Override
    protected void onDestroy() {
        if (nativeAdLoader != null && nativeAd != null) {
            nativeAdLoader.destroy(nativeAd);
        }
        super.onDestroy();
    }
}

二、iOS 平台完整集成

步骤 1:安装 SDK

方案 1:使用 CocoaPods(推荐)

1.1 安装 CocoaPods(如果还没有):

sudo gem install cocoapods

1.2 在项目根目录创建 Podfile:

cd /path/to/your/project
pod init

1.3 编辑 Podfile:

platform :ios, '12.0'

target 'YourAppName' do
  use_frameworks!
  
  # AppLovin MAX SDK
  pod 'AppLovinSDK'
  
  # 可选:添加广告网络适配器
  pod 'AppLovinMediationGoogleAdManagerAdapter'
  pod 'AppLovinMediationFacebookAdapter'
  pod 'AppLovinMediationUnityAdsAdapter'
  pod 'AppLovinMediationIronSourceAdapter'
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

1.4 安装依赖:

pod install

1.5 打开 .xcworkspace 文件(而非 .xcodeproj)

方案 2:使用 Swift Package Manager

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

步骤 2:配置 Info.plist

在 Info.plist 中添加:

<key>AppLovinSdkKey</key>
<string>YOUR_SDK_KEY</string>

<!-- App Transport Security 设置 -->
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

<!-- 广告追踪透明度(iOS 14+)-->
<key>NSUserTrackingUsageDescription</key>
<string>我们使用数据来为您提供更好的广告体验</string>

<!-- SKAdNetwork(用于 iOS 14+ 广告归因)-->
<key>SKAdNetworkItems</key>
<array>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>4PFYVQ9L8R.skadnetwork</string>
    </dict>
    <!-- 添加更多 SKAdNetwork ID -->
</array>

获取完整的 SKAdNetwork 列表: https://developers.applovin.com/en/ios/preparing-mediated-networks/


步骤 3:初始化 SDK(Swift)

AppDelegate.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: ALSdkConfiguration) in
            // SDK 初始化完成
            print("AppLovin SDK 初始化成功")
            
            // 可选:请求 ATT 授权(iOS 14+)
            self.requestTrackingAuthorization()
        }
        
        return true
    }
    
    func requestTrackingAuthorization() {
        if #available(iOS 14, *) {
            ATTrackingManager.requestTrackingAuthorization { status in
                print("ATT Status: \(status.rawValue)")
            }
        }
    }
}

Objective-C 版本:

#import "AppDelegate.h"
#import <AppLovinSDK/AppLovinSDK.h>
#import <AppTrackingTransparency/AppTrackingTransparency.h>

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    // 初始化 AppLovin SDK
    [[ALSdk shared] setMediationProvider:@"max"];
    [[ALSdk shared] initializeSdkWithCompletionHandler:^(ALSdkConfiguration *configuration) {
        NSLog(@"AppLovin SDK 初始化成功");
        
        // 请求 ATT 授权
        [self requestTrackingAuthorization];
    }];
    
    return YES;
}

- (void)requestTrackingAuthorization {
    if (@available(iOS
退出移动版