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)
}
相關筆記 ----
沒有留言:
張貼留言