初始化 SDK

本頁說明如何初始化 GMA Next-Gen SDK。

事前準備

如要使用 GMA Next-Gen SDK,您必須整合但不使用中介服務,或是使用 Ad Manager 做為中介服務平台。其他中介服務平台與 GMA Next-Gen SDK 不相容。

為 GMA Next-Gen SDK 設定建構作業

以下各節將說明設定 GMA Next-Gen SDK 的必要步驟。

加入 GMA Next-Gen SDK 依附元件

GMA Next-Gen SDK 需要不同的 Gradle 依附元件。在應用程式層級的建構檔中,移除對目前 Mobile Ads SDK 依附元件的參照,並加入新的構件。

Gradle 依附元件
目前

Kotlin

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

Groovy

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

Kotlin

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

Groovy

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

在中介服務整合中排除 com.google.android.gms 模組

中介服務轉接程式仍會依附目前的 Mobile Ads SDK。不過,GMA Next-Gen SDK 包含中介服務轉接程式所需的所有類別。為避免發生與重複符號相關的編譯錯誤,您需要排除中介服務轉接程式將目前的 Mobile Ads SDK 納入為依附元件。

在應用程式層級的建構檔案中,從所有依附元件全域排除 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。將應用程式層級建構檔案中的 minSdkcompileSdk 值分別調整為 24 以上和 34 以上。

初始化 GMA Next-Gen SDK

GMA Next-Gen SDK 必須先初始化,才能載入廣告。目前的 Mobile Ads SDK 則可選擇是否初始化,但建議初始化。如果您先前未在載入廣告前初始化 SDK,請更新程式碼。

本節將說明目前 SDK 和 GMA Next-Gen SDK 在 SDK 初始化導入方面的差異。

設定 Ad Manager 應用程式 ID

下列範例會在目前和 GMA Next-Gen SDK 中設定 Ad Manager 應用程式 ID:

目前

整合時,您需要在應用程式的 AndroidManifest.xml 檔案中,使用 <meta-data> 標記,並在 android:name="com.google.android.gms.ads.APPLICATION_ID" 中加入 Ad Manager 應用程式 ID。

<manifest>
  <application>
    <!-- Sample Ad Manager 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

以程式輔助方式提供 Ad Manager 應用程式 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 Next-Gen SDK:

目前

呼叫 MobileAds.initialize() 初始化 Google Mobile Ads 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 Ad Manager 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 Ad Manager 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();
  }
}