跳至主要內容

自定义广告网络接入

大约 10 分钟

自定义广告网络接入

开发者可以使用Mobit管理平台添加其他广告网络配置,新增广告代码位,在瀑布流中进行广告加载。

开发者需要在代码中通过遵守特定协议和实现特定方法来完成接入。开发者需要将自定义类的**类名(如果使用swift则需要全路径类名)**传入Mobit管理平台中,Mobit SDK将获取自定义类的类名,通过类名构建实例,调用方法等。

Mobit SDK会在初始化时,调用自定义广告网络的初始化。在Mobit SDK广告请求时,按策略加载自定义广告网络代码位。

示例代码参考Mobit SDK Demoopen in new window

自定义广告网络初始化

开发者需要遵守SACustomADNManager协议,实现协议方法:

@protocol SACustomADNManager <NSObject>

/// 自定义广告网络名称
+ (NSString *)name;

/// 自定义广告网络版本号
+ (NSString *)VERSION;

/// 初始化自定义广告网络
/// - Parameters:
///   - parameter: 自定义网络平台信息,有Mobit聚合平台下发,包含SDK初始化所需参数
///   - completion: 初始化结果回调,必须调用
- (void)setupADNManagerWithParameter:(NSDictionary *)parameter completion:(void (^)(BOOL success, NSError *error))completion;

@end

开发者需要在Mobit管理平台创建自定义广告网络时,传入一个json格式的字符串,其中应当包含广告网络初始化所需的appid等参数,Mobit SDK在接收到该json串后,会尝试将其转为字典格式合并到初始化参数字典中,自定义广告网络初始化参数key说明:

key说明值类型
是否开启控制台日志,初始化Mobit SDK时传入BOOL
是否可以读取定位信息,初始化Mobit SDK时传入BOOL
是否可以读取idfa,初始化Mobit SDK时传入BOOL
开发者自行获取传入的idfa,初始化Mobit SDK时传入NSString
当开发者在Mobit平台传入的扩展信息,值为原始字符串NSString

所有类型的自定义广告网络代码位,请求时都会传入NSDictionary

key说明类型
竞价底价,当代码位为头部竞价时,可以设置竞价底价。sdk会将其单位转成分进行传递NSNumber
开发者传入的userId,当前仅对激励视频类型生效NSString
开发者传入的扩展信息,当前仅对激励视频类型生效NSString

自定义广告参与竞价

实现SACustomADNBaseAdBiddingProtocol

@protocol SACustomADNBaseAdBiddingProtocol <NSObject>

@optional

/// 返回ecpm,人民币单位为分,
- (NSInteger)getEcpm;

- (void)notifyWinWithSecondPrice:(CGFloat)secondPrice ext:(NSDictionary * _Nullable)ext;
- (void)notifyLossWithPrice:(CGFloat)winPrice reason:(SACustomBidLossReason)reason ext:(NSDictionary * _Nullable)ext;

@end

自定义开屏广告

开发者需要遵守SACustomADNSplashAd协议,并实现协议方法:

@protocol SACustomADNSplashAdDelegate <NSObject>

@optional
/// 开屏广告加载成功
- (void)sa_customSplashAdLoadSuccess:(id<SACustomADNSplashAd>)splashAd;

/// 开屏广告的各种错误信息
- (void)sa_customSplashAd:(id<SACustomADNSplashAd>)splashAd didFailWithError:(NSError * _Nullable)error;

/// 开屏广告即将展示
- (void)sa_customSplashAdWillShow:(id<SACustomADNSplashAd>)splashAd;

/// 开屏广告已经展示
- (void)sa_customSplashAdDidShow:(id<SACustomADNSplashAd>)splashAd;

/// 点击了开屏广告
- (void)sa_customSplashAdDidClick:(id<SACustomADNSplashAd>)splashAd;

/// 开屏广告将要关闭
- (void)sa_customSplashAdWillClose:(id<SACustomADNSplashAd>)splashAd;

/// 开屏广告已经关闭
- (void)sa_customSplashAdDidClose:(id<SACustomADNSplashAd>)splashAd;

/// 开屏广告点击了跳过
- (void)sa_customSplashAdDidClickSkip:(id<SACustomADNSplashAd>)splashAd;

