// // KLNUnifiedNativeAd.h // KlevinAdSDK // // Copyright © 2021 Tencent. All rights reserved. // Created by Klevin on 2021/7/2. // #import #import #import NS_ASSUME_NONNULL_BEGIN typedef NS_ENUM(NSUInteger, KLNUnifiedNativeAdType) { /// 未知模版 KLNUnifiedNativeAdTypeUnknown = 1, /// 原生自渲染-横版大图16:9 KLNUnifiedNativeAdTypeHorBigImage = 1001, /// 原生自渲染-横版视频16:9 KLNUnifiedNativeAdTypeHorVideo = 1002, }; typedef NS_ENUM(NSUInteger, KLNUnifiedNativeAdVideoAutoPlayPolicy) { KLNUnifiedNativeAdVideoAutoPlayPolicyAlways = 0, // 总是自动播放,无论网络条件 KLNUnifiedNativeAdVideoAutoPlayPolicyWIFI = 1, // WIFI 下自动播放 KLNUnifiedNativeAdVideoAutoPlayPolicyNever = 2, // 从不自动播放,无论网络条件 }; @class KLNUnifiedNativeAd; @protocol KLNUnifiedNativeAdDelegate; /// 加载自渲染广告回调。 /// 成功时,adList不为nil, error为nil。失败时,adList为nil,error不为nil。 typedef void (^KLNUnifiedNativeAdLoadCompletionHandler)(NSArray *_Nullable adList, NSError *_Nullable error); ///自渲染广告 @interface KLNUnifiedNativeAd : NSObject /// 广告事件回调对象 @property (nonatomic, weak, nullable) id delegate; /// 开发者传入的用来present目标页的ViewController @property (nonatomic, weak, readwrite) UIViewController *viewController; /// 广告标题 @property (nonatomic, copy, readonly, nullable) NSString *title; /// 广告描述 @property (nonatomic, copy, readonly, nullable) NSString *desc; /// App 图标url @property (nonatomic, readonly, nullable) NSString *appIconURL; /// 按钮文案 @property (nonatomic, readonly, nullable) NSString *actionTitle; /// 是否为视频广告 @property (nonatomic, readonly) KLNUnifiedNativeAdType adType; /// 广告图标 @property (nonatomic, readonly) UIImage *adLogoImage; /// 静音播放视频广告(后续可能收拢到 KLNAdVideoController ) @property (nonatomic, assign, getter=isMuted) BOOL muted; /// 视频播放器 @property (nonatomic, strong, readonly, nullable) KLNAdVideoController *videoController; /// 广告view @property (nonatomic, strong, readonly) UIView *adView; /// 广告宽度 @property (nonatomic, assign, readonly) CGFloat width; /// 广告高度 @property (nonatomic, assign, readonly) CGFloat height; /// 广告图片URL @property (nonatomic, readonly, nullable) NSString *imageUrl; /// 视频广告自动播放策略,默认 KLNUnifiedNativeAdVideoAutoPlayPolicyAlways(总是自动播放) @property (nonatomic, assign) KLNUnifiedNativeAdVideoAutoPlayPolicy videoAutoPlayPolicy; /// 加载自渲染广告方法 /// @param request 自渲染广告请求对象 /// @param completionHandler 广告信息加载结果回调(成功/失败),请注意:回调非线程安全 + (void)loadWithRequest:(nonnull KLNUnifiedNativeAdRequest *)request completionHandler:(KLNUnifiedNativeAdLoadCompletionHandler)completionHandler; /// 注册可点击View和显示广告的view。 /// @param clickableViews 可点击的视图数组,此数组内的广告元素会添加手势,可以响应广告对应的点击事件 /// @param adView 传入显示广告的view,SDK需要对此view做曝光检测 - (void)registerWithClickableViews:(NSArray<__kindof UIView *> *_Nullable)clickableViews adView:(UIView*)adView; /// 解绑可点击view手势 - (void)unregisterClickableViews; /// 渲染广告View /// 注意:只有接入方用KLNUnifiedNativeAd的属性adView进行广告渲染才调用此方法。否则不需要调用 - (void)render; /// 根据传入的宽度和广告model计算高度。内部会根据广告素材的宽高比计算相应的高度。 /// @param width 传入的宽度 /// @param nativeAd 广告model + (CGFloat)calcHeiWithWidth:(CGFloat)width nativeAd:(KLNUnifiedNativeAd *)nativeAd; /// 用户手动关闭广告时,请调用该方法 - (void)dislike; @end @protocol KLNUnifiedNativeAdDelegate @optional /// 广告素材加载成功回调 /// @param ad KLNUnifiedNativeAd实例 /// @param error 素材加载成功为nil,失败非nil - (void)kln_unifiedNativeAdDidLoad:(KLNUnifiedNativeAd *)ad didCompleteWithError:(NSError *_Nullable)error; /// 广告曝光回调 /// 业务方可以通过实现该方法,统计|曝光|量(对账) /// @param ad KLNUnifiedNativeAd 实例 - (void)kln_unifiedNativeAdWillExpose:(KLNUnifiedNativeAd *)ad; /// 广告点击回调 /// 业务方可以通过实现该方法,统计|点击|量(对账) /// @param ad KLNUnifiedNativeAd 实例 - (void)kln_unifiedNativeAdDidClick:(KLNUnifiedNativeAd *)ad; @end NS_ASSUME_NONNULL_END