💡Tips
- 🚀 Use preloading mechanism to enhance UX
- ⚠️ Handle lifecycle properly to prevent memory leaks
- 🔧 Recommended to use standardized callback workflow
@interface RewardedVC () <MCRewardedAdDelegate, MCAdRevenueDelegate>
@property (nonatomic, strong) MCRewardedAd *rewardedAd;
@property (nonatomic, assign) NSInteger retryAttempt;
@end
@implementation RewardedVC
#define RewardedPlacementID @"your mediation unit id"
//Scene ID
#define RewardedSceneID @""
#pragma mark - Load Ad
- (void)loadAd {
if (!self.rewardedAd) {
self.rewardedAd = [[MCRewardedAd alloc] initWithPlacementId:RewardedPlacementID];
}
self.rewardedAd.delegate = self;
self.rewardedAd.revenueDelegate = self;
[self.rewardedAd loadAd];
}
#pragma mark - MCRewardedAdDelegate
// Ad load success
- (void)didLoadAd:(MCAdInfo *)ad {
// Reset retry attempt
self.retryAttempt = 0;
}
// Ad load failure
- (void)didFailToLoadAdWithError:(MCError *)error {
// We recommends that you retry with exponentially higher delays up to a maximum delay (in this case 8 seconds) or the maximum number of retries (in this case 3)
if (self.retryAttempt >= 3) {
return;
}
self.retryAttempt++;
NSInteger delaySec = pow(2, MIN(3, self.retryAttempt));
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delaySec * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[self.rewardedAd loadAd];
});
}
// Ad display success
- (void)didDisplayAd:(MCAdInfo *)ad {
// pre-load
[self.rewardedAd loadAd];
}
// Ad closed
- (void)didHideAd:(MCAdInfo *)ad {
// pre-load
[self.rewardedAd loadAd];
}
// Ad click
- (void)didClickAd:(MCAdInfo *)ad {
}
// Ad display failure
- (void)didFailToDisplayAd:(MCAdInfo *)ad withError:(MCError *)error {
// pre-load
[self.rewardedAd loadAd];
}
// Reward triggered
- (void)didRewardUserForAd:(MCAdInfo *)ad withReward:(MCReward *)reward {
}
- (void)didAdVideoStarted:(MCAdInfo *)ad { }
- (void)didAdVideoCompleted:(MCAdInfo *)ad { }
#pragma mark - MCAdRevenueDelegate
// Revenue tracking
- (void)didPayRevenueForAd:(MCAdInfo *)ad {
}
if ([self.rewardedAd isReady]) {
[self.rewardedAd showAdWithViewController:self withExtra:@{kMCAPIPlacementScenarioIDKey:@"your scene id"}];
} else {
[self.rewardedAd loadAd];
}
[self.rewardedAd destroyAd];
- (void)loadAd {
MCRewardedAd *rewardeAd = [[MCRewardedAd alloc] initWithPlacementId:self.placementID];
rewardeAd.delegate = self;
rewardeAd.revenueDelegate = self;
[rewardeAd setLoadExtraParameter:@{
@"userID": @"test_userId",
@"userData": @"test_userData"
}];
[rewardeAd setExtraParameter:@{
@"test_extra_key": @"test_extra_value"
}];
[rewardeAd loadAd];
self.rewardedAd = rewardeAd;
}
- (void)didLoadAd:(MCAdInfo *)ad {
// Retrieve customized parameters
NSString *originDataJsonString = ad.originData;
}