Skip to content

Instantly share code, notes, and snippets.

@stanbar
Created April 14, 2019 17:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stanbar/6e216135ad2df623e445de22b2b8df76 to your computer and use it in GitHub Desktop.
Save stanbar/6e216135ad2df623e445de22b2b8df76 to your computer and use it in GitHub Desktop.
sealed class AdProvider {
class BrandAdProvider(val name: String, val linkUrl: String, val imageGs: String) : AdProvider() {
val imageRef: StorageReference get() = FirebaseStorage.getInstance().getReferenceFromUrl(imageGs)
}
object AdMobProvider : AdProvider()
fun setupAds(where: String, adMobView: AdView, adBrandBanner: ImageView, firebaseAnalytics : FirebaseAnalytics) {
if (Utils.isProVersion) {
adMobView.hide()
adBrandBanner.hide()
} else {
when (this) {
is AdMobProvider -> {
Timber.d("loading admob banner")
adBrandBanner.hide()
adMobView.show()
adMobView.requestAd()
}
is BrandAdProvider -> {
Timber.d("loading branded banner")
adMobView.hide()
adBrandBanner.show()
adBrandBanner.setOnClickListener {
AdsService.showAd(adMobView.context, firebaseAnalytics, this, where)
}
GlideApp.with(adMobView.context)
.load(this.imageRef)
.fitCenter()
.into(adBrandBanner)
}
}
}
}
}
object RemoteConfig {
private val gson: Gson = Gson()
val fullScreenAdPeriod: Int get() = FirebaseUtil.remoteConfig.getLong(FULL_SCREEN_AD_PERIOD).toInt()
val onlineBannerAdPeriod: Int get() = FirebaseUtil.remoteConfig.getLong(ONLINE_BANNER_AD_PERIOD).toInt()
val onlineBannerAdProvider: AdProvider get() = getAdProvider(ONLINE_BANNER_AD_PROVIDER)
val coilCalculatorAdProvider: AdProvider get() = getAdProvider(COIL_CALCULATOR_AD_PROVIDER)
val ohmLawAdProvider: AdProvider get() = getAdProvider(OHM_LAW_AD_PROVIDER)
val liquidBlenderAdProvider: AdProvider get() = getAdProvider(LIQUID_BLENDER_AD_PROVIDER)
val batteriesDatabaseAdProvider: AdProvider get() = getAdProvider(BATTERIES_DATABASE_AD_PROVIDER)
val convertersAdProvider: AdProvider get() = getAdProvider(CONVERTERS_AD_PROVIDER)
val batteriesLifeAdProvider: AdProvider get() = getAdProvider(BATTERIES_LIFE_AD_PROVIDER)
val knowledgeAdProvider: AdProvider get() = getAdProvider(KNOWLEDGE_AD_PROVIDER)
val lobbyAdProvider: AdProvider get() = getAdProvider(LOBBY_AD_PROVIDER)
private fun getAdProvider(key: String): AdProvider {
val jsonString = FirebaseUtil.remoteConfig.getString(key)
val adProviderJson: Map<String, String> =
gson.fromJson(jsonString, object : TypeToken<Map<String, String>>() {}.type)
return if (adProviderJson["name"] == "admob") AdProvider.AdMobProvider
else AdProvider.BrandAdProvider(
adProviderJson["name"] ?: error("name can not be null"),
adProviderJson["linkUrl"] ?: error("linkUrl can not be null"),
adProviderJson["imageGs"] ?: error("imageGs can not be null")
)
}
private const val FULL_SCREEN_AD_PERIOD = "fullscreen_ad_period"
private const val ONLINE_BANNER_AD_PERIOD = "online_banner_ad_period"
private const val ONLINE_BANNER_AD_PROVIDER = "online_banner_ad_provider"
private const val COIL_CALCULATOR_AD_PROVIDER = "coil_calculator_ad_provider"
private const val OHM_LAW_AD_PROVIDER = "ohm_law_ad_provider"
private const val LIQUID_BLENDER_AD_PROVIDER = "liquid_blender_ad_provider"
private const val BATTERIES_DATABASE_AD_PROVIDER = "batteries_database_ad_provider"
private const val CONVERTERS_AD_PROVIDER = "converters_ad_provider"
private const val BATTERIES_LIFE_AD_PROVIDER = "batteries_life_ad_provider"
private const val KNOWLEDGE_AD_PROVIDER = "knowledge_ad_provider"
private const val LOBBY_AD_PROVIDER = "lobby_ad_provider"
}
@stanbar
Copy link
Author

stanbar commented Apr 14, 2019

and in each Fragment (page) i setup the ads like so

setupAd(RemoteConfig.coilCalculatorAdProvider, "CoilCalculator", adMobBanner, adBrandBanner)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment