本頁面說明如何遷移現行和舊版。
從 v22 遷移至 v23
最低 Android API 級別為 21
自 23.0.0 版起,Google Mobile Ads SDK 要求所有應用程式必須在 Android API 級別 21 以上版本執行。如要調整 API 級別,請將應用程式層級 build.gradle
檔案中的 minSdkVersion
值變更為 21 以上。
可連結從父類別繼承的 AdManagerAdRequest.Builder
方法
在 23.0.0 版中,您可以將繼承自父項的 AdManagerAdRequest.Builder
方法鏈結在一起,透過單一呼叫建立 AdManagerAdRequest
:
Java
AdManagerAdRequest request = new AdManagerAdRequest.Builder() .addCustomTargeting("age", "25") // AdManagerAdRequest.Builder method. .setContentUrl("https://www.example.com") // Method inherited from parent. .build(); // Builds an AdManagerAdRequest.
Kotlin
var request = AdManagerAdRequest.Builder() .addCustomTargeting("age", "25") // AdManagerAdRequest.Builder method. .setContentUrl("https://www.example.com") // Method inherited from parent. .build() // Builds an AdManagerAdRequest.
已淘汰的方法已移除/取代
v22.0.0 API | v23.0.0 API |
---|---|
AdRequest.Builder.addTestDevice() | RequestConfiguration.Builder.setTestDeviceIds() |
AdRequest.Builder.tagForChildDirectedTreatment() | RequestConfiguration.Builder.setTagForChildDirectedTreatment() |
AdRequest.Builder.setIsDesignedForFamilies() | RequestConfiguration.Builder.setMaxAdContentRating() |
AdFormat.UNKNOWN | 不替換 |
AdLoader.Builder.forUnifiedNativeAd() | AdLoader.Builder.forNativeAd() |
AdLoader.Builder.forCustomTemplateAd() | AdLoader.Builder.forCustomFormatAd() |
AdLoader.Builder.withNativeAdOptions(com.google.android.gms.ads.formats .NativeAdOptions)
|
AdLoader.Builder.withNativeAdOptions(com.google.android.gms.ads.nativead .NativeAdOptions)
|
void MobileAds.setSameAppKeyEnabled() | boolean MobileAds.putPublisherFirstPartyIdEnabled() |
從 v21 遷移至 v22
使用 MobileAds.getVersion() 取得 Google Mobile Ads SDK 版本
MobileAds.getVersionString()
方法已在 22.0.0 版中移除,改用 MobileAds.getVersion()
。
新方法會傳回預期的外部版本號碼,例如 22.0.0
。如要進一步瞭解這項異動,請參閱「使用新的 Google Mobile Ads SDK getVersion() 方法」。
移除已淘汰的 NativeCustomFormatAd.getVideoMediaView()
在 21 版中,Google Mobile Ads SDK 提供 NativeCustomFormatAd.getVideoMediaView()
方法,可為原生自訂廣告格式取得媒體素材資源。
從 22 版開始,您可以自行建立 MediaView
並設定媒體內容,然後使用 MediaContent.getVideoController()
取得影片控制項。
v22
// Called when a custom native ad loads. @Override public void onCustomFormatAdLoaded(NativeCustomFormatAd ad) { // Assumes you have a FrameLayout in your view hierarchy with the id media_placeholder. FrameLayout mediaPlaceholder = (FrameLayout) findViewById(R.id.media_placeholder); MediaContent mediaContent = ad.getMediaContent(); if (mediaContent != null && mediaContent.hasVideoContent()) { // Create a MediaView and set its media content. MediaView mediaView = new MediaView(mediaPlaceholder.getContext()); mediaView.setMediaContent(mediaContent); mediaPlaceholder.addView(mediaView); } }
v21
// Called when a custom native ad loads. @Override public void onCustomFormatAdLoaded(NativeCustomFormatAd ad) { // Assumes you have a FrameLayout in your view hierarchy with the id media_placeholder. FrameLayout mediaPlaceholder = (FrameLayout) findViewById(R.id.media_placeholder); VideoController videoController = ad.getVideoController(); if (videoController.hasVideoContent()) { // Add the media view provided by the native ad. mediaPlaceholder.addView(ad.getVideoMediaView()); } }
詳情請參閱自訂原生廣告指南。
已移除或取代的做法
下表列出 22.0.0 版的具體異動內容。
v21.0.0 | v22.0.0 |
---|---|
MobileAds.getVersionString() | MobileAds.getVersion() |
NativeCustomFormatAd.getVideoMediaView() | NativeCustomFormatAd.getMediaContent() |
NativeCustomFormatAd.getVideoController() | NativeCustomFormatAd.getMediaContent().getVideoController() |
AdRequest.Builder.setAdInfo() | AdRequest.Builder.setAdString() |
MediationRewardedVideoAdAdapter | 轉接器 |
MediationRewardedVideoAdListener | |
com.google.android.gms.ads.mediation.VersionInfo | com.google.android.gms.ads.VersionInfo |
com.google.android.gms.ads.doubleclick.AppEventListener | com.google.android.gms.ads.admanager.AppEventListener |
從 v20 遷移至 v21
將 minSdkVersion 更新為 19 以上版本
自 21.0.0 版起,Google Mobile Ads SDK 要求所有應用程式必須在 Android API 級別 19 以上版本執行。如要調整 API 級別,請將應用程式建構檔案中的 minSdkVersion
值變更為 19 以上。
強制執行嚴格的是否可為空值
為了強制執行嚴格的可空值性,我們在先前未明確定義可空值性的所有 API 中,新增了 @NonNull
註解。
如果發生空值安全性違規情形,且先前未以安全的方式處理 null
值,這項變更可能會導致 Kotlin 應用程式和使用 Java 空值檢查架構的應用程式發生異常 (請參閱 Kotlin 空值安全性說明文件)。
移除 addNetworkExtras() 方法
將額外參數以 NetworkExtras
例項的形式傳遞至特定廣告聯播網轉接器的 addNetworkExtras()
方法已在 SDK 20.3.0 版中淘汰,並會在 21.0.0 版中移除。請改用相同 AdRequest.Builder
類別的 addNetworkExtrasBundle()
方法。
移除位置方法
下列位置資訊方法將在 21.0.0 版中移除:
AdRequest.Builder
類別中的setLocation(Location location)
方法,可設定使用者位置,用於中介服務指定目標。AdRequest
類別中的getLocation()
方法,可傳回先前傳遞至setLocation(Location location)
方法的使用者位置指定資訊。MediationAdConfiguration
類別中的getLocation()
方法,會傳回使用者的位置 (如果已由AdRequest
定義)。
Google 不會將位置資料用於指定廣告。如有需要,您應使用第三方 API 將資訊提供給第三方廣告聯播網。
自訂事件介面已淘汰
自訂事件可讓使用 的中介服務發布商,設定非 Ad Manager支援的廣告來源的刊登序列廣告來源。
所有自訂事件介面已淘汰,改用 Adapter
類別和 MediationAdLoadCallback
介面。
下表列出自 21.0.0 版起,應針對每個自訂事件介面使用的對應類別或介面:
從 v19 遷移至 v20
版本 20.0.0 中包含許多破壞性變更。版本 19.7.0 推出了許多新的 API,並淘汰或重新命名許多類別,為版本 20.0.0 的推出做準備。本指南會列出 20.0.0 版的主要變更。
全螢幕格式 API 更新
從 20.0.0 版開始,插頁式廣告、獎勵廣告、插頁式獎勵廣告和應用程式開啟頁面廣告格式已標準化,以便遵循一致的 API 設計。
所有全螢幕格式 API 都會採用下列原則:
- 靜態載入方法
- 類似的載入回呼或處理常式機制
- 依賴
FullScreenContentCallback
類別的簡報回呼
移除舊版 RewardedVideoAd API
較新的 RewardedAd
API 於 2019 年 3 月首次推出,已成為 18 個月來最受歡迎的獎勵 API。與舊版 RewardedVideoAd
API 相比,它有更多強化功能,包括一次載入多個獎勵廣告的功能。
舊版 RewardedVideoAd
API 已在 SDK 20.0.0 版中移除。
智慧型橫幅廣告淘汰,改用自動調整橫幅廣告
智慧型橫幅廣告已淘汰,改用自動調整橫幅廣告。自動調整橫幅廣告可提供更優異的成效,並在設定廣告寬度時提供更大的彈性。如果您想繼續使用全寬橫幅廣告,仍可使用自動調整橫幅廣告,如以下程式碼片段所示:
Java
public class MyActivity extends AppCompatActivity { ... private AdSize getFullWidthAdaptiveSize() { Display display = getWindowManager().getDefaultDisplay(); DisplayMetrics outMetrics = new DisplayMetrics(); display.getMetrics(outMetrics); float widthPixels = outMetrics.widthPixels; float density = outMetrics.density; int adWidth = (int) (widthPixels / density); return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth); } }
Kotlin
class MyActivity : AppCompatActivity() { ... private val adaptiveAdSize: AdSize get() { val display = windowManager.defaultDisplay val outMetrics = DisplayMetrics() display.getMetrics(outMetrics) val density = outMetrics.density var adWidthPixels = ad_view_container.width.toFloat() if (adWidthPixels == 0f) { adWidthPixels = outMetrics.widthPixels.toFloat() } val adWidth = (adWidthPixels / density).toInt() return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth) } }
移除應用程式回呼
已移除所有廣告格式的 onAdLeftApplication
回呼,改用 ProcessLifecycleOwner
。使用 OS 級別 API 可在使用者離開應用程式時通知您,無論是否因廣告互動而離開皆然。
請注意,onAdLeftApplication
回呼並非廣告點擊處理程序,且依賴這個回呼來回報點擊次數,並不會產生準確的指標。舉例來說,點選啟動外部瀏覽器的 AdChoices 圖示會叫用回呼,但不會計為點擊。
重新命名類別
下表列出已變更或移除的特定類別名稱。簡單來說:
- 與
UnifiedNativeAd
相關的大部分類別已重新命名為NativeAd
。 - 已移除
MobileAds.Settings
、NativeExpressAdView
、NativeAppInstallAd
、NativeContentAd
和InstreamAd
類別和檢視畫面。 - 所有含有
Publisher
前置字串的類別都已替換為AdManager
前置字串。 InterstitialAd
套件名稱已變更。
19.5.0 級 | 20.0.0 級 |
---|---|
com.google.android.gms.ads. | com.google.android.gms.ads. |
reward.RewardedVideoAd | rewarded.RewardedAd |
reward.RewardedVideoAdListener | rewarded.RewardedAdLoadCallback 和 FullScreenContentCallback |
reward.RewardItem | rewarded.RewardItem |
rewarded.RewardedAdCallback | OnUserEarnedRewardListener |
formats.UnifiedNativeAdView | nativead.NativeAdView |
formats.UnifiedNativeAd | nativead.NativeAd |
formats.UnifiedNativeAdAssetNames | nativead.NativeAdAssetNames |
formats.UnifiedNativeAd.OnUnifiedNativeAdLoadedListener | nativead.NativeAd.OnNativeAdLoadedListener |
formats.AdChoicesView | nativead.AdChoicesView |
formats.NativeAd.AdChoicesInfo | nativead.NativeAd.AdChoicesInfo |
formats.MediaView | nativead.MediaView |
formats.NativeAdViewHolder | nativead.NativeAdViewHolder |
formats.NativeAdOptions | nativead.NativeAdOptions |
formats.NativeCustomTemplateAd | nativead.NativeCustomFormatAd |
formats.NativeCustomTemplateAd |
nativead.NativeCustomFormatAd |
MobileAds.Settings | 已移除 |
doubleclick.PublisherAdRequest | admanager.AdManagerAdRequest |
doubleclick.PublisherAdView | admanager.AdManagerAdView |
formats.PublisherAdViewOptions | formats.AdManagerAdViewOptions |
doubleclick.PublisherInterstitialAd | admanager.AdManagerInterstitialAd |
InterstitialAd | interstitial.InterstitialAd |
NativeExpressAdView | 已移除 |
instream.InstreamAd | 已移除 |
mediation.admob.AdMobExtras | 已移除 |
相關器 | 已移除 |
search.SearchAdRequest | 已移除 |
介面 AdRequest.TagForUnderAgeOfConsent | 已移除 |
介面 AdRequest.MaxAdContentRating | 已移除 |
formats.NativeAppInstallAd | native.NativeAd |
formats.NativeAppInstallAdView | native.NativeAdView |
mediation.NativeAppInstallAdMapper | mediation.UnifiedNativeAdMapper |
formats.NativeContentAd | native.NativeAd |
formats.NativeContentAdView | native.NativeAdView |
mediation.NativeContentAdMapper | mediation.UnifiedNativeAdMapper |
已移除/取代的程式設計
下表列出 20.0.0 版的具體異動內容。摘要說明:
- MobileAds 類別已移除過時的初始化方法。
AdRequest.Builder()
類別中的部分方法已移除或移至RequestConfiguration
類別。- RewardedAd 和 InterstitialAd API 已更新,以便配合所有全螢幕格式。
- 已移除相關聯器功能。
類別 | API 19.5.0 版 | v20.0.0 API | 附註 |
---|---|---|---|
AdSize | getPortraitBanner |
getPortraitAnchored |
|
getLandscapeBanner |
getLandscapeAnchored |
||
getCurrentOrientation |
getCurrentOrientationAnchored |
||
MobileAds | initialize(Context, String) | MobileAds.initialize(Context, OnInitializationComplete |
應用程式 ID 現已設在 AndroidManifest.xml 中。 |
initialize(Context, String, MobileAds.Settings) | initialize(Context, OnInitializationComplete |
Settings 類別已淘汰。 | |
getRewardedVideo |
已移除 | 請改用 RewardedAd API。 | |
AdListener | onAdFailedToLoad(int) | onAd |
|
onAdLeftApplication() | 已移除 | 全螢幕廣告格式會使用 FullscreenContentCallback 取代 AdListener,而 FullscreenContentCallback 上沒有等同的方法。該方法已從 AdListener 中移除。 | |
VideoController | getAspectRatio() | MediaContent.getAspectRatio() | |
PublisherAdRequest | getGender() | 已移除 | |
getBirthday() | 已移除 | ||
getNetworkExtras() | 已移除 | ||
setManualImpressions |
已移除 | ||
updateCorrelator() | 已移除 | 請參閱「廣告內容篩選」一文。 | |
PublisherAdRequest.Builder | setBirthday() | 已移除 | |
setGender() | 已移除 | ||
setIsDesignedForFamilies() | 已移除 | 請參閱指南。 | |
addTestDevice() | RequestConfiguration |
請參閱「啟用測試廣告」一文。 | |
tagForChildDirectedTreatment() | RequestConfiguration |
請參閱「廣告內容篩選」一文。 | |
setTagFor |
RequestConfiguration |
||
setMaxAdContentRating() | RequestConfiguration |
||
AdView | getMediationAdapter |
ResponseInfo |
您現在可以透過 AdView 方法 getResponseInfo() 取得 ResponseInfo 物件。 |
NativeAdOptions | setImageOrientation() | setMediaAspectRatio() | |
getImageOrientation | getMediaAspectRatio() | ||
RewardedAd | loadAd(AdRequest, RewardedAdLoadCallback) | RewardedAd.load(Context, String, AdRequest, RewardedAdLoadCallback) | RewardedAd 現在採用與其他全螢幕格式相同的靜態載入方法。 |
loadAd(PublisherAdRequest, RewardedAdLoadCallback) | RewardedAd.load(Context, String, AdManagerAdRequest, RewardedAdLoadCallback) | ||
isLoaded() | 已移除 | 靜態載入方法的回呼會提供已載入的廣告。 | |
show(Activity, RewardedAdCallback) | show(Activity, OnUserEarnedRewardListener) | 這個顯示方法遵循更廣泛的全螢幕格式方法。 | |
RewardedAdLoadCallback | onRewardedAd |
onAd |
|
onRewardedAd |
onAd |
||
onRewardedAdLoaded() | onAdLoaded(RewardedAd) | ||
AppOpenAdLoadCallback | onAppOpenAd |
onAd |
|
onAppOpenAd |
onAd |
||
onAppOpenAd |
onAdLoaded(AppOpenAd) | ||
RewardedInterstitialAdLoad |
onRewardedInterstitialAd |
onAd |
|
onRewardedInterstitialAd |
onAd |
||
onRewardedInterstitialAd |
onAd |
||
PublisherInterstitialAd | new PublisherInterstitialAd() | InterstitialAd.load(Context, String, AdRequest, InterstitialAdLoadCallback) | InterstitialAd 現在採用與其他全螢幕格式相同的靜態載入方法。 |
setAdListener() | |||
DynamicHeightSearchAd |
getNetworkExtras() | 已移除 | NetworkExtras 類別已淘汰。 |
AdLoader | forContentAd() | 已移除 | |
forAppInstallAd() | 已移除 | ||
withCorrelator() | 已移除 | ||
getMediationAdapter |
已移除 |