Rewarded Ad
1. Basic requirements
Add ADX iOS SDK to your project.
Use the Ad Unit ID issued for Interstitial Ads.
Before requesting an ad, SDK initialization must be done first.
SDK initialization should be called only once when the app launches and ad requests should be made after SDK initialization is complete.
For iOS 14 and later, request ads only after obtaining ATT (App Tracking Transparency) permission.
2. Implementation
Instantiate an
ADXRewardedAd
using theinitWithAdUnitId:
method and register the ADXRewardedAdDelegate callbacks.Call
loadAd
to load the ad.Check whether an ad is available using
isLoaded
, and if so, display the ad withshowAdFromRootViewController
:.Once the user has fully watched the ad, the
rewardedAdDidRewardUser:withReward:
callback ofADXRewardedAdDelegate
is invoked. Grant the reward only when this callback is triggered.
#import <ADXLibrary/ADXRewardedAd.h>
@interface RewardedAdViewController () <ADXRewardedAdDelegate>
@property (strong) ADXRewardedAd *rewardedAd;
@end
@implementation RewardedAdViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.rewardedAd = [[ADXRewardedAd alloc]
initWithAdUnitId:@"<ADX_REWARDED_AD_UNIT_ID>"];
self.rewardedAd.delegate = self;
}
- (IBAction)loadAd:(id)sender {
[self.rewardedAd loadAd];
}
- (IBAction)showAd:(id)sender {
if (self.rewardedAd.isLoaded) {
[self.rewardedAd showAdFromRootViewController:self];
}
}
#pragma mark - ADXRewardedAdDelegate
- (void)rewardedAdDidLoad:(ADXRewardedAd *)rewardedAd {
NSLog(@"rewardedAdDidLoad");
}
- (void)rewardedAd:(ADXRewardedAd *)rewardedAd didFailToLoadWithError:(NSError *)error {
NSLog(@"rewardedAd:didFailToLoadWithError: %@", error);
}
- (void)rewardedAd:(ADXRewardedAd *)rewardedAd didFailToShowWithError:(NSError *)error {
NSLog(@"rewardedAd:didFailToShowWithError: %@", error);
}
- (void)rewardedAdWillPresentScreen:(ADXRewardedAd *)rewardedAd {
NSLog(@"rewardedAdWillPresentScreen");
}
- (void)rewardedAdDidClick:(ADXRewardedAd *)rewardedAd {
NSLog(@"rewardedAdDidClick");
}
- (void)rewardedAdWillDismissScreen:(ADXRewardedAd *)rewardedAd {
NSLog(@"rewardedAdWillDismissScreen");
}
- (void)rewardedAdDidDismissScreen:(ADXRewardedAd *)rewardedAd {
NSLog(@"rewardedAdDidDismissScreen");
}
- (void)rewardedAdDidRewardUser:(ADXRewardedAd *)rewardedAd withReward:(ADXReward *)reward {
NSLog(@"rewardedAdDidRewardUser");
}
3. Callback
You can receive rewarded ad events through the ADXRewardedAdDelegate
.
- (void)rewardedAdDidLoad:(ADXRewardedAd *)rewardedAd;
- (void)rewardedAdWillPresentScreen:(ADXRewardedAd *)rewardedAd;
- (void)rewardedAdDidClick:(ADXRewardedAd *)rewardedAd;
- (void)rewardedAdWillDismissScreen:(ADXRewardedAd *)rewardedAd;
- (void)rewardedAdDidDismissScreen:(ADXRewardedAd *)rewardedAd;
- (void)rewardedAdDidRewardUser:(ADXRewardedAd *)rewardedAd
withReward:(ADXReward *)reward;
- (void)rewardedAd:(ADXRewardedAd *)rewardedAd
didFailToLoadWithError:(NSError *)error;
- (void)rewardedAd:(ADXRewardedAd *)rewardedAd
didFailToShowWithError:(NSError *)error;
4. Ad Revenue (paidEventHandler)
You can check the estimated ad revenue for ad impressions.
#import <UIKit/UIKit.h>
#import <ADXLibrary/ADXInterstitialAd.h>
#import <FirebaseAnalytics/FirebaseAnalytics.h>
#import <AppsFlyerAdRevenue/AppsFlyerAdRevenue.h>
@interface RewardedViewController () <ADXRewardedAdDelegate>
@property (strong) ADXRewardedAd *rewardedAd;
@end
@implementation RewardedViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.rewardedAd = [[ADXRewardedAd alloc]
initWithAdUnitId:@"<ADX_REWARDED_AD_UNIT_ID>"];
self.rewardedAd.delegate = self;
__weak typeof(self) weakSelf = self;
self.rewardedAd.paidEventHandler = ^(double eCPM) {
__strong typeof(self) strongSelf = weakSelf;
if(!strongSelf) { return; }
NSNumber * revenue = [NSNumber numberWithDouble:eCPM/1000];
[strongSelf handleAdRevenue:revenue];
};
}
- (void)handleAdRevenue:(NSNumber *)revenue {
// 1) Firebase Analytics
[FIRAnalytics logEventWithName:kFIREventAdImpression
parameters: @{
kFIRParameterAdPlatform: @"AD(X)",
kFIRParameterAdFormat: @"RewardedAd",
kFIRParameterAdUnitName: @"ADX Rewarded Ad",
kFIRParameterCurrency: @"USD",
kFIRParameterValue: revenune
}];
// 2) AppsFlyer
NSDictionary * adRevenueParams = @{
@"AdUnitName" : @"ADX Rewarded Ad",
@"AdType" : @"RewardedAd",
};
AppsFlyerAdRevenue * appsFlyerAdRevenue = [AppsFlyerAdRevenue shared];
[appsFlyerAdRevenue
logAdRevenueWithMonetizationNetwork:@"AD(X)"
mediationNetwork:AppsFlyerAdRevenueMediationNetworkTypeCustom
eventRevenue:revenune
revenueCurrency:@"USD"
additionalParameters:adRevenueParams];
}
#pragma mark - ADXRewardedAdDelegate
- (void)rewardedAdDidLoad:(ADXRewardedAd *)rewardedAd {}
- (void)rewardedAd:(ADXRewardedAd *)rewardedAd didFailToLoadWithError:(NSError *)error {}
- (void)rewardedAd:(ADXRewardedAd *)rewardedAd didFailToShowWithError:(NSError *)error {}
- (void)rewardedAdWillPresentScreen:(ADXRewardedAd *)rewardedAd {}
- (void)rewardedAdDidClick:(ADXRewardedAd *)rewardedAd {}
- (void)rewardedAdWillDismissScreen:(ADXRewardedAd *)rewardedAd {}
- (void)rewardedAdDidDismissScreen:(ADXRewardedAd *)rewardedAd {}
- (void)rewardedAdDidRewardUser:(ADXRewardedAd *)rewardedAd withReward:(ADXReward *)reward {}
@end
5. SSV (Server-side verification) Settings
SSV settings are optional and can be configured only if needed.
SSV allows the reward event to trigger a server-to-server callback via the Callback URL.
The conditions for using SSV are as follows:
A
Rewarded Video
type with a registered Callback URL must be configured in the dashboard.A reward event must occur after the user has fully watched the video.
If necessary, set the
User ID
orCustom Data
information via the SDK before requesting an ad.
If the client sets the
User ID
andCustom Data
, they will be included in the Callback URL request.Example: https://callback_url?param=value&userid=<value>&customdata=<value>
SSV settings must be configured before the ad request to ensure the Callback URL includes the data.
Refer to the server-side SSV callback verification guide to verify the reward.
// SSV settings (optional)
[self.rewardedAd setSSVOptionWithUserId:@"<USER_ID>"];
[self.rewardedAd setSSVOptionWithCustomData:@"<CUSTOM_DATA>"];
// Ad request
[self.rewardedAd loadAd];
Last updated
Was this helpful?