初始化 SDK

本页面介绍了初始化 GMA 新一代 SDK 的说明。

准备工作

如需使用 GMA Next Gen SDK,您必须在不使用中介的情况下进行集成,或者将 AdMob 用作中介平台。其他中介平台与 GMA Next Gen SDK 不兼容。

为 GMA Next Gen SDK 配置 build

以下部分将介绍配置 GMA Next Gen SDK 的必要步骤。

添加 GMA Next Gen SDK 依赖项

GMA Next Gen SDK 需要不同的 Gradle 依赖项。在应用级 build 文件中,移除对当前移动广告 SDK 依赖项的引用,并添加新的制品。

Gradle 依赖项
当前

Kotlin

dependencies {
  // ...
  implementation("com.google.android.gms:play-services-ads:24.7.0")
}

Groovy

dependencies {
  // ...
  implementation 'com.google.android.gms:play-services-ads:24.7.0'
}
GMA Next Gen SDK

Kotlin

dependencies {
  // ...
  // Comment out/remove play-services-ads.
  // implementation("com.google.android.gms:play-services-ads:24.7.0")
  implementation("com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk:0.21.0-beta01")
}

Groovy

dependencies {
  // ...
  // Comment out/remove play-services-ads.
  // implementation 'com.google.android.gms:play-services-ads:24.7.0'
  implementation 'com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk:0.21.0-beta01'
}

排除中介集成中的 com.google.android.gms 模块

中介适配器仍依赖于当前的移动广告 SDK。不过,GMA Next Gen SDK 包含中介适配器所需的所有类。为避免出现与重复符号相关的编译错误,您需要排除当前移动广告 SDK,以防止中介适配器将其作为依赖项拉取。

在应用级 build 文件中,从所有依赖项中全局排除 play-services-adsplay-services-ads-lite 模块。

Kotlin

configurations.all {
    exclude(group = "com.google.android.gms", module = "play-services-ads")
    exclude(group = "com.google.android.gms", module = "play-services-ads-lite")
}

Groovy

configurations {
  all {
    exclude(group = "com.google.android.gms", module = "play-services-ads")
    exclude(group = "com.google.android.gms", module = "play-services-ads-lite")
  }
}

设置最低和编译 Android API 级别

GMA Next Gen SDK 要求最低 Android API 级别为 24,编译 Android API 级别为 34。将应用级 build 文件中的 minSdkcompileSdk 值分别调整为 24 或更高值和 34 或更高值。

初始化 GMA Next Gen SDK

GMA 新一代 SDK 要求在加载广告之前进行初始化,这与当前移动广告 SDK 不同,后者虽然建议进行初始化,但并非强制要求。如果您之前未在加载广告之前初始化 SDK,请更新您的代码。

本部分介绍了当前 SDK 与 GMA 新一代 SDK 在 SDK 初始化实现方面的差异。

设置 AdMob 应用 ID

以下示例展示了如何在当前 SDK 和 GMA 新一代 SDK 中设置 AdMob 应用 ID:

当前

集成需要在应用的 AndroidManifest.xml 文件中添加一个 <meta-data> 标记,其中包含 android:name="com.google.android.gms.ads.APPLICATION_ID" 和您的 AdMob 应用 ID。

<manifest>
  <application>
    <!-- Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713 -->
    <meta-data
        android:name="com.google.android.gms.ads.APPLICATION_ID"
        android:value="SAMPLE_APP_ID"/>
  </application>
</manifest>
GMA Next Gen SDK

以编程方式提供 AdMob 应用 ID,作为 SDK 初始化的一部分。

Kotlin

// Initialize the Google Mobile Ads SDK.
val initConfig = InitializationConfig.Builder("SAMPLE_APP_ID").build()
MobileAds.initialize(this@MainActivity, initConfig) {}

Java

// Initialize GMA Next Gen SDK.
InitializationConfig initConfig =
    new InitializationConfig.Builder("SAMPLE_APP_ID").build();
MobileAds.initialize(this, initConfig, initializationStatus -> {});

查看实现变更

以下示例展示了如何初始化当前 SDK 和 GMA 新一代 SDK:

当前

调用 MobileAds.initialize() 以初始化 Google 移动广告 SDK。建议在后台线程上进行初始化,以减少 ANR。

Kotlin

import com.google.android.gms.ads.MobileAds
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

class MainActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val backgroundScope = CoroutineScope(Dispatchers.IO)
    backgroundScope.launch {
      // Initialize the Google Mobile Ads SDK on a background thread.
      MobileAds.initialize(this@MainActivity) {}
    }
  }
}

Java

import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;

public class MainActivity extends AppCompatActivity {
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new Thread(
            () -> {
              // Initialize the Google Mobile Ads SDK on a background thread.
              MobileAds.initialize(this, initializationStatus -> {});
            })
        .start();
  }
}
GMA Next Gen SDK

调用 MobileAds.initialize() 以初始化 GMA Next Gen SDK。必须在后台线程上调用此方法,否则可能会导致“应用无响应”(ANR) 错误。

Kotlin

import com.google.android.libraries.ads.mobile.sdk.MobileAds
import com.google.android.libraries.ads.mobile.sdk.initialization.InitializationConfig
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

class MainActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val backgroundScope = CoroutineScope(Dispatchers.IO)
    backgroundScope.launch {
      // Initialize GMA Next Gen SDK on a background thread.
      MobileAds.initialize(
        this@MainActivity,
        // Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713
        InitializationConfig.Builder("SAMPLE_APP_ID").build()
      ) {
        // Adapter initialization is complete.
      }
      // Other methods on MobileAds can now be called.
    }
  }
}

Java

import com.google.android.libraries.ads.mobile.sdk.MobileAds;
import com.google.android.libraries.ads.mobile.sdk.initialization.InitializationConfig;

public class MainActivity extends AppCompatActivity {
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new Thread(
            () -> {
              // Initialize GMA Next Gen SDK on a background thread.
              MobileAds.initialize(
                  this,
                  // Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713
                  new InitializationConfig.Builder("SAMPLE_APP_ID")
                      .build(),
                  initializationStatus -> {
                    // Adapter initialization is complete.
                  });
              // Other methods on MobileAds can now be called.
            })
        .start();
  }
}