初始化 SDK

本页面介绍了初始化 GMA Next-Gen 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.9.0")
}

Groovy

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

Kotlin

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

Groovy

dependencies {
  // ...
  // Comment out/remove play-services-ads.
  // implementation 'com.google.android.gms:play-services-ads:24.9.0'
  implementation 'com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk:0.22.0-beta04'
}

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

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

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

Kotlin

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

Groovy

configurations.configureEach {
    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 Next-Gen SDK 需要在加载广告之前进行初始化,这与当前移动广告 SDK 不同,后者虽然建议进行初始化,但并非强制要求。如果您之前未在加载广告之前初始化 SDK,请更新您的代码。

本部分介绍了当前版本与 GMA Next-Gen SDK 在 SDK 初始化实现方面的差异。

设置 AdMob 应用 ID

以下示例在当前和 GMA Next-Gen 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 -> {});

查看实现变更

以下示例初始化了当前和 GMA Next-Gen 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();
  }
}