SniperMob 1.1.3

SniperMob 1.1.3

kmj13837997604 维护。



SniperMob 1.1.3

  • succi.ke

SniperMob iOS SDK 接入指南

[目录]

1.前言

1.1 目的

本文档编写的主要目的是为了让用户更快、更高效地使用 SniperMob 产品,并对使用过程中可能出现的问题进行解答。如果发现问题,欢迎批评指正。如有疑问或更好的建议也欢迎与我们联系。

1.2 简介

SniperMob SDK iOS 版本是一套基于 armv7、armv7s、arm64 处理器架构的应用程序接口。支持横幅广告、插屏广告、原生广告和视频广告。广告有效期为 15 分钟,请在此时间内完成广告的展示。

1.3 兼容性

SniperMob SDK iOS 版本支持 iOS8.0 及以上的操作系统。为了提高效率,建议使用 iPhone4S 以上的机器(不含 iPhone4S)。

2.SDK集成

2.1 申请 AppID 以及 PlacementID

请联系商务申请 AppID 以及 PlacementID。

2.2 集成SDK

#####2.2.1 手动集成 拿到SDK资源文件,将其复制到工程目录下。在TARGETS下的Build Phases添加以下依赖库:

library

#####2.2.2 通过CocoaPods集成 [1] 在XCode中创建你的工程。

[2] 在工程的Podfile里面添加以下代码:

pod 'SniperMob'

保存并执行pod install,然后用后缀.xcworkspace的文件打开工程.

注意:命令行下执行pod search SniperMob,如果显示SniperMob的版本不是最新的,先执行pod repo update操作更新本地repo的内容。

关于CocoaPods的更多信息请查看CocoaPods的官方网站。

#####2.2.3 info.plist设置

[1] 设置ATS

ATS

[2] 在info.plist文件中,设置status bar的优先级,将View controller-based status bar appearance项设为NO。

####2.3 初始化SDK

在AppDelegate.m文件下初始化

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [KADPlatformManager sharedInstance].isPrintLog = YES;//默认为NO
    [KADPlatformManager sharedInstance].isDebug = YES;//默认为NO,debug模式下请设为YES,使用正式环境请忽略此句代码
    [[KADPlatformManager sharedInstance]startWithAid:@"AppIDxxxxx"];
}

注意:isDebug属性在debug模式下需要设置为YES,正式环境可不设置

2.4 请求广告数据

建议简单地使用以下方法进行所有类型的广告位数据请求:

需要传递的参数:

FormatType:枚举类型,包括:Banner、Interstitial、Video、RewardedVideo、Native,必须传递;

PlacementID:广告位ID,必须传递;

Uid:当FormatType为RewardedVideo时此参数必须传递,否则可不传。

[[KADPlatformManager sharedInstance]requestAdWithFormatType:SniperAdFormatTypeBanner andPlacementID:@"plidX" andUid:nil withCompletionBlock:^(KADViewProvider *provider, KADErrorInfo *error) {
    if (error) {
        NSLog(@"type---%@",error);
    }else {
        self.providerOne = provider;
    }
 }];
 
  注意:
 1)如果当前应用需要提前加载多个广告,需要在block回调里用数组或者别的方式持有传递过来的provider对象为后续渲染广告view所用,当error存在时,则表示此次请求到的广告无填充或不可用。
 2)provider是一个已经保存了ad数据的对象,建议声明一个用weak描述的属性持有这个对象,SDK后续将通过provider对象渲染广告view。

以下接口可按广告位类型进行数据请求,但建议不使用,将在未来的版本中弃用,具体如下:

#####2.4.1 请求横幅广告数据

在需要请求广告数据的地方添加以下代码,需要传递参数:placementID

[[KADPlatformManager sharedInstance]requestBannerViewWithPlacementID:@"plidX" withCompletionBlock:^(KADViewProvider *provider, KADErrorInfo *error) {
      if (error) {
          NSLog(@"banner error:%@",error);
      }else {
          self.providerOne = provider;
      }
 }];
 
 注意:
 1)如果当前应用需要提前加载多个广告,需要在block回调里用数组或者别的方式持有传递过来的provider对象为后续渲染广告view所用,当error存在时,则表示此次请求到的广告无填充或不可用。
 2)provider是一个已经保存了ad数据的对象,建议声明一个用weak描述的属性持有这个对象,SDK后续将通过provider对象渲染广告view。

