初始化 SDK

本页面介绍了如何初始化 Google 移动广告 SDK(Beta 版)。

准备工作

如需使用 Google 移动广告 SDK(Beta 版),您必须集成该 SDK,但不使用中介,或者使用 AdMob 作为中介平台。其他中介平台与 Google 移动广告 SDK(Beta 版)不兼容。

为 Google 移动广告 SDK(Beta 版)配置 build

以下部分将介绍配置 Google 移动广告 SDK(Beta 版)的必要步骤。

添加 Google 移动广告 SDK(Beta 版)依赖项

Google 移动广告 SDK(Beta 版)需要不同的 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'
}
Google 移动广告 SDK(Beta 版)

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。不过,Google 移动广告 SDK(Beta 版)包含中介适配器所需的所有类。为避免出现与重复符号相关的编译错误,您需要排除当前移动广告 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 级别

Google 移动广告 SDK(Beta 版)要求最低 Android API 级别为 24,编译 Android API 级别为 34。将应用级 build 文件中的 minSdkcompileSdk 值分别调整为 24 或更高值和 34 或更高值。

初始化 Google 移动广告 SDK(Beta 版)

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

本部分介绍了当前 SDK 与 Google 移动广告 SDK(Beta 版)在 SDK 初始化实现方面的差异。

设置 AdMob 应用 ID

以下示例在当前 Google 移动广告 SDK(Beta 版)中设置了 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>
Google 移动广告 SDK(Beta 版)

以编程方式提供 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 Google Mobile Ads SDK (beta).
InitializationConfig initConfig =
    new InitializationConfig.Builder("SAMPLE_APP_ID").build();
MobileAds.initialize(this, initConfig, initializationStatus -> {});

查看实现变更

以下示例初始化了当前版本的 Google 移动广告 SDK 和 Google 移动广告 SDK(Beta 版):

当前

调用 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();
  }
}
Google 移动广告 SDK(Beta 版)

调用 MobileAds.initialize() 以初始化 Google 移动广告 SDK(Beta 版)。必须在后台线程上调用此方法,否则可能会导致“应用无响应”(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 Google Mobile Ads SDK (beta) 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 Google Mobile Ads SDK (beta) 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();
  }
}