約10のアクティビティを含むアプリケーションがあります。ユーザーがアクティビティ間を移動するとき、同じ広告を共有したいので、ユーザーが移動するたびに広告がリロードされるのを回避します (広告の定期的な更新時間を維持したい)。
すべてのアクティビティが使用する静的クラスに広告をロードすることを考えています - ここで誰かがそのようなソリューションを実装し、経験を共有できますか (それが可能であると仮定します)?
解決策が不可能な場合、他のアイデアはありますか?
ありがとう!
約10のアクティビティを含むアプリケーションがあります。ユーザーがアクティビティ間を移動するとき、同じ広告を共有したいので、ユーザーが移動するたびに広告がリロードされるのを回避します (広告の定期的な更新時間を維持したい)。
すべてのアクティビティが使用する静的クラスに広告をロードすることを考えています - ここで誰かがそのようなソリューションを実装し、経験を共有できますか (それが可能であると仮定します)?
解決策が不可能な場合、他のアイデアはありますか?
ありがとう!
各レベルの後にインタースティシャル広告を表示するゲーム アプリがあります。アプリ内広告は初めての試みでした。Google Play Services の新しいバージョンを使用しています。
AdMob 関連のすべてのコードを 1 か所にグループ化することにしたので、クラスを設定して、説明しているものと同様にすべてを静的にしました。その結果、広告は表示されましたが、ごく一部の時間しか表示されませんでした。また、アプリ (それまではスムーズに動作していた) が不安定になり、不可解で再現性のないバグに悩まされるようになりました。
数日悩んだ後、コードをアクティビティに移動してから、広告が表示されるようにし、アクティビティの最後の呼び出しにしました。また、すべての関数と変数を非静的にしました。その結果、すべての問題が魔法のように解消され、ゲームは再び滞りなく実行されるようになりました。
紙の上では、静的変数がこれらの問題を引き起こした理由はわかりませんが、この道を進むことを考えている人への私のアドバイスは、不可解なバグが好きでない限り、それを避けることです.
これを試す機会はありませんでしたが、静的オブジェクトを使用したソリューションが機能しない理由はわかりません。アクティビティ間で静的オブジェクトを共有できますが、場合によっては両方が同時に 1 つのオブジェクトを使用でき、競合が発生する可能性があることに注意する必要があります。ソリューションは、実装とテストが簡単でなければなりません。何が起こったのか教えてください。
これが役に立ち、あなたの仕事を楽しんでくれることを願っています。
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"/>