/// 开屏广告播放完毕
- (void)sa_customSplashVideoAdDidPlayFinish:(id<SACustomADNSplashAd>)splashAd;

/// 开屏广告剩余时间回调
- (void)sa_customSplashAd:(id<SACustomADNSplashAd>)splashAd lifeTime:(NSUInteger)time;

/// 开屏广告曝光回调
- (void)sa_customSplashAdExposed:(id<SACustomADNSplashAd>)splashAd;

@end
/// 自定义开屏广告需要遵守的协议
@protocol SACustomADNSplashAd <SACustomADNBaseAd, SACustomADNBaseAdBiddingProtocol>

/// 代理对象
@property (nonatomic, weak, nullable) id<SACustomADNSplashAdDelegate> delegate;

/// 开屏超时
@property (nonatomic, assign) NSTimeInterval tolerateTimeout;

/// 构造方法
/// - Parameters:
///   - codeId: 代码位ID,由Mobit聚合平台下发
///   - parameter: 透传参数,包含开发者在Mobit聚合平台设置的扩展参数和SDK透传参数
- (instancetype)initWithCodeId:(NSString *)codeId parameter:(NSDictionary * _Nullable)parameter;

/// 加载广告的方法
/// 聚合SAAdSDK会在调用loadAd方法之前设置属性,开发者可以在loadAd方法中去读取,如开屏广告的tolerateTimeout、激励视频广告的mutedIfCan等
- (void)loadAd;

/// 广告是否可以展示
- (BOOL)isReady;

/// 缓存时长
+ (NSTimeInterval)cacheTimeout;
/// show开屏广告
/// - Parameter window: 当前window
- (void)showInWindow:(UIWindow *)window;

@optional

/// 如果支持底部logo视图,要实现该属性
@property (nonatomic, strong, nullable) UIView *customBottomView;

@end

自定义激励视频广告

开发者需要遵守SACustomADNRewardVideoAd协议,并实现协议方法:

@protocol SACustomADNRewardVideoAdDelegate <NSObject>

@optional
/// 激励视频广告加载成功
- (void)sa_customRewardVideoAdLoadSuccess:(id<SACustomADNRewardVideoAd>)rewardVideoAd;

/// 激励视频广告即将展示
- (void)sa_customRewardVideoAdWillShow:(id<SACustomADNRewardVideoAd>)rewardVideoAd;

/// 激励视频广告已经展示
- (void)sa_customRewardVideoAdDidShow:(id<SACustomADNRewardVideoAd>)rewardVideoAd;

/// 激励视频广告即将关闭
- (void)sa_customRewardVideoAdWillClose:(id<SACustomADNRewardVideoAd>)rewardVideoAd;

/// 激励视频广告已经关闭
- (void)sa_customRewardVideoAdDidClose:(id<SACustomADNRewardVideoAd>)rewardVideoAd;

/// 用户点击激励视频广告
- (void)sa_customRewardVideoAdDidClick:(id<SACustomADNRewardVideoAd>)rewardVideoAd;

/// 激励视频广告用户点击跳过
- (void)sa_customRewardVideoAdDidClickSkip:(id<SACustomADNRewardVideoAd>)rewardVideoAd;

/// 激励视频广告各种错误信息
- (void)sa_customRewardVideoAd:(id<SACustomADNRewardVideoAd>)rewardVideoAd didFailWithError:(NSError * _Nullable)error;

/// 激励视频广告达到激励条件
- (void)sa_customRewardVideoAdDidRewardEffective:(id<SACustomADNRewardVideoAd>)rewardVideoAd;

/// 激励视频广告播放完毕
- (void)sa_customRewardedVideoAdDidPlayFinish:(id<SACustomADNRewardVideoAd>)rewardVideoAd;

/// 激励视频广告已曝光
- (void)sa_customRewardVideoAdDidExposed:(id<SACustomADNRewardVideoAd>)rewardVideoAd;
@end


/// 自定义激励视频广告需要遵守的协议
@protocol SACustomADNRewardVideoAd <SACustomADNBaseAd, SACustomADNBaseAdBiddingProtocol>

/// 是否静音
@property (nonatomic, assign) BOOL mutedIfCan;

/// 代理对象
@property (nonatomic, weak, nullable) id<SACustomADNRewardVideoAdDelegate> delegate;

