Rewarded interstitial

Select platform: Android iOS Unity Flutter

Rewarded interstitial is a type of incentivized ad format that allows you offer rewards for ads that appear automatically during natural app transitions. Unlike rewarded ads, users aren't required to opt-in to view a rewarded interstitial.

Prerequisites

Implementation

The primary steps to integrate rewarded interstitial ads are as follows:

  • Load an ad
  • [Optional] Validate SSV callbacks
  • Register for callbacks
  • Display the ad and handle the reward event

Load an ad

Loading an ad is accomplished using the load(adUnitID:request) method on the GADRewardedInterstitialAd class.

Swift

  func 
  
 loadRewardedInterstitialAd 
 () 
  
 async 
  
 { 
  
 do 
  
 { 
  
 rewardedInterstitialAd 
  
 = 
  
 try 
  
 await 
  
 RewardedInterstitialAd 
 . 
 load 
 ( 
  
 // Replace this ad unit ID with your own ad unit ID. 
  
 with 
 : 
  
 " adUnitID 
" 
 , 
  
 request 
 : 
  
 Request 
 ()) 
  
 rewardedInterstitialAd 
 ?. 
 fullScreenContentDelegate 
  
 = 
  
 self 
  
 } 
  
 catch 
  
 { 
  
 print 
 ( 
 "Rewarded ad failed to load with error: 
 \( 
 error 
 . 
 localizedDescription 
 ) 
 " 
 ) 
  
 } 
 } 
  
 

