Search...
Menu

Rewarded Ads

💡Tips

  • 🚀 Use preloading mechanism to enhance UX
  • ⚠️ Handle lifecycle properly to prevent memory leaks
  • 🔧 Recommended to use standardized callback workflow

objective-c Copy
@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 {
 
}

objective-c Copy
if ([self.rewardedAd isReady]) {
    [self.rewardedAd showAdWithViewController:self withExtra:@{kMCAPIPlacementScenarioIDKey:@"your scene id"}];
} else {
    [self.rewardedAd loadAd];
}

3. Resource Release

objective-c Copy
[self.rewardedAd destroyAd];

4. Customized Parameter Configuration

objective-c Copy
- (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;
}
Previous
AD Formats
Next
Interstitial Ads
Last modified: 2025-07-21Powered by