Popup Ads are an ad format that appears on screen at specific moments. They can be displayed at desired timings such as app launch, content load completion, or specific event triggers. Users can close them by tapping the close button or selecting “Don’t show today.”
// Ad listener implementationprivate val popupAdListener = object : AdropPopupAdListener { // Ad received successfully (Required) override fun onAdReceived(ad: AdropPopupAd) { Log.d("Adrop", "Popup ad received") // Show ad when ready showPopupAd() } // Ad failed to receive (Required) override fun onAdFailedToReceive(ad: AdropPopupAd, errorCode: AdropErrorCode) { Log.d("Adrop", "Popup ad failed to receive: $errorCode") } // Ad impression (Optional) override fun onAdImpression(ad: AdropPopupAd) { Log.d("Adrop", "Popup ad impression") } // Ad clicked (Optional) override fun onAdClicked(ad: AdropPopupAd) { Log.d("Adrop", "Popup ad clicked") } // Just before popup ad is displayed (Optional) override fun onAdWillPresentFullScreen(ad: AdropPopupAd) { Log.d("Adrop", "Popup ad will present") } // Just after popup ad is displayed (Optional) override fun onAdDidPresentFullScreen(ad: AdropPopupAd) { Log.d("Adrop", "Popup ad presented") } // Just before popup ad is closed (Optional) override fun onAdWillDismissFullScreen(ad: AdropPopupAd) { Log.d("Adrop", "Popup ad will dismiss") } // Just after popup ad is closed (Optional) override fun onAdDidDismissFullScreen(ad: AdropPopupAd) { Log.d("Adrop", "Popup ad dismissed") // Preload next ad loadPopupAd() } // Popup ad failed to show (Optional) override fun onAdFailedToShowFullScreen(ad: AdropPopupAd, errorCode: AdropErrorCode) { Log.d("Adrop", "Popup ad failed to show: $errorCode") }}// Close listener implementationprivate val popupCloseListener = object : AdropPopupAdCloseListener { // Close button clicked (Optional) override fun onClosed(ad: AdropPopupAd) { Log.d("Adrop", "Popup ad close button clicked") } // Dim (background) clicked (Optional) override fun onDimClicked(ad: AdropPopupAd) { Log.d("Adrop", "Popup ad dim area clicked") } // "Don't show today" clicked (Optional) override fun onTodayOffClicked(ad: AdropPopupAd) { Log.d("Adrop", "Don't show today selected") // Save today's date to control next display val prefs = getSharedPreferences("adrop_prefs", Context.MODE_PRIVATE) prefs.edit().putLong("last_popup_hidden_date", System.currentTimeMillis()).apply() }}
private fun loadPopupAd() { popupAd = AdropPopupAd(this, "YOUR_POPUP_UNIT_ID") popupAd?.popupAdListener = popupAdListener popupAd?.closeListener = popupCloseListener // Set background color (dim area) popupAd?.backgroundColor = Color.parseColor("#CC000000") // "Don't show today" text color popupAd?.hideForTodayTextColor = Color.WHITE // Close button text color popupAd?.closeTextColor = Color.WHITE // CTA button text color popupAd?.ctaTextColor = Color.BLUE popupAd?.load()}
class PopupAdManager(private val context: Context) { private val prefs = context.getSharedPreferences("adrop_prefs", Context.MODE_PRIVATE) private val todayOffKey = "popup_ad_today_off_date" private var popupAd: AdropPopupAd? = null // Check if ad can be shown today fun canShowAdToday(): Boolean { val lastHiddenDate = prefs.getLong(todayOffKey, 0L) if (lastHiddenDate == 0L) return true val calendar = Calendar.getInstance() calendar.timeInMillis = lastHiddenDate val hiddenDay = calendar.get(Calendar.DAY_OF_YEAR) val hiddenYear = calendar.get(Calendar.YEAR) calendar.timeInMillis = System.currentTimeMillis() val currentDay = calendar.get(Calendar.DAY_OF_YEAR) val currentYear = calendar.get(Calendar.YEAR) // Can show if saved date is not today return hiddenDay != currentDay || hiddenYear != currentYear } // Load and show ad fun loadAndShowAd(activity: Activity, unitId: String) { if (!canShowAdToday()) { Log.d("Adrop", "Not showing ad today") return } popupAd?.destroy() popupAd = AdropPopupAd(activity, unitId) popupAd?.popupAdListener = popupAdListener popupAd?.closeListener = popupCloseListener popupAd?.load() } private val popupAdListener = object : AdropPopupAdListener { override fun onAdReceived(ad: AdropPopupAd) { // Auto-show after receiving ad if (context is Activity) { ad.show(context) } } override fun onAdFailedToReceive(ad: AdropPopupAd, errorCode: AdropErrorCode) { Log.d("Adrop", "Ad failed to receive: $errorCode") } } private val popupCloseListener = object : AdropPopupAdCloseListener { override fun onTodayOffClicked(ad: AdropPopupAd) { // Save today's date prefs.edit().putLong(todayOffKey, System.currentTimeMillis()).apply() Log.d("Adrop", "Not showing popup ad today") } } fun destroy() { popupAd?.destroy() popupAd = null }}
Popup ads are effective when displayed at these moments:
Copy
// Good example: At app launchoverride fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) loadAndShowPopupAd()}// Good example: When content load completesfun onContentLoaded() { if (shouldShowPopupAd()) { showPopupAd() }}// Good example: When specific event completesfun onAchievementUnlocked() { showPopupAd()}// Bad example: When user is workingfun onUserTyping() { showPopupAd() // Degrades user experience}
Popup ads are only supported in portrait mode. In landscape mode, onAdFailedToShowFullScreen is called.
Copy
private val popupAdListener = object : AdropPopupAdListener { override fun onAdReceived(ad: AdropPopupAd) { // Show only in portrait mode if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) { ad.show(this@MainActivity) } } override fun onAdFailedToShowFullScreen(ad: AdropPopupAd, errorCode: AdropErrorCode) { if (errorCode == AdropErrorCode.ERROR_CODE_LANDSCAPE_UNSUPPORTED) { Log.d("Adrop", "Popup ads are only supported in portrait mode") } } override fun onAdFailedToReceive(ad: AdropPopupAd, errorCode: AdropErrorCode) { Log.d("Adrop", "Ad failed to receive: $errorCode") }}
// Separate test and production environmentsval popupUnitId = if (BuildConfig.DEBUG) { "PUBLIC_TEST_UNIT_ID_POPUP_BOTTOM"} else { "YOUR_PRODUCTION_UNIT_ID"}popupAd = AdropPopupAd(this, popupUnitId)
Be sure to use the actual unit ID created in the Adrop console for production deployment.
Verify production setting during Adrop SDK initialization
onAdFailedToReceive is called
Check error code to identify cause
Use test unit ID in test environment
Retry later if ad inventory is insufficient
ERROR_CODE_AD_HIDE_FOR_TODAY: “Don’t show today” is active
Nothing happens after calling show()
Verify show() is called after onAdReceived callback
Check if Activity is in valid state
Check isLoaded property to verify ad is loaded
Verify in portrait mode (landscape is not supported)
Ad doesn't show in landscape mode
Popup ads are only supported in portrait mode. When show() is called in landscape mode, onAdFailedToShowFullScreen is called with ERROR_CODE_LANDSCAPE_UNSUPPORTED error code.