17.2.0 (2026-09-25)
Features
- hooks: add options-only useGAMInterstitialAd with onAppEvent (c6ac231)
- hooks: add useAppOpenAdManager for app-open lifecycle (40573d8)
- hooks: add useNativeAd with lifecycle-safe NativeAd ownership (1093613)
- js: export TestDeviceIds and clarify test device docs (2f90580)
- pools: gate AdPoolProvider creates with enabled for consent (dcabb4e)
- report android-next-gen AdCapabilities when linked (2edad12)
Bug Fixes
- ads: apply categoryExclusions to ad requests (904b85c)
- ads: coerce numeric customTargeting values to strings (1387579)
- ads: reject sparse customTargeting arrays (9a29f44)
- ads: unify MobileAd/PooledAd show() failure channels (6ee6a7b)
- android: skip kotlin-android when AGP built-in Kotlin is present (28ea492)
- appium, example: stabilize pool poll and Ad Inspector dismiss (7a47e09)
- appium: dismiss Android immersive fullscreen education (69a4cad)
- appium: harden iOS serial startup and Rewarded dismiss flake (b5b3ff1)
- appium: stabilize iOS overlay dismiss and parallel startup (7de852a)
- core: gate pool peek on capabilities with structured AdError (da9bee6)
- e2e: pin Appium driver transitive dependencies (006bd65)
- e2e: scope Android host recovery to the focused window (959e622)
- e2e: wait for rewarded dismiss chrome before Android close taps (90522eb)
- hooks: avoid dynamic delete and redundant cast in usePooledAd (f54f116)
- hooks: make useAppOpenAdManager autoLoad the master request gate (7c168ee)
- hooks: preserve PooledAd.show() two-channel contract in usePooledAd (b2630e4)
- hooks: suppress app-open auto-show after another fullscreen ad (AO-2) (7402f9f)
- js: name GAM unit remedy in AdMob banner pool/multi-format errors (f463de9)