Summary
We sometimes see interstitials that report onAdShowed and onAdClicked correctly, but onAdDismissed is very late or never arrives while the user still sees a black screen, missing close control, or a playable that won’t finish. In parallel, subsequent load() calls can return AdError code 12 (ALREADY_DISPLAYED / “a screen ad is still being displayed”) for a long time, as if CAS still believes a fullscreen is visible.
What users see (production)
In normal sessions several interstitials in a row work fine. Then sometimes:
We are not calling show() in a loop. This appears to be mediation / network WebView or creative behavior, but we need guidance on whether CAS can:
- improve detection / timeout on the mediation side, or
- document a supported recovery when
onAdDismissed is missing (e.g. instance lifecycle, destroy() rules, known adapter issues).
- Black fullscreen — nothing renders; no way to close the ad from the UI.
- Ad appears (creative loads) but there is no close / dismiss control, or it only appears after a very long time, so the screen feels stuck.
- In those cases users cannot return to the app through the ad UI and often force-close the app from the system Recents screen, which is bad for retention and reviews.
Representative log sequence (filter: CASInterstitialManager)
initialized → loaded <NetworkA> → showed <NetworkA> → clicked
- Optional:
returned after click-through, short watchdog (user returned from browser/store)
- Either
dismissed soon, OR no dismissed for minutes while UI appears stuck
- After app-side watchdog clears our session state (when SDK never dismisses), we may see:
load fail 12 Ad load requested, but a screen ad is still being displayed
- Sometimes
dismissed only after the user leaves the app from Recents — suggests the network Activity was still alive.
The problem is intermittent — not every impression — but when it happens it is severe for UX.
Networks frequently mentioned in logs: DSPExchange (CAS Exchange), AppLovin, Mintegral, LiftoffMonetize.
What we need from CAS
- Is this a known class of issues with specific adapters (e.g. DT Exchange / playables) in 4.6.x?
- Recommended SDK + adapter versions or mediation settings to reduce stuck fullscreens?
- Official guidance when
onAdDismissed never fires but onAdShowed did — is destroy() on CASInterstitial and a new instance the intended recovery, or is there a better API?
- Any open issues / changelog entries** we should track for “ALREADY_DISPLAYED” after a stuck impression?
- Is this a known issue with certain mediated networks or creative types (e.g. HTML5 / playable / exchange demand) on recent CAS SDK builds?
- Recommended mitigations on the mediation or dashboard side (network order, caps, blocking problematic demand).
- Any SDK or adapter updates you recommend for apps seeing missing close or blank WebView fullscreens.
- Whether we should open this with specific adapter vendors (and how you prefer we reference CAS ID / placement in that report).
Sample code alignment
We follow the public guide: https://docs.page/cleveradssolutions/docs/Android/Interstitial-Ads
If you need a minimal repro, we can strip down to a single-Activity sample matching javaSample and still reproduce with production traffic.
We can provide CAS ID, SDK version, and device/OS details privately if your team needs them for investigation.
Contact
Happy to share full logcat, Creative ID from AdContentInfo when available, and exact timestamps if your team wants to correlate with server-side events.
Thank you.
Summary
We sometimes see interstitials that report
onAdShowedandonAdClickedcorrectly, butonAdDismissedis very late or never arrives while the user still sees a black screen, missing close control, or a playable that won’t finish. In parallel, subsequentload()calls can returnAdErrorcode 12 (ALREADY_DISPLAYED/ “a screen ad is still being displayed”) for a long time, as if CAS still believes a fullscreen is visible.What users see (production)
In normal sessions several interstitials in a row work fine. Then sometimes:
We are not calling
show()in a loop. This appears to be mediation / network WebView or creative behavior, but we need guidance on whether CAS can:onAdDismissedis missing (e.g. instance lifecycle,destroy()rules, known adapter issues).Representative log sequence (filter:
CASInterstitialManager)initialized→loaded <NetworkA>→showed <NetworkA>→clickedreturned after click-through, short watchdog(user returned from browser/store)dismissedsoon, OR nodismissedfor minutes while UI appears stuckload fail 12 Ad load requested, but a screen ad is still being displayeddismissedonly after the user leaves the app from Recents — suggests the network Activity was still alive.The problem is intermittent — not every impression — but when it happens it is severe for UX.
Networks frequently mentioned in logs: DSPExchange (CAS Exchange), AppLovin, Mintegral, LiftoffMonetize.
What we need from CAS
onAdDismissednever fires butonAdShoweddid — isdestroy()onCASInterstitialand a new instance the intended recovery, or is there a better API?Sample code alignment
We follow the public guide: https://docs.page/cleveradssolutions/docs/Android/Interstitial-Ads
If you need a minimal repro, we can strip down to a single-Activity sample matching
javaSampleand still reproduce with production traffic.We can provide CAS ID, SDK version, and device/OS details privately if your team needs them for investigation.
Contact
Happy to share full logcat, Creative ID from
AdContentInfowhen available, and exact timestamps if your team wants to correlate with server-side events.Thank you.