#import "YourCustomMCMediationAdapter.h"
#import <引入您的自定义聚合SDK头文件>
#import "MCIAdInfo+Internal.h"
#import "MCGroMoreNativeAd.h"
#import <objc/message.h>
#import <objc/runtime.h>
#define kMCAPIAppIDKey @"app_id"
#define kMCAPICurrencyKey @"currency"
static MCAdapterInitStatus initStatus = MCAdapterInitNo;
@interface YourCustomMCMediationAdapter () <自定义聚合SDK各广告类型代理>
@property (nonatomic, strong) 自定义聚合SDK激励视频类 *rewardedVideoAd;
@property (nonatomic, strong) 自定义聚合SDK插屏类 *interstitialAd;
@property (nonatomic, strong) 自定义聚合SDK开屏类 *splashAd;
@property (nonatomic, strong) 自定义聚合SDK横幅类 *bannerView;
@property (nonatomic, strong) 自定义聚合SDK原生类 *nativeAd;
@property (nonatomic, assign) BOOL isDidAdShowCallback;
@property (nonatomic, assign) BOOL isDidAdVideoStartCallback;
@property (nonatomic, copy) NSString *currency;
@end
@implementation YourCustomMCMediationAdapter
- (void)dealloc
{
}
- (NSString *)mediationVersion {
return 自定义聚合SDK版本
}
static NSString *_advanceSDKConfigPath = nil;
+ (void)setAdvanceSDKConfigPath:(NSString *)advanceSDKConfigPath {
_advanceSDKConfigPath = [advanceSDKConfigPath copy];
}
+ (NSString *)advanceSDKConfigPath {
return _advanceSDKConfigPath;
}
#pragma mark - MCMediationAdapterProtocol
- (void)initSDK:(MCMediationInfo *_Nonnull)mediationInfo completed:(nullable MCAdapterInitCompletionBlock)completedBlock {
[super initSDK:mediationInfo completed:completedBlock];
NSDictionary *mediationInitParams = mediationInfo.mediationInitParams;
NSString *appIDKey = mediationInitParams[kMCAPIAppIDKey];
self.currency = mediationInitParams[kMCAPICurrencyKey] ?: @"USD";
if (initStatus != MCAdapterInitNo) {
if (completedBlock) {
completedBlock(initStatus, nil);
}
return;
}
initStatus = MCAdapterInitializing;
if (!appIDKey.length) {
NSError *error = [[NSError alloc] initWithDomain:@"parameter error" code:0 userInfo:@{}];
initStatus = MCAdapterInitFailed;
if (completedBlock) {
completedBlock(initStatus, error);
}
return;
}
//这里配置并初始化自定义聚合SDK
......
}
- (void)loadRewardedAd:(MCLoadInfo *_Nonnull)loadInfo delegate:(id<MCAdapterDelegate>_Nonnull)delegate {
[super loadRewardedAd:loadInfo delegate:delegate];
//使用自定义聚合SDK加载激励视频广告
......
self.rewardedVideoAd = xxx
......
}
- (void)loadInterstitialAd:(MCLoadInfo *_Nonnull)loadInfo delegate:(id<MCAdapterDelegate>_Nonnull)delegate {
[super loadInterstitialAd:loadInfo delegate:delegate];
//使用自定义聚合SDK加载插屏广告
......
self.interstitialAd = xxx
......
}
- (void)loadAppOpenAd:(MCLoadInfo *_Nonnull)loadInfo containerView:(UIView *_Nullable)containerView delegate:(id<MCAdapterDelegate>_Nonnull)delegate {
[super loadAppOpenAd:loadInfo containerView:containerView delegate:delegate];
//使用自定义聚合SDK加载开屏广告
......
self.splashAd = xxx
......
}
// banner
- (void)loadAdViewAd:(MCLoadInfo *_Nonnull)loadInfo delegate:(id<MCAdapterDelegate>_Nonnull)delegate {
[super loadAdViewAd:loadInfo delegate:delegate];
//使用自定义聚合SDK加载横幅广告
......
self.bannerView = xxx
......
}
// native
- (void)loadNative:(MCLoadInfo *_Nonnull)loadInfo delegate:(id<MCAdapterDelegate>_Nonnull)delegate {
[super loadNative:loadInfo delegate:delegate];
//根据需求设置一些回调标志
self.isDidAdShowCallback = NO;
self.isDidAdVideoStartCallback = NO;
//使用自定义聚合SDK加载原生广告
......
self.bannerView = xxx
......
}
//返回是否就绪
- (BOOL)isAdReady {
if (self.format == [MCAdFormat rewarded]) {
return self.rewardedVideoAd.isReady;
}
if (self.format == [MCAdFormat interstitial]) {
return self.interstitialAd.isReady;
}
if (self.format == [MCAdFormat appOpen]) {
return self.splashAd.isReady;
}
if ([self.format isAdViewAd]) {
return self.bannerView.isReady;
}
if (self.format == [MCAdFormat native]) {
return self.nativeAd.isReady;
}
return NO;
}
// 插屏、激励视频show
- (void)show:(UIViewController *_Nullable)vc extra:(NSDictionary *_Nullable)extra {
[super show:vc extra:extra];
if (self.format == [MCAdFormat rewarded]) {
[self.rewardedVideoAd show...
} else if (self.format == [MCAdFormat interstitial]) {
[self.interstitialAd show...
}
}
// 开屏广告show
- (void)showAdWithWindow:(UIWindow *_Nullable)window viewController:(UIViewController *_Nullable)viewController withExtra:(NSDictionary *_Nullable)extra {
[super showAdWithWindow:window viewController:viewController withExtra:extra];
if (self.format == [MCAdFormat appOpen]) {
[self.splashAd show...
}
}
// debug调试工具show
- (void)showMediationDebuggerWithViewController:(UIViewController * _Nullable)viewController {
//展示三方聚合调试工具
}
// 获取bannerView
- (UIView *_Nullable)getBannerView {
return self.bannerView;
}
- (void)destroyAd {
if ([self.format isAdViewAd]) {
//销毁资源
[self.bannerView destory];
self.bannerView = nil;
} else if (self.format == [MCAdFormat native]) {
//销毁资源
[self.nativeAd destory];
self.nativeAd = nil;
}
}
#pragma mark - over write
- (void)initAdInfo {
[super initAdInfo];
self.adInfo.networkPlacementId = self.ritInfo.slotID;
[self updateRevenue:self.ritInfo];
self.adInfo.compareRevenue = self.adInfo.originRevenue;
if (self.adInfo.originRevenue <= 0) {
self.adInfo.compareRevenue = [self getGroMorePrice];
}
[self showLog:[NSString stringWithFormat:@"gromore offer ecpm:%@", [NSNumber numberWithDouble:self.adInfo.originRevenue*1000]]];
self.adInfo.revenuePrecision = ({
RevenuePrecisionEnum revenuePrecision = RuePsionUndefined;
revenuePrecision = 自定义聚合提供的接口
revenuePrecision;
});
self.adInfo.country = @"";
self.adInfo.currency = self.currency;
self.adInfo.networkName = self.ritInfo.adnName;
self.adInfo.extraDic = nil;
[self updateOriginData:self.mediaExt];
}
#pragma mark - 以下实现自定义聚合平台的事件协议方法,并通过adDelegate通知MCSDK,以开屏为例,通知前可以准备一些信息设置给adInfo
- (void)splashAdDidShowFailed:(SplashAd *_Nonnull)splashAd error:(NSError *)error {
[self showDelegateLog:[NSString stringWithFormat:@"splashAdDidShowFailed:error: %@, %@", splashAd, error]];
MCAdapterError *mcError = [[MCAdapterError alloc] initWithCode:error.code message:error.description mediationId:self.mediationId mediatedNetworkErrorCode:error.code mediatedNetworkErrorMessage:error.description originError:error];
[self.adDelegate didAdDisplayFailed:self.adInfo withError:mcError];
}
- (void)splashAdLoadSuccess:(SplashAd *)splashAd {
self.ritInfo = [splashAd.mediation getCurrentBestEcpmInfo];
self.mediaExt = splashAd.mediaExt;
[self initAdInfo];
[self showDelegateLog:[NSString stringWithFormat:@"splashAdLoadSuccess: %@", splashAd]];
[self.adDelegate didAdLoadSuccess:self.adInfo];
}
....其他广告类型类似
@end