#####2.4.2 请求插屏广告数据

在需要请求广告数据的地方添加以下代码,需要传递参数:placementID

[[KADPlatformManager sharedInstance]requestInterstitialAdWithPlacementID:@"plidX"  withCompletionBlock:^(KADViewProvider *provider, KADErrorInfo *error) {
      if (error) {
          NSLog(@"interstitial error:%@",error);
      }else {
          self.providerOne = provider;
      }
 }];
 
 注意:
 1)如果当前应用需要提前加载多个广告,需要在block回调里用数组或者别的方式持有传递过来的provider对象为后续渲染广告view所用,当error存在时,则表示此次请求到的广告无填充或不可用。
 2)provider是一个已经保存了ad数据的对象,建议声明一个用weak描述的属性持有这个对象,SDK后续将通过provider对象渲染广告view。
2.4.3 请求视频广告数据

在需要请求广告数据的地方添加以下代码,需要传递参数:placementID

[[KADPlatformManager sharedInstance]requestVideoPlayerWithPlacementID:@"plidX"  withCompletionBlock:^(KADViewProvider *provider, KADErrorInfo *error) {
     if (error) {
         NSLog(@"video error:%@",error);
     }else {
         self.providerOne = provider;
     }
}];

注意:
1)如果当前应用需要提前加载多个广告,需要在block回调里用数组或者别的方式持有传递过来的provider对象为后续渲染广告view所用,当error存在时,则表示此次请求到的广告无填充或不可用。
2)provider是一个已经保存了ad数据的对象,建议声明一个用weak描述的属性持有这个对象,SDK后续将通过provider对象渲染广告view。
2.4.4 请求激励视频广告数据

在需要请求广告数据的地方添加以下代码,需要传递参数:placementID、uid(userID)

[[KADPlatformManager sharedInstance]requestRewardedVideoPlayerWithPlacementID:@"plidX" andUid:@"123456" withCompletionBlock:^(KADViewProvider *provider, KADErrorInfo *error) {
      if (error) {
          NSLog(@"rewarded video error:%@",error);
      }else {
          self.providerOne = provider;
      }
 }];
 
 注意:
 1)如果当前应用需要提前加载多个广告,需要在block回调里用数组或者别的方式持有传递过来的provider对象为后续渲染广告view所用,当error存在时,则表示此次请求到的广告无填充或不可用。
 2)provider是一个已经保存了ad数据的对象,建议声明一个用weak描述的属性持有这个对象,SDK后续将通过provider对象渲染广告view。

#####2.4.5 请求原生广告数据

在需要添加横幅广告的页面添加以下代码,需要传递参数:placementID

[[KADPlatformManager sharedInstance]requestNativeAdWithPlacementID:@"plidX"  andCompletionBlock:^(KADNativeAdModel *adModel, KADErrorInfo *error) {
     if (error) {
          NSLog(@"native error:%@",error);
      }else {
          self.adModel = adModel;
      }
 }]; 
 
  注意:
 1)如果当前应用需要提前加载多个广告,需要在block回调里用数组或者别的方式持有传递过来的provider对象为后续渲染广告view所用,当error存在时,则表示此次请求到的广告无填充或不可用。
 2)adModel是一个已经保存了原生广告数据的对象,请持有此对象。该对象的头文件中可看到关于原生广告的数据信息,若想自己创建广告view请使用这些信息。若想通过SDK帮助创建的广告view,可调用SDK提供的相关接口,详情请参考2.5.2.

2.5 开始创建和展示广告

#####2.5.1 创建和展示横幅、插屏与视频广告

在需要展示广告的页面里添加以下代码,需要传递参数:实现KADViewDelegate协议的当前类、在请求广告数据方法中获取到的provider对象

 [[KADPlatformManager sharedInstance]beginShowAdViewByViewController:self andProvider:provider];
 
 注意:
   一个provider对应一个广告,SDK会根据provider保存的数据去渲染相关广告view,广告view的创建完成和其它状态均通过KADViewDelegate的协议方法回调,请实现该协议中的方法,详情请参考2.6.
2.5.2 创建和展示本地广告

有二种可选方式创建和展示本地广告:

  • 可仅获取存储本地广告的数据模型adModel自行构建View(详情请参考 2.5.2.1)。
  • 通过SDK提供的接口,指定一个view的样式由SDK构建一个本地广告view并返回此view(详情请参考 2.5.2.2)。
2.5.2.1 通过adModel自行构建view

1)adModel提供以下广告相关信息

详细介绍:
cta:             鼓励用户进行点击的按钮标题,例如“install”
rating:          在App Store的评分(0-5)
iconImg:         App icon相关信息的对象,包含属性:imageUrl、imageWidth、imageHeight
mainImg:         App大图相关信息的对象,包含属性:imageUrl、imageWidth、imageHeight
title:           App标题
desc:            App描述
clickthrough:    点击广告view后需要跳转的落地页
isContainVideo: 判断拿到的这个adModel是否包含video信息,如果包含,可自行选择是否展示,非必要
main:           App大图相关信息的NSDictionary对象,未罗列出包含哪些信息,将要废弃,建议使用mainImg
icon:           App icon相关信息的NSDictionary对象,未罗列出包含哪些信息,将要废弃,建议使用iconImg

2)根据需要,使用上述adModel中提供的数据构建自己的广告view。

3)在广告被展示和被点击时,请调用以下方法通知SDK。(必须调用,否则会失去广告的有效性)

需要传递参数:当前的原生广告view,以及持有过的adModel对象

//广告被曝光
 [[KADPlatformManager sharedInstance]hasAddedNativeView:self.nativeView andModel:self.adModel];

//广告被点击,建议使用方法一:
 1):广告点击上报+跳转落地页,当传递rootController时会处理落地页的跳转,非必传
 [[KADPlatformManager sharedInstance]hasClickedNativeView:self.nativeView andModel:self.adModel andRootController:self];
 
 2):仅广告点击上报,不处理落地页跳转,将要废弃的方法
 [[KADPlatformManager sharedInstance]hasClickedNativeView:self.nativeView andModel:self.adModel];

关于native-video的补充说明

在本地广告中可能会包含视频的情况,当视频存在时,会优先处理视频,并取代主大图的位置,相应的在本地nativeModel中提供了是否包含video的属性。由于video的数据解析比较复杂,为方便接入,还需要用户调用SDK提供的渲染video的方法来构建一个可以播放的video view。

方法一:初始化KADNativeVideoView自行创建

//该类提供了渲染video的一系列方法,请传入需要的参数:KADVideoAdModel对象自行初始化
@interface KADNativeVideoView : UIView
- (nonnull instancetype)initWithFrame:(CGRect)frame andVideoModel:(nonnull KADVideoAdModel *)model;
- (void)startRenderPlayerComplete:(void(^)(NSError *error))block;
- (void)pause;
- (void)start;
- (void)refreshLayout;
- (void)releaseTheAdSource;
@end

方法二:便捷的获取方法

@interface KADNativeAdModel : NSObject
- (void)getNativeVideoViewWithFrame:(CGRect)frame Compelte:(void(^)(KADNativeVideoView *__nullable videoView,KADErrorInfo *__nullable error))completeBlock;
@end
2.5.2.2 由SDK帮助构建view

1)如果需要由SDK帮助构建本地广告View,有以下三种可选样式

typedef enum : NSUInteger {
    KADNativeStyleSmall = 0,
    KADNativeStyleMedium,
    KADNativeStyleLarge
} KADNativeStyle;

2)调用以下方法开始创建和展示广告view,需要传递的参数:上述选定的一种样式、保存过的adModel对象、实现了KADViewDelegate协议的当前类:

[[KADPlatformManager sharedInstance]showNativeStyle:KADNativeStyleLarge withModel:adModel andDelegate:self];

####2.6 实现协议方法

需要在添加广告的类里,实现协议,可通过此协议向SDK传递数据,也可拿到与广告相关的各种状态回调,以下相关的方法回调,回调是在调用了‘[[KADPlatformManager sharedInstance] beginShowAdViewByViewController:andProvider:‘方法之后。

  • 两个必须实现的协议方法 @required

    • 向SDK传递一个当前根控制器的对象(window的根控制器)

      - (UIViewController *)viewControllerForPresentingModalView {
              return [UIApplication sharedApplication].keyWindow.rootViewController; 
        }
      
    • 向SDK传递一个需要放置广告的容器的宽度,为了广告能更完全地展示,接入者最好准备一个与广告位宽高相匹配(或至少不小于广告位宽高)的容器。

       - (CGFloat)estimateWidthOfAdViewInWichProvider:(KADViewProvider *)provider {
           if (self.providerOne == provider) {
                return 320;
           }else if (self.providerTwo == provider) {
                return 320;
           }
           return 0;
       }
         
        注意:
         如果当前页面只展示一个广告View,只返回一个容器的宽度即可。如果当前页面想要展示多个广告View,则需要根据之前持有的Provider进行区分(详情请见2.4),一个广告View对应一个Provider对象。
      
  • 六个可选的协议方法 @optional

    • 当广告View被创建时回调此方法,除插屏以外的广告类型都会返回一个未进行渲染的空白adView,可在此时将adView添加到需要装载广告的容器中,当adView被添加到父视图后SDK开始渲染adView的内容

      - (void)adViewDidCreated:(UIView *)adView whichProvider:(KADViewProvider *)provider {
          NSLog(@"---Created-请在此方法中拿到adview并将其添加到view上");
          if (adView) {
             adView.center = CGPointMake(200, 200);
             [self.view addSubview:adView];
          }else {
             //adView不存在时,为插屏广告,不需做其它操作
          }
      }
      
      注意:
      1)当广告位类型为插屏时不会返回adView对象,接入者不需要做指定位置等其它操作
      2)返回的adView对象,该adView的大小已经由SDK根据提供的容器宽度按照广告位的宽高比计算好了,为了广告能够更好的展示,请不要试图修改adView的大小,提供一个origin/center位置,并调整容器高度。
      
    • 当广告View被添加到页面上时回调

      - (void)adViewDidShown:(UIView *)adView whichProvider:(KADViewProvider *)provider {
          NSLog(@"----shown----请在此协议方法里发起app自己的曝光上报事件");
      }
      
    • 当广告View加载失败时回调

      -(void)adView:(UIView *)adView didLoadFailed:(KADErrorInfo *)error whichProvider:(KADViewProvider *)provider {
          NSLog(@"----load fail----%@",error);
      }
      
    • 当广告View被关闭时回调

      - (void)adViewDidClosed:(UIView *)adView whichProvider:(KADViewProvider *)provider {
          NSLog(@"-----close----");
      }
      
    • 当广告View展示完毕时会回调,只用于视频广告

      - (void)adViewShowCompleted:(UIView *)adView whichProvider:(KADViewProvider *)provider {
          NSLog(@"----complete----");   
      }
      
    • 当广告View被点击时回调

      -(void)adViewHasBeenClicked:(UIView *)adView whichProvider:(KADViewProvider *)provider {
          NSLog(@"----click----请在此协议方法中发起点击上报");
      }
      
    • 当要获取报价时请实现以下协议

      -(void)adViewGetExtraParameter:(UIView *)adView parameters:(NSDictionary *)param whichProvider:(KADViewProvider *)provider {
          //param包含了额外信息,包括price报价
          if (param) {
              NSLog(@"eatraParam:%@",param);
          }
      }
      

3.适配器

目前支持mopub和adMob的适配器,为方便SDK的接入,接入者只需在接入了mopub或admob的SDK的同时,仍然要将SniperMob的SDK以及SniperMob的适配器文件拖入项目目录下,但不需要关注SniperMob SDK的相关配置以及接口的使用。

