AppLovin MAX SDK 集成完整教程:Android、iOS、Unity 从零到上线
Meta描述:最详细的 AppLovin MAX SDK 集成教程!涵盖 Android、iOS、Unity 三大平台,从环境准备、SDK 安装、初始化、Banner/插屏/激励视频广告集成,到测试调试和上线发布,手把手教你完成 MAX 广告接入,快速实现应用变现。
教程概览
本教程将指导你完成:
- ✅ 环境准备和账号配置
- ✅ SDK 集成和初始化
- ✅ 5种广告格式的完整代码
- ✅ 测试和调试技巧
- ✅ 常见问题解决方案
- ✅ 上线前检查清单
预计完成时间:2-4 小时
前期准备
1. 注册 AppLovin 账号
步骤:
- 访问 https://dash.applovin.com/
- 使用 Google 账号注册
- 等待账号审核通过(2-3天)
2. 创建应用
在 MAX 后台:
登录 MAX Dashboard
↓
Apps > Add App
↓
选择平台(Android/iOS)
↓
输入应用商店链接或手动添加
↓
获取 App ID (ca-app-pub-XXXXXXXXXXXXXXXX~XXXXXXXXXX)
3. 创建广告单元
路径:Apps > 选择应用 > Ad Units > Create
推荐配置:
- Banner: 320×50(底部)
- Interstitial: 全屏插屏
- Rewarded: 激励视频
- Native: 原生广告(可选)
- MREC: 300×250 中矩形(可选)
记录每个广告单元的 Ad Unit ID
4. 开发环境要求
Android
- Android Studio 4.0+
- minSdkVersion 19+
- targetSdkVersion 34+
- Gradle 7.0+
- Kotlin 1.7+ 或 Java 8+
iOS
- Xcode 15.0+
- iOS Deployment Target 12.0+
- Swift 5.0+ 或 Objective-C
- CocoaPods 1.10+ 或 SPM
Unity
- Unity 2019.4 LTS 或更高版本
- Android Build Support
- iOS Build Support
- 推荐 Unity 2021 LTS 或 2022 LTS
一、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
- 在 Xcode 中:File > Add Packages
- 输入 URL:
https://github.com/AppLovin/AppLovin-MAX-Swift-Package.git
- 选择最新版本并添加
步骤 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