2020-07-23

【Kotlin】AdMob 新型態橫幅廣告 Adaptive Banner(自適應橫幅)

參考資料 ----


原本的 智能横幅广告(Smart Banner),通常情況下,在手機上,智能橫幅在屏幕為縱向時,高度為 50dp;當屏幕為橫向時,高度為 32dp。在平板電腦上,不論屏幕方向為縱向還是橫向,橫幅高度通常均為 90dp。 

 

Adaptive Banner 的做法是,當圖片廣告不足以佔據所分配的整個空間時,系統會居中放置圖片,然後填充兩側剩餘的空間。

簡言之,Smart Banner 的高度是固定的,而新型態的 Adaptive Banner 是會依據螢幕的寬度,等比例顯示橫幅廣告。 

 

** 2020.11.17 更新補充 **

Smart Banner 將停用,全面以 Adaptive Banner 取代。


app 層級build.gradle 要使用最新版的 play-services-ads,目前(2020.07.29) 是 19.3.0

  1.  
  2. ...
  3. ...
  4. dependencies {
  5. ...
  6. ...
  7. implementation 'com.google.android.gms:play-services-ads:19.3.0'
  8. ...
  9. ...
  10. }
  11.  


strings.xml
  1.  
  2. ...
  3. ...
  4.  
  5. < 測試的 AdMob app id -->
  6. <string name="app_id">ca-app-pub-3940256099942544~3347511713</string>
  7. < 測試的 AdMob 橫幅 id -->
  8. <string name="banner">ca-app-pub-3940256099942544/6300978111</string>
  9.  
  10. ...
  11. ...
  12.  


AndroidManifest.xml
  1.  
  2. <application
  3. ...
  4. ... >
  5.  
  6. <!-- App ID -->
  7. <meta-data
  8. android:name="com.google.android.gms.ads.APPLICATION_ID"
  9. android:value="@string/app_id" />
  10. ...
  11. ...
  12. <activity
  13. ...
  14. ...
  15.  


原本的 layout.xml 是在佈局中直接放一個 adview,因為要動態決定 adview 的尺寸,就不這麼做了。
  1.  
  2. ...
  3. ...
  4.  
  5. <com.google.android.gms.ads.adview
  6. ads:adsize="SMART_BANNER"
  7. ads:adunitid="@string/banner_ad_unit_id"
  8. android:id="@+id/adView"
  9. android:layout_alignparentbottom="true"
  10. android:layout_alignparentend="true"
  11. android:layout_alignparentleft="true"
  12. android:layout_alignparentright="true"
  13. android:layout_alignparentstart="true"
  14. android:layout_height="wrap_content"
  15. android:layout_width="match_parent" />
  16.  
  17. ...
  18. ...
  19.  

改成以 framelayout 做為 AdView 的容器(container)
  1.  
  2. ...
  3. ...
  4.  
  5. <!-- 只要是 ViewGroup 層級皆可,ex:FrameLayout...,視您的需要自行變化 -->
  6. <LinearLayout
  7. android:id="@+id/ad_view_container"
  8. android:layout_alignParentBottom="true"
  9. android:layout_centerInParent="true"
  10. android:layout_height="wrap_content"
  11. android:layout_width="match_parent" />
  12. ...
  13. ...
  14.  


MainActivity.kt
  1.  
  2. ...
  3. ...
  4.  
  5. class MainActivity : AppCompatActivity()
  6. {
  7. private lateinit var adView: AdView
  8.  
  9. override fun onCreate(savedInstanceState: Bundle?)
  10. {
  11. super.onCreate(savedInstanceState)
  12. setContentView(R.layout.activity_main)
  13.  
  14. MobileAds.initialize(this) { }
  15.  
  16. // 程式執行時,取得當時的螢幕寬度
  17. // 再動態決定 adView 的尺寸
  18. adView = AdView(this)
  19. ad_view_container.addView(adView)
  20. loadBanner()
  21.  
  22. }
  23.  
  24.  
  25. // 取得螢幕尺寸
  26. private val adSize: AdSize get()
  27. {
  28. val display = windowManager.defaultDisplay
  29. val outMetrics = DisplayMetrics()
  30. display.getMetrics(outMetrics)
  31.  
  32. val density = outMetrics.density
  33.  
  34. var adWidthPixels = ad_view_container.width.toFloat()
  35. if (adWidthPixels == 0f)
  36. {
  37. adWidthPixels = outMetrics.widthPixels.toFloat()
  38. }
  39.  
  40. val adWidth = (adWidthPixels / density).toInt()
  41. return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth)
  42. }
  43.  
  44. // 載入橫幅
  45. private fun loadBanner()
  46. {
  47. adView.adUnitId = getString(R.string.banner)
  48. adView.adSize = adSize
  49. val adRequest = AdRequest.Builder().build()
  50. adView.loadAd(adRequest)
  51. }
  52.  




可以看到橫幅的左,右兩邊都沒有空白了。


相關筆記 ----




沒有留言:

張貼留言