在使用mopub或adMob提供的方法连接到SniperMob时,需要传递给SniperMob一些请求广告时需要的参数,该参数是一个NSDictionary类型的对象,具体参数说明如下:

@{

@"plid":@"test_plid_xx", //设定ID

@"appid":@"appid2", //应用ID

@"printLogEnable":@"1", //是否打印日志,true为1,false为0

@"debugEnable":@"1", //是否开启debug模式,true为1,false为0

@"estimateWidth":@(320) //接收广告view的容器宽度

}

3.1 mopub支持的广告类型

3.1.1 横幅

连接到SniperMob将使用mopub提供的以下方法,参数info需要传递给SniperMob进行广告请求所需的参数:

//info参数请参考上述的参数说明
-(void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info;
3.1.2插播广告

连接到SniperMob将使用mopub提供的以下方法,参数info需要传递给SniperMob进行广告请求所需的参数:

//info参数请参考上述的参数说明
- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info;
3.1.3原生广告

连接到SniperMob将使用mopub提供的以下方法,参数info需要传递给SniperMob进行广告请求所需的参数:

//info参数请参考上述的参数说明
-(void)requestAdWithCustomEventInfo:(NSDictionary *)info;
3.1.4奖励视频

连接到SniperMob将使用mopub提供的以下方法,参数info需要传递给SniperMob进行广告请求所需的参数:

//info参数请参考上述的参数说明
- (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info;

3.2 adMob支持的广告类型

在连接到SniperMob之前,adapter将通过adMob提供的GADCustomEventExtras类传递给adapter附加的请求参数,示例如下:

GADRequest *request = [GADRequest request]; 
GADCustomEventExtras *extras = [[GADCustomEventExtras alloc]init];
//关于参数info请参考上述参数说明
//这里的label参数也可以是别的广告类型
[extras setExtras:info forLabel:@"SniperMobCustomEventBanner"];
[request registerAdNetworkExtras:extras];
3.2.1 横幅

将使用admob提供的以下方法连接到SniperMob:

//参数request的additionalParameters属性保存了SniperMob需要的参数,具体请参考上述的参数说明
- (void)requestBannerAd:(GADAdSize)adSize
              parameter:(NSString *)serverParameter
                  label:(NSString *)serverLabel
                request:(GADCustomEventRequest *)request;
3.2.2插播广告

将使用admob提供的以下方法连接到SniperMob:

//参数request的additionalParameters属性保存了SniperMob需要的参数,具体请参考上述的参数说明,其余参数非必需
- (void)requestInterstitialAdWithParameter:(NSString *)serverParameter
                                     label:(NSString *)serverLabel
                                   request:(GADCustomEventRequest *)request;
3.2.3 本地

将使用admob提供的以下方法连接到SniperMob:

//参数request的additionalParameters属性保存了SniperMob需要的参数,具体请参考上述的参数说明,其余参数非必需
- (void)requestNativeAdWithParameter:(NSString *)serverParameter
                             request:(GADCustomEventRequest *)request
                             adTypes:(NSArray *)adTypes
                             options:(NSArray *)options
                  rootViewController:(UIViewController *)rootViewController;
3.2.4 奖励视频

将使用admob提供的以下方法连接到SniperMob:

-(void)requestRewardBasedVideoAd;

4.注意事项

4.1 错误码说明

错误码 描述
-1 一次性发送过多请求,请修改代码逻辑
-2 网络不可用
1 没有广告填充
2 未知错误
3 缺少必要的输入参数
4 AppID不可用
5 AppID与系统不匹配
6 广告位id(placementID)不可用
7 广告位id(placementID)与系统不匹配
8 广告位id(placementID)关联的AppID和请求的不符
9 内部错误,请联系我们
12 平台不一致
13 解析请求参数出错
14 请求包名与前台配置不一致
1000 请求超时
1001 服务器未正确返回
1100 数据解析异常
1101 当前请求类型与创建的广告位id类型不匹配
1102 不支持的广告类型,请联系开发人员
1103 缺少必要的返回参数
1104 不支持的广告位类型
1105 广告位类型与广告类型不匹配
1110 解析Html异常
1120 解析RichMedia广告异常
1130 解析Native广告异常
1140 解析视频广告异常
1141 解析视频广告wrapper异常
1142 解析视频广告Wrapper跳转次数过多
1200 创建UI异常
1201 渲染UI异常
1210 渲染HTML广告异常
1220 渲染RichMedia广告异常
1230 渲染Native广告异常
1240 创建Native播放器异常
1241 创建VPAID播放器异常
1242 创建H5播放器异常
1243 创建播放器失败,不支持的媒体类型
1244 加载媒体内容失败
1245 加载媒体内容超时
1246 H5处理视频广告异常
1300 落地页加载失败

4.2 权限说明

SniperMob SDK在使用过程中会用到以下权限,如果项目本身不支持该权限,不要求强制开启该权限:

(1)读取手机UUID信息

(2)获取手机定位权限

(3)互联网访问

(4)添加提醒事件权限

(5)访问相册权限以用来支持保存图片

4.3 资源释放

//在当前页面消失之前,广告View已经被点击关闭,则不需要进行任何资源释放,SDK内部已经做好相关处理
//当广告没有点击关闭就离开当前页面,则需要在当前页面的dealloc方法里调用以下两个方法之一:

 //release the all resource of ad
- (void)releaseAllAdResource;

// release the resource of ad by provider
- (void)releaseTheAdResourceByProvider:(KADViewProvider *)provider;

示例:
-(void)dealloc{
    [[KADPlatformManager sharedInstance]releaseAllAdResource];
    //[[KADPlatformManager sharedInstance]releaseTheAdResourceByProvider:self.provider];
}

注意:建议在添加广告的页面的dealloc方法里都调用以上两个方法之一即可。如果特殊情况下(比如单例)dealloc方法未执行,则需要将持有的provider属性修改成weak修饰符,并在调用了release方法后手动将持有的ad view置为nil.

4.4 广告关闭

#####4.4.1 非插屏广告的关闭

当前只有插屏广告自带关闭按钮,其它广告不提供关闭功能。如遇特殊需求,即需要将非插屏广告关闭。可使用以下方法:

1.先将已经拿到的的ad view从父视图移除
  [self.adView removeFromSuperview];
2.释放资源
  [[KADPlatformManager sharedInstance] releaseTheAdResourceByProvider:self.provider];
  
 /**具体请参考demo**/
4.4.2 插屏广告的关闭

插屏广告是一个独立的控制器页面,不会返回一个ad view对象,因此要使用另外提供的接口方法进行关闭。

[[KADPlatformManager  sharedInstance]dismissInterstitialByProvider:self.provider];

 /**具体请参考demo**/

4.5 素材集成审核

1)在初始化SDK时设置isGetIllegalUrls为YES,才能开启获取素材的权限。

Cannon detects that the APK is corrupted. [KADPlatformManager sharedInstance].isGetIllegalUrls = YES;

2)当需要收集问题素材时可调用此接口,此接口会返回一个与provider对应的这个广告加载过的所有url列表,但此接口不支持native广告和video广告。

 [[KADPlatformManager sharedInstance]getAssetListByProvider:self.provider finished:^(NSArray *asset, KADErrorInfo *error) {
      NSLog(@"asset=%@,error=%@",asset,error);
  }];
  
  注意:请在广告展示完毕之后再调用此接口,否则会获取不到素材,或者获取到的素材不完整。

4.6 debug日志说明

//默认为NO,设置为true可在控制台输出debug日志
[KADPlatformManager sharedInstance].isPrintLog = YES;

注意:isPrintLog属性默认NO

5.FAQ

1.获取KADViewProvide对象后如何拿到最终展示的ad view?

答:获取KADViewProvide对象后请保持这个对象,在需要展示广告的页面调用KADPlatformManager的“- (void)beginShowAdViewByViewController: andProvider:”方法,此方法需要传递一个KADViewProvide对象,根据KADViewProvide对象去渲染对象的ad view,当ad view创建完成,会在KADViewDelegate的协议方法里回调一个ad view对象。

2.KADViewProvider的作用是什么?sdk里为什么没有提供KADViewProvider的头文件?

答:KADViewProvider对象只是一个标识,让你区分你当前请求的是哪一个广告。请求广告完成会返回一个保存了广告数据的KADViewProvider对象,渲染ad view时需要用到这个KADViewProvider对象。

3.KADAdViewDelegate对任何类型的广告都必须给ViewController吗?如果为空,会有什么负面作用?

答:KADViewDelegate有两个必须要实现的代理方法,其中一个就是要拿到ViewController,这个ViewController是之后跳转落地页和弹出插屏页的时候要用到的。为了广告能正常展示,所有类型的广告都要求传递ViewController。

4.KADAdViewDelegate对任何类型的广告都必须给estimateWidth吗?如果为空,会有什么负面作用?

答:KADViewDelegate有两个必须要实现的代理方法,其中一个就是要拿到estimateWidth,这个estimateWidth是装载ad view的容器的width。并非所有广告都会用到estimateWidth,SDK会根据estimateWidth以及广告位的宽高比计算ad view的高度。为了广告能展示完全,要求estimateWidth都要传递。

5.如果placementID不正确,KADCompletionReturnProviderBlock也会返回provider?

答:只有在请求成功并且有广告填充并且此广告有效的情况下,才会返回provider,否则会返回error

6.如果placementID不正确,请求native广告完成后的Block也会返回adModel?

答:只有在请求成功并且有广告填充并且此广告有效的情况下,才会返回adModel,否则会返回error $\color{red}{7.拿到的ad view必须作为UIViewController.view的subview才能相应点击;不能任意放在某个UIView中?}$

答:ad view可以放到任意UIView中,只要ad view完全在父视图上,不会影响点击。如果点击不响应,可能出现的原因有:ad view不完全在父视图上、没有获取到跳转落地页的链接以及广告源出问题。如果排除第一个原因,请联系我们做相关检测。

$\color{red}{8.拿到的ad view必须作为UIViewController.view的subview才能相应点击;不能任意放在某个UIView中?}$

答:ad view可以放到任意UIView中,只要ad view完全在父视图上,不会影响点击。如果点击不响应,可能出现的原因有:ad view不完全在父视图上、没有获取到跳转落地页的链接以及广告源出问题。如果排除第一个原因,请联系我们做相关检测。

###6.版本记录

  • v1.0.1 20180330

    增加banner、interstitial、native以及video广告

  • v1.0.2 20180411

    • 解决url缓存问题

    • 修改reqid的获取方式

    • 修改ua的获取方式

    • 优化图片加载引擎

    • v1.0.3 20180420

      • sdk支持报价

      • 处理第三方监控url返回非200,302的情况

      • 修改reqid的获取方式

  • v1.0.4 20180503

    • 更换sdk域名

    • 添加返回的错误内容打点上报

    • 修复打点reqid前后不一致问题

  • v1.0.5 20180517

    • 添加激励视频广告

    • 添加native - video 广告

    • 修改video样式,优化内部逻辑

  • v1.0.6 20180604

    • 优化广告内部跳转关系

    • 支持GDPR

    • 支持deeplink

  • v1.0.7 20180622

    • 优化mraid解析逻辑

    • 优化性能

    • 支持bit code

  • v1.0.8 20180705

    • 优化对外接口,添加error回调

    • 优化错误上报逻辑,细分错误类型

  • v1.0.9 20180723

    • 修复部分mraid广告不显示问题
    • 优化webview对屏幕的适配
    • 修复bug,优化性能
  • v1.1.0 20180806

    • 支持https
    • 优化内存消耗性能
    • 修复已知bug
    • 提供素材收集审核
  • v1.1.1 20180820

    • 优化曝光逻辑
    • 优化Vast解析逻辑
    • 修复已知bug
  • v1.1.2 20180917

    • 参数配置和数据加密
    • 优化native video
    • 修复已知bug
  • v1.1.3 20180924

    • 添加视频播放相关配置
    • 优化vast解析
    • 修复已知bug