一个广告怎么去实现,要考虑哪些问题。我就一一罗列一下:
1、实现一个展示广告的Imageview;
2、给广告添加点击事件;
3、跳过广告的按钮;
4、因为启动页展示的时间一般是相对较短的,而且后台返回的数据也都是只有一个图片url字段,我们拿到数据之后还需要用SDWebImage加载。所以一般我们不是每次进到app(除了第一次)都去后台拉取一条广告数据,而是第一次拉取到的广告数据就要包含多条不同有效期的广告,然后缓存到本地,每次加载广告的时候先从本地拉取数据,挑选出符合要求的图片url,然后用SDWebImage去加载。同时也向后台请求数据,将原来的缓存替换掉。
5、app第一次安装,有引导页的时候不展示广告,第二次开始展示广告;
6、广告如果加载太慢,展示的时候就会出现一片空白的情况,所以在启动页展示的时间里,应该去开始加载广告,在启动页加载完成之后应该去判断广告是否有加载出来。
[_ImageView sd_setImageWithURL:[NSURLURLWithString:urlStr] completed:^(UIImage*image,NSError*error, SDImageCacheType cacheType,NSURL*imageURL) {//图片加载完成处理}];
所以在开始加载广告的时候,就应该开始监听广告是否加载出来。
//对YSAdvertiseViewController的ImgLoadFinished进行监听[self.advertiseControlleraddObserver:selfforKeyPath:@"imgLoadFinished"options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];//限时2秒加载出图片_adTime = [NSTimer scheduledTimerWithTimeInterval:2.0f target:selfselector:@selector(judegADImgWhetherLoad) userInfo:nilrepeats:NO];
//对YSAdvertiseViewController的ImgLoadFinished进行监听的函数- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context { _advertiseImgDidLoad =YES;//说明图片加载完成}//判断广告图片是否加载完成- (void)judegADImgWhetherLoad { [_adTime invalidate]; _adTime =nil;if(!_advertiseImgDidLoad) {//加载未完成_isAdvertisedEnd =YES; [selfdoCheckComplete]; }}
//特别要注意移除监听,因为我就是这被坑了[self.advertiseController removeObserver:selfforKeyPath:@"imgLoadFinished"];//将监听移除
7、如果app在后台待机太久,再次进来前台的时候也应该展示广告,所以在applicationDidEnterBackground的时候应该把时间存起来:
//程序切入后台,这里要注意GMT时间 NSDateFormatter *formatter =[[NSDateFormatter alloc] init];
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[formatter setTimeZone:sourceTimeZone];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
_lastTimeEnterBackGroundStr = [formatter stringFromDate:[NSDate date]];//当前时间
在applicationWillEnterForeground的时候对比时间差,判断是否显示:
NSDateFormatter *formatter =[[NSDateFormatter alloc] init];
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[formatter setTimeZone:sourceTimeZone];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate * lastDate = [formatter dateFromString:_lastTimeEnterBackGroundStr];
NSDate * now = [formatter dateFromString:[formatter stringFromDate:[NSDate date]]]; NSTimeInterval IntervalTime = [now timeIntervalSince1970]*1- [lastDate timeIntervalSince1970]*1;if(IntervalTime>(2*60*60)) { [_mainController loadAdvertisedView]; }
8、那么到了这里其实大部分功能都已经实现了,但是我们有时候就会想知道我们的广告详情到底有木有看。所以点击广告图片的时候,我们应该加一个内部跳转,让它跳到广告的响应页面。
9、另外需要的话,我们应该加一个统计,看广告详情有多少人观看,有多少人会跳过等。
————————————————转自CSDN:u012297622的博客
网友评论