Smart Banner 將停用,全面以 Adaptive Banner 取代!
因應 Java 的改版, AdMob 也跟著更新,並改變了 取得 AdSize 的寫法
app 層級的 build.gradle 要使用最新版的 play-services-ads,目前(2022.10.23) 是 21.3.0。
... ... dependencies { ... ... implementation 'com.google.android.gms:play-services-ads:21.3.0' ... ... }
strings.xml
... ... < 測試的 AdMob app id --> <string name="app_id">ca-app-pub-3940256099942544~3347511713</string> < 測試的 AdMob 橫幅 id --> <string name="banner">ca-app-pub-3940256099942544/6300978111</string> ... ...
AndroidManifest.xml
<application ... ... > <!-- App ID --> <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="@string/app_id" /> ... ... <activity ... ...
原本的 layout.xml 是在佈局中直接放一個 adview,因為要動態決定 adview 的尺寸,就不這麼做了。
... ... <com.google.android.gms.ads.adview ads:adsize="SMART_BANNER" ads:adunitid="@string/banner_ad_unit_id" android:id="@+id/adView" android:layout_alignparentbottom="true" android:layout_alignparentend="true" android:layout_alignparentleft="true" android:layout_alignparentright="true" android:layout_alignparentstart="true" android:layout_height="wrap_content" android:layout_width="match_parent" /> ... ...
改成以 framelayout 做為 AdView 的容器(container)
... ... <!-- 只要是 ViewGroup 層級皆可,ex:FrameLayout...,視您的需要自行變化 --> <LinearLayout android:id="@+id/ad_view_container" android:layout_alignParentBottom="true" android:layout_centerInParent="true" android:layout_height="wrap_content" android:layout_width="match_parent" /> ... ...
MainActivity.kt
... ... class MainActivity : AppCompatActivity() { private lateinit var adView: AdView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) MobileAds.initialize(this) { } // 程式執行時,取得當時的螢幕寬度 // 再動態決定 adView 的尺寸 adView = AdView(this) ad_view_container.addView(adView) loadBanner() } // 取得螢幕尺寸 private val adSize: AdSize get() { val iScreenWidth = getScreenWidth() val fDensity = getDensity() val adWidth = (iScreenWidth / fDensity).toInt() return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth) } private fun getScreenWidth(): Int { val wm = application.getSystemService(WINDOW_SERVICE) as WindowManager return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { val windowMetrics = wm.currentWindowMetrics windowMetrics.bounds.width() } else { val displayMetrics = DisplayMetrics() wm.defaultDisplay.getMetrics(displayMetrics) displayMetrics.widthPixels } } private fun getDensity(): Float { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { val config: Configuration = application.resources.configuration config.densityDpi / 160f } else { val metrics = application.resources.displayMetrics metrics.density } } // 載入橫幅 private fun loadBanner() { adView.adUnitId = getString(R.string.banner) // adView.adSize = adSize mAdView.setAdSize(adSize) val adRequest = AdRequest.Builder().build() adView.loadAd(adRequest) }
相關筆記 ----
沒有留言:
張貼留言