/// 构造方法
/// - Parameters:
///   - codeId: 代码位ID,由Mobit聚合平台下发
///   - parameter: 透传参数,包含开发者在Mobit聚合平台设置的扩展参数和SDK透传参数
- (instancetype)initWithCodeId:(NSString *)codeId parameter:(NSDictionary * _Nullable)parameter;

/// 加载广告的方法
/// 聚合SAAdSDK会在调用loadAd方法之前设置属性,开发者可以在loadAd方法中去读取,如开屏广告的tolerateTimeout、激励视频广告的mutedIfCan等
- (void)loadAd;

/// 广告是否可以展示
- (BOOL)isReady;

/// 缓存时长
+ (NSTimeInterval)cacheTimeout;

/// 展示激励视频
/// - Parameter viewController: 建议在viewController的基础上present
- (void)showAdFromRootViewController:(UIViewController *)viewController;

@end

自定义插屏广告

开发者需要遵守SACustomADNInterstitialAd协议,并实现协议方法:

@protocol SACustomADNInterstitialAd;
@protocol SACustomADNInterstitialAdDelegate <NSObject>

@optional
/// 插屏广告加载成功
- (void)sa_customInterstitialAdLoadSuccess:(id<SACustomADNInterstitialAd>)interstitialAd;

/// 插屏广告的各种错误信息
- (void)sa_customInterstitialAd:(id<SACustomADNInterstitialAd>)interstitialAd didFailWithError:(NSError *_Nullable)error;

/// 插屏广告即将展示
- (void)sa_customInterstitialAdWillShow:(id<SACustomADNInterstitialAd>)interstitialAd;

/// 插屏广告已经展示
- (void)sa_customInterstitialAdDidShow:(id<SACustomADNInterstitialAd>)interstitialAd;

/// 点击了插屏广告
- (void)sa_customInterstitialAdDidClick:(id<SACustomADNInterstitialAd>)interstitialAd;

/// 插屏广告即将被关闭
- (void)sa_customInterstitialAdWillClose:(id<SACustomADNInterstitialAd>)interstitialAd;

/// 插屏广告已经被关闭
- (void)sa_customInterstitialAdDidClose:(id<SACustomADNInterstitialAd>)interstitialAd;

/// 插屏广告已曝光
- (void)sa_customInterstitialAdDidExposed:(id<SACustomADNInterstitialAd>)rewardVideoAd;

@end

/// 自定义插屏广告所需要遵守的协议
@protocol SACustomADNInterstitialAd <SACustomADNBaseAd, SACustomADNBaseAdBiddingProtocol>

/// 代理对象
@property (nonatomic, weak, nullable) id<SACustomADNInterstitialAdDelegate> delegate;

/// 构造方法
/// - Parameters:
///   - codeId: 代码位ID,由Mobit聚合平台下发
///   - parameter: 透传参数,包含开发者在Mobit聚合平台设置的扩展参数和SDK透传参数
- (instancetype)initWithCodeId:(NSString *)codeId parameter:(NSDictionary * _Nullable)parameter;

/// 加载广告的方法
/// 聚合SAAdSDK会在调用loadAd方法之前设置属性,开发者可以在loadAd方法中去读取,如开屏广告的tolerateTimeout、激励视频广告的mutedIfCan等
- (void)loadAd;

/// 广告是否可以展示
- (BOOL)isReady;

/// 缓存时长
+ (NSTimeInterval)cacheTimeout;

/// 展示方法
/// - Parameter viewController: 所在的视图控制器,建议点击跳转也基于此控制器
- (void)showAdFromRootViewController:(UIViewController *)viewController;

@optional

/// 对于视频类型的插屏广告的静音控制属性
@property (nonatomic, assign) BOOL mutedIfCan;

@end

自定义Banner广告

开发者需要遵守SACustomADNBannerAd协议,并实现协议方法:

@protocol SACustomADNBannerAdDelegate <NSObject>

@optional

/// banner广告加载成功
- (void)sa_customBannerAdLoadSuccess:(id<SACustomADNBannerAd>)bannerAd;

/// banner广告的各种错误信息
- (void)sa_customBannerAd:(id<SACustomADNBannerAd>)bannerAd didFailWithError:(NSError *_Nullable)error;

