💡Tips
- 🚀 Use preloading mechanism to enhance UX
- ⚠️ Handle lifecycle properly to prevent memory leaks
- 🔧 Recommended to use standardized callback workflow
- ⭐ Auto-refresh feature configuration: HyperBid Tools Dashboard > Application > Edit Mediation Unit > Advanced Settings
@interface BannerVC () <MCBannerAdViewAdDelegate, MCAdRevenueDelegate>
@property (nonatomic, strong) UIView *adView;
@property (nonatomic, strong) MCBannerAdView *bannerView;
@property (nonatomic, assign) BOOL hasLoaded;
@end
@implementation BannerVC
#define BannerPlacementID @"your mediation unit id"
//Scene ID
#define BannerSceneID @""
//Configure banner dimensions for example:320x50
#define BannerSize CGSizeMake(320, 50)
#pragma mark - Load Ad
- (void)loadAd {
if (!self.bannerView) {
_bannerView = [[MCBannerAdView alloc] initWithPlacementId:BannerPlacementID adFormat:[MCAdFormat banner]];
}
self.bannerView.delegate = self;
self.bannerView.revenueDelegate = self;
self.bannerView.bannerSize = BannerSize;
self.bannerView.placement = BannerSceneID;
[self.bannerView loadAd];
}
#pragma mark - MCBannerAdViewAdDelegate
// Ad load success
- (void)didLoadAd:(MCAdInfo *)ad {
self.hasLoaded = YES;
}
// Ad load failure
- (void)didFailToLoadAdWithError:(MCError *)error {
self.hasLoaded = NO;
}
// Ad display success
- (void)didDisplayAd:(MCAdInfo *)ad {
}
// Ad closed
- (void)didHideAd:(MCAdInfo *)ad {
[self removeAd];
}
// Ad click
- (void)didClickAd:(MCAdInfo *)ad {
}
// Ad display failure
- (void)didFailToDisplayAd:(MCAdInfo *)ad withError:(MCError *)error {
}
// Triggered when collapsible banner expands (if supported by ad network)
- (void)didExpandAd:(MCAdInfo *)ad { }
// Triggered when collapsible banner collapses (if supported by ad network)
- (void)didCollapseAd:(MCAdInfo *)ad { }
#pragma mark - MCAdRevenueDelegate
// Revenue tracking
- (void)didPayRevenueForAd:(MCAdInfo *)ad {
}
BOOL isready = self.hasLoaded;
if (isready && self.bannerView) {
self.adView = [[UIView alloc]init];
self.adView.backgroundColor = randomColor;
[self.adView addSubview:self.bannerView];
[self.view insertSubview:self.adView belowSubview:self.footView];
[self.adView mas_makeConstraints:^(MASConstraintMaker *make) {
make.height.equalTo(@(_adSize.height));
make.width.equalTo(@(_adSize.width));
make.top.equalTo(self.view).offset(100);
}];
[self.bannerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.adView);
}];
}
// Remove BannerView
- (void)removeAd {
if (self.adView && self.adView.superview) {
[self.adView removeFromSuperview];
[self.bannerView destroyAd];
_bannerView = nil;
self.adView = nil;
self.hasLoaded = NO;
}
}
- (void)loadAd {
MCBannerAdView *bannerView = [[MCBannerAdView alloc] initWithPlacementId:self.placementID];
bannerView.delegate = self;
bannerView.revenueDelegate = self;
[bannerView setLoadExtraParameter:@{
@"userData": @"test_userData"
}];
[bannerView setExtraParameter:@{
@"test_extra_key": @"test_extra_value"
}];
[bannerView loadAd];
self.bannerView = bannerView;
}
- (void)didLoadAd:(MCAdInfo *)ad {
// Retrieve customized parameters
NSString *originDataJsonString = ad.originData;
}