自定义广告网络接入
自定义广告网络接入
开发者可以使用Mobit管理平台添加其他广告网络配置,新增广告代码位,在瀑布流中进行广告加载。
开发者需要在代码中通过遵守特定协议和实现特定方法来完成接入。开发者需要将自定义类的**类名(如果使用swift则需要全路径类名)**传入Mobit管理平台中,Mobit SDK将获取自定义类的类名,通过类名构建实例,调用方法等。
Mobit SDK会在初始化时,调用自定义广告网络的初始化。在Mobit SDK广告请求时,按策略加载自定义广告网络代码位。
示例代码参考Mobit SDK Demo
自定义广告网络初始化
开发者需要遵守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