/// 点击了bannner广告
- (void)sa_customBannerAdDidClick:(id<SACustomADNBannerAd>)bannerAd;

/// banner被关闭了
- (void)sa_customBannerAdDidClose:(id<SACustomADNBannerAd>)bannerAd;

/// banner广告已曝光
- (void)sa_customBannerAdDidExposed:(id<SACustomADNBannerAd>)rewardVideoAd;

@end

/// 自定义banner广告所需要遵守的协议
@protocol SACustomADNBannerAd <SACustomADNBaseAd, SACustomADNBaseAdBiddingProtocol>

/// 构造方法
/// - Parameters:
///   - codeId: 代码位ID,由Mobit聚合平台下发
///   - parameter: 透传参数,包含开发者在Mobit聚合平台设置的扩展参数和SDK透传参数
///   - viewController: 视图控制器,建议在其基础上进行跳转
///   - adSize: 广告尺寸
- (instancetype)initWithCodeId:(NSString *)codeId
                     parameter:(NSDictionary * _Nullable)parameter
            rootViewController:(UIViewController *)viewController
                        adSize:(CGSize)adSize;

/// 加载广告的方法
/// 聚合SAAdSDK会在调用loadAd方法之前设置属性,开发者可以在loadAd方法中去读取,如开屏广告的tolerateTimeout、激励视频广告的mutedIfCan等
- (void)loadAd;

/// 广告是否可以展示
- (BOOL)isReady;

/// 缓存时长
+ (NSTimeInterval)cacheTimeout;

// 渲染banner视图
- (void)render;

/// bannerView
- (UIView *)bannerView;

/// 代理对象
@property (nonatomic, weak, nullable) id<SACustomADNBannerAdDelegate> delegate;

@end

自定义原生广告

开发者需要遵守SACustomADNNativeExpressAdsManager协议,实现协议方法:

@protocol SACustomADNNativeExpressAdsManagerDelegate <NSObject>

@optional
/// 模版信息流加载成功
/// - Parameters:
///   - manager: manager对象
///   - ads: 模版ad数组
- (void)sa_customNativeExpressAdsManager:(id<SACustomADNNativeExpressAdsManager>)manager loadExpressAdSuccess:(NSArray<id<SACustomADNNativeExpressAd>> *)ads;

/// 自渲染信息流加载成功
/// - Parameters:
///   - manager: manager对象
///   - ads: 自渲染ad数组
- (void)sa_customNativeExpressAdsManager:(id<SACustomADNNativeExpressAdsManager>)manager loadSelfRenderAdSuccess:(NSArray<id<SACustomADNNativeSelfRenderAd>> *)ads;

/// 加载模版或者自渲染信息流广告失败
/// - Parameters:
///   - manager: manager对象
///   - error: error信息
- (void)sa_customNativeExpressAdsManager:(id<SACustomADNNativeExpressAdsManager>)manager didFailWithError:(NSError *_Nullable)error;

@end

@protocol SACustomADNNativeExpressAdsManager <SACustomADNBaseAd>

@property (nonatomic, assign) CGSize adSize;

/// 信息流视频是否静音,默认静音
@property (nonatomic, assign) BOOL videoMutedIfCan;
@property (nonatomic, weak, nullable) id<SACustomADNNativeExpressAdsManagerDelegate> delegate;
@property (nonatomic, assign) BOOL loadExpressAd;

/// 构造方法
/// - Parameters:
///   - codeId: 代码位ID,由Mobit聚合平台下发
///   - parameter: 透传参数,包含开发者在Mobit聚合平台设置的扩展参数和SDK透传参数
- (instancetype)initWithCodeId:(NSString *)codeId parameter:(NSDictionary * _Nullable)parameter;

- (void)loadAd;

/// 缓存时长
+ (NSTimeInterval)cacheTimeout;

@end

在Mobit聚合SDK中,原生广告分为模版渲染和开发者自渲染,自定义原生广告,在加载广告时,可以根据loadExpressAd进行判断当前应当使用模版渲染还是开发者自渲染方法。

如果接入的广告网络在加载时不区分渲染类型,则通常会在填充时区分渲染类型,开发者需要在填充结果中判断loadExpressAd,筛选后再进行回调。

原生广告模版渲染类型

