0

約10のアクティビティを含むアプリケーションがあります。ユーザーがアクティビティ間を移動するとき、同じ広告を共有したいので、ユーザーが移動するたびに広告がリロードされるのを回避します (広告の定期的な更新時間を維持したい)。

すべてのアクティビティが使用する静的クラスに広告をロードすることを考えています - ここで誰かがそのようなソリューションを実装し、経験を共有できますか (それが可能であると仮定します)?

解決策が不可能な場合、他のアイデアはありますか?

ありがとう!

4

3 に答える 3

0

各レベルの後にインタースティシャル広告を表示するゲーム アプリがあります。アプリ内広告は初めての試みでした。Google Play Services の新しいバージョンを使用しています。

AdMob 関連のすべてのコードを 1 か所にグループ化することにしたので、クラスを設定して、説明しているものと同様にすべてを静的にしました。その結果、広告は表示されましたが、ごく一部の時間しか表示されませんでした。また、アプリ (それまではスムーズに動作していた) が不安定になり、不可解で再現性のないバグに悩まされるようになりました。

数日悩んだ後、コードをアクティビティに移動してから、広告が表示されるようにし、アクティビティの最後の呼び出しにしました。また、すべての関数と変数を非静的にしました。その結果、すべての問題が魔法のように解消され、ゲームは再び滞りなく実行されるようになりました。

紙の上では、静的変数がこれらの問題を引き起こした理由はわかりませんが、この道を進むことを考えている人への私のアドバイスは、不可解なバグが好きでない限り、それを避けることです.

于 2014-05-07T12:35:23.947 に答える
0

これを試す機会はありませんでしたが、静的オブジェクトを使用したソリューションが機能しない理由はわかりません。アクティビティ間で静的オブジェクトを共有できますが、場合によっては両方が同時に 1 つのオブジェクトを使用でき、競合が発生する可能性があることに注意する必要があります。ソリューションは、実装とテストが簡単でなければなりません。何が起こったのか教えてください。

これが役に立ち、あなたの仕事を楽しんでくれることを願っています。

于 2013-05-15T00:00:56.003 に答える
0

item_banner

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/black">

<com.google.android.gms.ads.AdView
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/adView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    ads:adSize="SMART_BANNER"
    ads:adUnitId="@string/admob_banner_unitID_test">
</com.google.android.gms.ads.AdView>
@ActivityScoped //or singleton
class AdMobRepository @Inject constructor(
  private val context: Context,
  private val podoalRepository: PodoalRepository
) {
  val adRequest = AdRequest.Builder().build()

  val staticBanner = ItemBannerBinding.inflate(LayoutInflater.from(context)).apply {
    adView.loadAd(adRequest)
  }.root
}

カスタム ビュー

@ActivityScoped //or singleton
@AndroidEntryPoint
class AdmobBanner  : FrameLayout {

@Inject lateinit var adMobRepository: AdMobRepository

constructor(context: Context) : super(context) {
    init(context)
}

constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
    init(context)
}

constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
    init(context)
}

init {
    addView(adMobRepository.staticBanner.apply { removeSelf() })
}
}

fun View?.removeSelf() {
this ?: return
val parentView = parent as? ViewGroup ?: return
parentView.removeView(this)
}

XMLで

 <AdmobBanner
    app:layout_constraintTop_toTopOf="parent"
    android:layout_width="match_parent"
    android:layout_height="50dp"/>
于 2021-08-01T03:49:42.370 に答える