Untitled
unknown
plain_text
6 months ago
6.3 kB
3
Indexable
package com.astraler.android.landparcels.ui.ads import android.app.Activity import android.os.Bundle import android.util.Log import com.appsflyer.adrevenue.AppsFlyerAdRevenue import com.appsflyer.adrevenue.adnetworks.generic.MediationNetwork import com.appsflyer.adrevenue.adnetworks.generic.Scheme import com.astraler.android.landparcels.BuildConfig import com.astraler.android.landparcels.ui.paywall.PaywallManager import com.astraler.android.landparcels.utils.SingletonHolder import com.astraler.android.landparcels.utils.remote.RemoteConfigManager import com.google.android.gms.ads.AdError import com.google.android.gms.ads.AdRequest import com.google.android.gms.ads.AdValue import com.google.android.gms.ads.FullScreenContentCallback import com.google.android.gms.ads.LoadAdError import com.google.android.gms.ads.OnPaidEventListener import com.google.android.gms.ads.ResponseInfo import com.google.android.gms.ads.rewarded.RewardedAd import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback import com.google.firebase.analytics.FirebaseAnalytics import java.util.Currency class RewardAds(private val activity: Activity) { companion object : SingletonHolder<RewardAds, Activity>(::RewardAds) { private const val TAG = "RewardAds" } private var isShowingAd = false private var rewardedAd: RewardedAd? = null private var firebaseAnalytics: FirebaseAnalytics = FirebaseAnalytics.getInstance(activity.applicationContext) /** * Request an ad */ internal fun fetchAd(onAdLoaded: () -> Unit = {}) { if (isAdAvailable() && !isConditionConfigAvailable()) { onAdLoaded.invoke() return } val loadCallback = object : RewardedAdLoadCallback() { override fun onAdLoaded(ad: RewardedAd) { Log.i(TAG, "fetchAd: onAdLoaded") rewardedAd = ad onAdLoaded.invoke() } override fun onAdFailedToLoad(loadAdError: LoadAdError) { Log.e(TAG, "failed to load: ${loadAdError.message}") onAdLoaded.invoke() } } val request = AdRequest.Builder().build() val adUnitId = if (BuildConfig.DEBUG) { BuildConfig.ADS_REWARD_ID } else { RemoteConfigManager.getInstance()?.getAdmobConfig()?.reward?.adUnitId ?: BuildConfig.ADS_REWARD_ID } activity.application?.let { RewardedAd.load(it, adUnitId, request, loadCallback) } } internal fun showAdIfAvailable(onAdsClosedListener: () -> Unit = {}) { Log.i(TAG, "showAdIfAvailable $rewardedAd") if (!isShowingAd && isConditionConfigAvailable() && rewardedAd != null) { rewardedAd?.fullScreenContentCallback = object : FullScreenContentCallback() { override fun onAdDismissedFullScreenContent() { Log.i(TAG, "showAdIfAvailable: onAdDismissedFullScreenContent") rewardedAd = null isShowingAd = false fetchAd() onAdsClosedListener.invoke() } override fun onAdFailedToShowFullScreenContent(adError: AdError) { Log.e(TAG, "onAdFailedToShowFullScreenContent: ${adError.message}") onAdsClosedListener.invoke() } override fun onAdShowedFullScreenContent() { Log.i(TAG, "showAdIfAvailable: onAdShowedFullScreenContent") isShowingAd = true } } rewardedAd?.onPaidEventListener = OnPaidEventListener { adValue -> rewardedAd?.responseInfo?.let { trackingAdImpression(adValue, it) trackingAppsFlyerAdRevenue(adValue) } } rewardedAd?.show(activity) { Log.d(TAG, "showAdIfAvailable: ") } } else { onAdsClosedListener.invoke() } } /** * Utility method that checks if ad exists and can be shown. */ private fun isAdAvailable() = rewardedAd != null private fun isConditionConfigAvailable(): Boolean { RemoteConfigManager.getInstance()?.getAdmobConfig()?.reward?.let { config -> val isPurchased = PaywallManager.getInstance()?.hasPurchased() == true return !isPurchased && config.hasShow == true } return true } private fun trackingAdImpression(adValue: AdValue, responseInfo: ResponseInfo) { firebaseAnalytics.logEvent(FirebaseAnalytics.Event.AD_IMPRESSION, Bundle().apply { putString(FirebaseAnalytics.Param.AD_PLATFORM, "Admob") putString( FirebaseAnalytics.Param.AD_UNIT_NAME, responseInfo.loadedAdapterResponseInfo?.adSourceInstanceName ?: "" ) putString(FirebaseAnalytics.Param.AD_FORMAT, "Reward") putString( FirebaseAnalytics.Param.AD_SOURCE, responseInfo.loadedAdapterResponseInfo?.adSourceName ?: "" ) val eventRevenue = adValue.valueMicros.toDouble() / 1000000 putDouble(FirebaseAnalytics.Param.VALUE, eventRevenue) putString(FirebaseAnalytics.Param.CURRENCY, adValue.currencyCode) }) } private fun trackingAppsFlyerAdRevenue(adValue: AdValue) { Log.i(TAG, "trackingAppsFlyerAdRevenue: ") val customParams: MutableMap<String, String> = HashMap() customParams[Scheme.COUNTRY] = "US" val adUnitId = RemoteConfigManager.getInstance()?.getAdmobConfig()?.reward?.adUnitId ?: BuildConfig.ADS_INTERSTITIAL_ID customParams[Scheme.AD_UNIT] = adUnitId customParams[Scheme.AD_TYPE] = "Reward" customParams[Scheme.PLACEMENT] = "adPlacement" customParams[Scheme.ECPM_PAYLOAD] = "encrypt" val eventRevenue = adValue.valueMicros.toDouble() / 1000000 AppsFlyerAdRevenue.logAdRevenue( "googleAdMob", MediationNetwork.googleadmob, Currency.getInstance(adValue.currencyCode), eventRevenue, customParams ) } }
Editor is loading...
Leave a Comment