@protocol SACustomADNNativeExpressAdDelegate <NSObject>
@optional
/// 模版信息流view渲染成功
- (void)sa_customNativeExpressAdRenderSuccess:(id<SACustomADNNativeExpressAd>)ad;

/// 模版信息流view各种错误信息
- (void)sa_customNativeExpressAd:(id<SACustomADNNativeExpressAd>)ad didFailWithError:(NSError *_Nullable)error;

/// 模版信息流view被点击
- (void)sa_customNativeExpressAdDidClick:(id<SACustomADNNativeExpressAd>)ad;

/// 模版信息流view被关闭
- (void)sa_customNativeExpressAdDidClose:(id<SACustomADNNativeExpressAd>)ad;

/// 模版信息流view被曝光
- (void)sa_customNativeExpressAdDidExposed:(id<SACustomADNNativeExpressAd>)ad;

@end

@protocol SACustomADNNativeExpressAd <SACustomADNBaseAd, SACustomADNBaseAdBiddingProtocol>

@property (nonatomic, weak, nullable) id<SACustomADNNativeExpressAdDelegate> delegate;
@property (nonatomic, weak, nullable) UIViewController *rootViewController;

/// 在第一次被添加到父视图之前调用。
- (void)render;
- (UIView *)expressAdView;
/// 广告是否可以展示
- (BOOL)isReady;

@end

原生广告开发者自渲染类型

@protocol SACustomADNNativeSelfRenderAdDelegate <NSObject>

@optional
/// 自渲染信息流view各种错误信息
- (void)sa_customNativeAdCanvasView:(id<SACustomADNNativeSelfRenderAd>)ad didFailWithError:(NSError *_Nullable)error;
/// 自渲染信息流view被点击
- (void)sa_customNativeAdCanvasViewDidClick:(id<SACustomADNNativeSelfRenderAd>)ad;

/// 自渲染信息流view被关闭
- (void)sa_customNativeAdCanvasViewDidClose:(id<SACustomADNNativeSelfRenderAd>)ad;

/// 自渲染信息流view被曝光
- (void)sa_customNativeAdCanvasViewDidExposed:(id<SACustomADNNativeSelfRenderAd>)ad;

/// 自渲染信息流视频播放状态变化回调
- (void)sa_customNativeAdCanvasView:(id<SACustomADNNativeSelfRenderAd>)ad videoPlayStateDidChange:(SAAdVideoPlayState)state;

@end

@protocol SACustomADNNativeSelfRenderAdTransfer <NSObject>
@optional
- (UILabel * _Nullable)titleLabel;
- (UILabel * _Nullable)descLabel;
- (UIView * _Nullable)logoView;
- (UIImageView * _Nullable)iconImageView;
- (UIImageView * _Nullable)mainImageView;
- (NSArray<UIImageView *> * _Nullable)imageViewList;
- (UIView * _Nullable)videoView;
- (UIButton * _Nullable)callToActionBtn;
- (UIButton * _Nullable)dislikeBtn;
@end

@protocol SACustomADNNativeSelfRenderAd <SACustomADNBaseAdBiddingProtocol>

@property (nonatomic, weak, nullable) UIViewController *rootViewController;

@property (nonatomic, weak, nullable) id<SACustomADNNativeSelfRenderAdDelegate> delegate;

/// 在第一次被添加到父视图之前调用。
- (void)render;
- (UIView *)selfRenderAdView;

- (void)registerClickableViews:(NSArray<UIView *> *)clickableViews;

- (id<SACustomADNNativeSelfRenderAdTransfer>)subviewsTransfer;
/// 广告是否可以展示
- (BOOL)isReady;

@optional
//MARK: - ad material
- (NSString * _Nullable)title;
- (NSString * _Nullable)desc;
- (NSString * _Nullable)imageUrl;
- (NSString * _Nullable)iconUrl;
- (NSString * _Nullable)videoUrl;
- (NSArray<NSString *> * _Nullable)imageUrlList;
- (NSString * _Nullable)logoUrl;
- (SANativeAdMediaMode)mediaMode;
- (NSTimeInterval)videoDuration;

//MARK: - video play control
- (void)play;
- (void)pause;
- (void)stop;
- (void)setVideoMuted:(BOOL)videoMuted;

@end

上次编辑于: