320x50300x250728x90Adaptive
// XML Layout
<com.gameadzone.sdk.BannerAdView
android:id="@+id/bannerAd"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
// Activity / Fragment
val banner = findViewById<BannerAdView>(R.id.bannerAd)
banner.adUnitId = "YOUR_AD_UNIT_ID"
banner.setAdSize(AdSize.BANNER_320x50) // or MREC_300x250, LEADERBOARD_728x90
banner.adListener = object : AdListener() {
override fun onAdLoaded() { /* Ad ready */ }
override fun onAdFailed(error: AdError) { /* Handle error */ }
override fun onAdClicked() { /* Track click */ }
}
banner.loadAd()
Best for: Persistent placements at top/bottom of screen. Auto-refreshes every 30s by default. Highest fill rate.
Full Screen320x480480x320High eCPM
// Preload the interstitial (do this early)
val interstitial = InterstitialAd(context)
interstitial.adUnitId = "YOUR_INTERSTITIAL_UNIT_ID"
interstitial.adListener = object : AdListener() {
override fun onAdLoaded() { /* Ready to show */ }
override fun onAdFailed(error: AdError) { /* Retry or skip */ }
override fun onAdClosed() { /* Resume your app */ }
}
interstitial.loadAd()
// Show at a natural break point (level complete, between screens)
if (interstitial.isLoaded) {
interstitial.show(activity)
}
Best for: Level transitions, between content pages. 3-5x higher eCPM than banners. Preload before showing for smooth UX.
Video 15-30sEnd CardHighest eCPM
// Preload the rewarded ad
val rewardedAd = RewardedAd(context)
rewardedAd.adUnitId = "YOUR_REWARDED_UNIT_ID"
rewardedAd.adListener = object : AdListener() {
override fun onAdLoaded() { /* Ready */ }
override fun onAdFailed(error: AdError) { /* Handle */ }
}
rewardedAd.loadAd()
// Show when user opts in (e.g. "Watch ad for extra life")
rewardedAd.show(activity, object : RewardCallback {
override fun onRewardEarned(type: String, amount: Int) {
// Grant the reward: coins, lives, hints, etc.
grantReward(type, amount)
}
override fun onAdClosed(completed: Boolean) {
if (!completed) { /* User skipped */ }
rewardedAd.loadAd() // Preload next
}
})
Best for: Opt-in placements (extra lives, bonus coins, skip timers). Highest eCPM of all formats. Users must watch full video to earn reward.
Custom LayoutIcon + Headline + CTABest UX
// Load native ad
val nativeAd = NativeAd(context)
nativeAd.adUnitId = "YOUR_NATIVE_UNIT_ID"
nativeAd.adListener = object : NativeAdListener() {
override fun onAdLoaded(ad: NativeAdData) {
// Bind to your custom layout
titleView.text = ad.headline
bodyView.text = ad.description
ctaButton.text = ad.callToAction
Glide.with(context).load(ad.iconUrl).into(iconView)
if (ad.imageUrl != null) {
Glide.with(context).load(ad.imageUrl).into(imageView)
}
// IMPORTANT: Register for impression/click tracking
nativeAd.registerView(adContainer, ctaButton)
}
override fun onAdFailed(error: AdError) { /* Handle */ }
}
nativeAd.loadAd()
Best for: Feed-style placements, in-content ads. Matches your app's look and feel. Higher engagement than banners.
Full ScreenApp Launch / ResumeNew Users
// In your Application class
class MyApp : Application() {
private lateinit var appOpenAd: AppOpenAd
override fun onCreate() {
super.onCreate()
GameADzone.init(this, "YOUR_API_KEY")
appOpenAd = AppOpenAd(this)
appOpenAd.adUnitId = "YOUR_APP_OPEN_UNIT_ID"
appOpenAd.adListener = object : AdListener() {
override fun onAdLoaded() { /* Ready */ }
override fun onAdClosed() { appOpenAd.loadAd() }
}
appOpenAd.loadAd()
// Auto-show when app comes to foreground
registerActivityLifecycleCallbacks(
AppOpenAdManager(appOpenAd, minBackgroundSeconds = 30)
)
}
}
Best for: App launch or resume after backgrounding. Shows branded full-screen ad. Set minimum background time to avoid annoying users.