SwiftUI

  import 
  
 GoogleMobileAds 
 class 
  
 RewardedInterstitialViewModel 
 : 
  
 NSObject 
 , 
  
 ObservableObject 
 , 
  
 FullScreenContentDelegate 
 { 
  
 @ 
 Published 
  
 var 
  
 coins 
  
 = 
  
 0 
  
 private 
  
 var 
  
 rewardedInterstitialAd 
 : 
  
 RewardedInterstitialAd 
 ? 
  
 func 
  
 loadAd 
 () 
  
 async 
  
 { 
  
 do 
  
 { 
  
 rewardedInterstitialAd 
  
 = 
  
 try 
  
 await 
  
 RewardedInterstitialAd 
 . 
 load 
 ( 
  
 with 
 : 
  
 "ca-app-pub-3940256099942544/6978759866" 
 , 
  
 request 
 : 
  
 Request 
 ()) 
  
 rewardedInterstitialAd 
 ?. 
 fullScreenContentDelegate 
  
 = 
  
 self 
  
 } 
  
 catch 
  
 { 
  
 print 
 ( 
  
 "Failed to load rewarded interstitial ad with error: 
 \( 
 error 
 . 
 localizedDescription 
 ) 
 " 
 ) 
  
 } 
  
 } 
  
 

Objective-C

  - 
 ( 
 void 
 ) 
 loadRewardedInterstitialAd 
  
 { 
  
 [ 
 GADRewardedInterstitialAd 
  
 loadWithAdUnitID 
 : 
 " adUnitID 
" 
  
 request 
 :[ 
 GADRequest 
  
 request 
 ] 
  
 completionHandler 
 : 
 ^ 
 ( 
 GADRewardedInterstitialAd 
  
 * 
 ad 
 , 
  
 NSError 
  
 * 
 error 
 ) 
  
 { 
  
 if 
  
 ( 
 error 
 ) 
  
 { 
  
 NSLog 
 ( 
 @"Failed to load rewarded interstitial ad with error: %@" 
 , 
  
 error 
 . 
 localizedDescription 
 ); 
  
 return 
 ; 
  
 } 
  
 self 
 . 
 rewardedInterstitialAd 
  
 = 
  
 ad 
 ; 
  
 self 
 . 
 rewardedInterstitialAd 
 . 
 fullScreenContentDelegate 
  
 = 
  
 self 
 ; 
  
 }]; 
 } 
  
 

Replace adUnitID with your ad unit ID.

[Optional] Validate server-side verification (SSV) callbacks

Apps that require extra data in server-side verification callbacks should use the custom data feature of rewarded ads. Any string value set on a rewarded ad object is passed to the custom_data query parameter of the SSV callback. If no custom data value is set, the custom_data query parameter value won't be present in the SSV callback.

The following code sample demonstrates how to set custom data on a rewarded interstitial ad object before requesting an ad.

Swift

  private 
  
 func 
  
 validateServerSideVerification 
 () 
  
 async 
  
 { 
  
 do 
  
 { 
  
 rewardedInterstitialAd 
  
 = 
  
 try 
  
 await 
  
 RewardedInterstitialAd 
 . 
 load 
 ( 
  
 // Replace this ad unit ID with your own ad unit ID. 
  
 with 
 : 
  
 " adUnitID 
" 
 , 
  
 request 
 : 
  
 Request 
 ()) 
  
 let 
  
 options 
  
 = 
  
 ServerSideVerificationOptions 
 () 
  
 options 
 . 
 customRewardText 
  
 = 
  
 "" 
  SAMPLE_CUSTOM_DATA_STRING 
 
 "" 
  
 rewardedInterstitialAd 
 ?. 
 serverSideVerificationOptions 
  
 = 
  
 options 
  
 } 
  
 catch 
  
 { 
  
 print 
 ( 
 "Rewarded ad failed to load with error: 
 \( 
 error 
 . 
 localizedDescription 
 ) 
 " 
 ) 
  
 } 
 } 
  
 

Objective-C

  - 
 ( 
 void 
 ) 
 validateServerSideVerification 
  
 { 
  
 // Replace this ad unit ID with your own ad unit ID. 
  
 [ 
 GADRewardedInterstitialAd 
  
 loadWithAdUnitID 
 : 
 " adUnitID 
" 
  
 request 
 :[ 
 GADRequest 
  
 request 
 ] 
  
 completionHandler 
 : 
 ^ 
 ( 
 GADRewardedInterstitialAd 
  
 * 
 ad 
 , 
  
 NSError 
  
 * 
 error 
 ) 
  
 { 
  
 if 
  
 ( 
 error 
 ) 
  
 { 
  
 NSLog 
 ( 
 @"Rewarded interstitial ad failed to load with error: %@" 
 , 
  
 error 
 . 
 localizedDescription 
 ); 
  
 return 
 ; 
  
 } 
  
 self 
 . 
 rewardedInterstitialAd 
  
 = 
  
 ad 
 ; 
  
 GADServerSideVerificationOptions 
  
 * 
 options 
  
 = 
  
 [[ 
 GADServerSideVerificationOptions 
  
 alloc 
 ] 
  
 init 
 ]; 
  
 options 
 . 
 customRewardString 
  
 = 
  
 @"" 
  SAMPLE_CUSTOM_DATA_STRING 
 
 "" 
 ; 
  
 ad 
 . 
 serverSideVerificationOptions 
  
 = 
  
 options 
 ; 
  
 }]; 
 } 
  
 

Replace SAMPLE_CUSTOM_DATA_STRING with your custom data.

Register for callbacks

To receive notifications for presentation events, you must assign the GADFullScreenContentDelegate to the fullScreenContentDelegate property of the returned ad:

Swift

  rewardedInterstitialAd 
 ?. 
 fullScreenContentDelegate 
  
 = 
  
 self  
 
 . 
 swift 
 

SwiftUI

  rewardedInterstitialAd 
 ?. 
 fullScreenContentDelegate 
  
 = 
  
 self  
 
 . 
 swift 
 

Objective-C

  self 
 . 
 rewardedInterstitialAd 
 . 
 fullScreenContentDelegate 
  
 = 
  
 self 
 ; 
  
 

The GADFullScreenContentDelegate protocol handles callbacks for when the ad presents successfully or unsuccessfully, and when it is dismissed. The following code shows how to implement the protocol and assign it to the ad:

Swift

  func 
  
 adDidRecordImpression 
 ( 
 _ 
  
 ad 
 : 
  
 FullScreenPresentingAd 
 ) 
  
 { 
  
 print 
 ( 
 " 
 \( 
 #function 
 ) 
 called." 
 ) 
 } 
 func 
  
 adDidRecordClick 
 ( 
 _ 
  
 ad 
 : 
  
 FullScreenPresentingAd 
 ) 
  
 { 
  
 print 
 ( 
 " 
 \( 
 #function 
 ) 
 called." 
 ) 
 } 
 func 
  
 adWillPresentFullScreenContent 
 ( 
 _ 
  
 ad 
 : 
  
 FullScreenPresentingAd 
 ) 
  
 { 
  
 print 
 ( 
 " 
 \( 
 #function 
 ) 
 called." 
 ) 
 } 
 func 
  
 adWillDismissFullScreenContent 
 ( 
 _ 
  
 ad 
 : 
  
 FullScreenPresentingAd 
 ) 
  
 { 
  
 print 
 ( 
 " 
 \( 
 #function 
 ) 
 called." 
 ) 
 } 
 func 
  
 adDidDismissFullScreenContent 
 ( 
 _ 
  
 ad 
 : 
  
 FullScreenPresentingAd 
 ) 
  
 { 
  
 print 
 ( 
 " 
 \( 
 #function 
 ) 
 called." 
 ) 
  
 // Clear the rewarded interstitial ad. 
  
 rewardedInterstitialAd 
  
 = 
  
 nil 
 } 
 func 
  
 ad 
 ( 
  
 _ 
  
 ad 
 : 
  
 FullScreenPresentingAd 
 , 
  
 didFailToPresentFullScreenContentWithError 
  
 error 
 : 
  
 Error 
 ) 
  
 { 
  
 print 
 ( 
 " 
 \( 
 #function 
 ) 
 called with error: 
 \( 
 error 
 . 
 localizedDescription 
 ) 
 ." 
 ) 
 } 
  
 

SwiftUI

  func 
  
 adDidRecordImpression 
 ( 
 _ 
  
 ad 
 : 
  
 FullScreenPresentingAd 
 ) 
  
 { 
  
 print 
 ( 
 " 
 \( 
 #function 
 ) 
 called" 
 ) 
 } 
 func 
  
 adDidRecordClick 
 ( 
 _ 
  
 ad 
 : 
  
 FullScreenPresentingAd 
 ) 
  
 { 
  
 print 
 ( 
 " 
 \( 
 #function 
 ) 
 called" 
 ) 
 } 
 func 
  
 ad 
 ( 
  
 _ 
  
 ad 
 : 
  
 FullScreenPresentingAd 
 , 
  
 didFailToPresentFullScreenContentWithError 
  
 error 
 : 
  
 Error 
 ) 
  
 { 
  
 print 
 ( 
 " 
 \( 
 #function 
 ) 
 called" 
 ) 
 } 
 func 
  
 adWillPresentFullScreenContent 
 ( 
 _ 
  
 ad 
 : 
  
 FullScreenPresentingAd 
 ) 
  
 { 
  
 print 
 ( 
 " 
 \( 
 #function 
 ) 
 called" 
 ) 
 } 
 func 
  
 adWillDismissFullScreenContent 
 ( 
 _ 
  
 ad 
 : 
  
 FullScreenPresentingAd 
 ) 
  
 { 
  
 print 
 ( 
 " 
 \( 
 #function 
 ) 
 called" 
 ) 
 } 
 func 
  
 adDidDismissFullScreenContent 
 ( 
 _ 
  
 ad 
 : 
  
 FullScreenPresentingAd 
 ) 
  
 { 
  
 print 
 ( 
 " 
 \( 
 #function 
 ) 
 called" 
 ) 
  
 // Clear the rewarded interstitial ad. 
  
 rewardedInterstitialAd 
  
 = 
  
 nil 
 } 
  
 

Objective-C

  - 
 ( 
 void 
 ) 
 adDidRecordImpression: 
 ( 
 id<GADFullScreenPresentingAd> 
 ) 
 ad 
  
 { 
  
 NSLog 
 ( 
 @"%s called" 
 , 
  
 __PRETTY_FUNCTION__ 
 ); 
 } 
 - 
 ( 
 void 
 ) 
 adDidRecordClick: 
 ( 
 id<GADFullScreenPresentingAd> 
 ) 
 ad 
  
 { 
  
 NSLog 
 ( 
 @"%s called" 
 , 
  
 __PRETTY_FUNCTION__ 
 ); 
 } 
 - 
 ( 
 void 
 ) 
 adWillPresentFullScreenContent: 
 ( 
 id<GADFullScreenPresentingAd> 
 ) 
 ad 
  
 { 
  
 NSLog 
 ( 
 @"%s called" 
 , 
  
 __PRETTY_FUNCTION__ 
 ); 
 } 
 - 
 ( 
 void 
 ) 
 adWillDismissFullScreenContent: 
 ( 
 id<GADFullScreenPresentingAd> 
 ) 
 ad 
  
 { 
  
 NSLog 
 ( 
 @"%s called" 
 , 
  
 __PRETTY_FUNCTION__ 
 ); 
 } 
 - 
 ( 
 void 
 ) 
 adDidDismissFullScreenContent: 
 ( 
 id<GADFullScreenPresentingAd> 
 ) 
 ad 
  
 { 
  
 NSLog 
 ( 
 @"%s called" 
 , 
  
 __PRETTY_FUNCTION__ 
 ); 
  
 // Clear the rewarded interstitial ad. 
  
 self 
 . 
 rewardedInterstitialAd 
  
 = 
  
 nil 
 ; 
 } 
 - 
 ( 
 void 
 ) 
 ad: 
 ( 
 id 
 ) 
 ad 
  
 didFailToPresentFullScreenContentWithError: 
 ( 
 NSError 
  
 * 
 ) 
 error 
  
 { 
  
 NSLog 
 ( 
 @"%s called with error: %@" 
 , 
  
 __PRETTY_FUNCTION__ 
 , 
  
 error 
 . 
 localizedDescription 
 ); 
 } 
  
 

Display the ad and handle the reward event

When presenting your ad, you must provide a GADUserDidEarnRewardHandler object to handle the reward for the user.

The following code presents the best method for displaying a rewarded interstitial ad.

Swift

  func 
  
 showRewardedInterstitialAd 
 () 
  
 { 
  
 guard 
  
 let 
  
 rewardedInterstitialAd 
  
 = 
  
 rewardedInterstitialAd 
  
 else 
  
 { 
  
 return 
  
 print 
 ( 
 "Ad wasn't ready." 
 ) 
  
 } 
  
 // The UIViewController parameter is an optional. 
  
 rewardedInterstitialAd 
 . 
 present 
 ( 
 from 
 : 
  
 nil 
 ) 
  
 { 
  
 let 
  
 reward 
  
 = 
  
 rewardedInterstitialAd 
 . 
 adReward 
  
 print 
 ( 
 "Reward received with currency 
 \( 
 reward 
 . 
 amount 
 ) 
 , amount 
 \( 
 reward 
 . 
 amount 
 . 
 doubleValue 
 ) 
 " 
 ) 
  
 // TODO: Reward the user. 
  
 } 
 } 
  
 

SwiftUI

Listen to UI events in the view to display the ad.

  var 
  
 rewardedInterstitialBody 
 : 
  
 some 
  
 View 
  
 { 
  
 // ... 
  
 } 
  
 . 
 onChange 
 ( 
  
 of 
 : 
  
 showAd 
 , 
  
 perform 
 : 
  
 { 
  
 newValue 
  
 in 
  
 if 
  
 newValue 
  
 { 
  
 viewModel 
 . 
 showAd 
 () 
  
 } 
  
 } 
  
 ) 
  
 

Present the rewarded interstitial ad from the view model:

  func 
  
 showAd 
 () 
  
 { 
  
 guard 
  
 let 
  
 rewardedInterstitialAd 
  
 = 
  
 rewardedInterstitialAd 
  
 else 
  
 { 
  
 return 
  
 print 
 ( 
 "Ad wasn't ready." 
 ) 
  
 } 
  
 rewardedInterstitialAd 
 . 
 present 
 ( 
 from 
 : 
  
 nil 
 ) 
  
 { 
  
 let 
  
 reward 
  
 = 
  
 rewardedInterstitialAd 
 . 
 adReward 
  
 print 
 ( 
 "Reward amount: 
 \( 
 reward 
 . 
 amount 
 ) 
 " 
 ) 
  
 self 
 . 
 addCoins 
 ( 
 reward 
 . 
 amount 
 . 
 intValue 
 ) 
  
 } 
 } 
  
 

Objective-C

  - 
 ( 
 void 
 ) 
 showRewardedInterstitialAd 
  
 { 
  
 [ 
 self 
 . 
 rewardedInterstitialAd 
  
 presentFromRootViewController 
 : 
 self 
  
 userDidEarnRewardHandler 
 : 
 ^ 
 { 
  
 GADAdReward 
  
 * 
 reward 
  
 = 
  
 self 
 . 
 rewardedInterstitialAd 
 . 
 adReward 
 ; 
  
 NSString 
  
 * 
 rewardMessage 
  
 = 
  
 [ 
 NSString 
  
 stringWithFormat 
 : 
 @"Reward received with " 
  
 @"currency %@ , amount %ld" 
 , 
  
 reward 
 . 
 type 
 , 
  
 [ 
 reward 
 . 
 amount 
  
 longValue 
 ]]; 
  
 NSLog 
 ( 
 @"%@" 
 , 
  
 rewardMessage 
 ); 
  
 // TODO: Reward the user. 
  
 }]; 
 } 
  
 

Examples on GitHub

View the full rewarded interstitial ads examples in your preferred language:

Next steps

Learn more about user privacy .

Create a Mobile Website
View Site in Mobile | Classic
Share by: