hello_vzjw

iOS广告页——(开发一个iOS广告页应该要考虑的东西)

不熟悉客户端软件开发的人都认为开发一款客户端app很轻松。所以我们去面试的时候,经常会碰到如下问题:这个app开发要多久?说实话,对于这个问题,没有人能百分百保证准确时间。
今天我就来为我们苦逼的码农正正名。就说一个广告怎么去实现,要考虑哪些问题。我就一一罗列一下:
1、实现一个展示广告的Imageview;
2、给广告添加点击事件;
3、跳过广告的按钮;
4、因为启动页展示的时间一般是相对较短的,而且后台返回的数据也都是只有一个图片url字段,我们拿到数据之后还需要用SDWebImage加载。所以一般我们不是每次进到app(除了第一次)都去后台拉取一条广告数据,而是第一次拉取到的广告数据就要包含多条不同有效期的广告,然后缓存到本地,每次加载广告的时候先从本地拉取数据,挑选出符合要求的图片url,然后用SDWebImage去加载。同时也向后台请求数据,将原来的缓存替换掉。
5、app第一次安装,有引导页的时候不展示广告,第二次开始展示广告;
6、广告如果加载太慢,展示的时候就会出现一片空白的情况,所以在启动页展示的时间里,应该去开始加载广告,在启动页加载完成之后应该去判断广告是否有加载出来。

[_ImageView sd_setImageWithURL:[NSURL URLWithString:urlStr] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
    //图片加载完成处理
}];

所以在开始加载广告的时候,就应该开始监听广告是否加载出来。

//对YSAdvertiseViewController的ImgLoadFinished进行监听
[self.advertiseController addObserver:self forKeyPath:@"imgLoadFinished" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew  context:nil];

//限时2秒加载出图片
_adTime = [NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(judegADImgWhetherLoad) userInfo:nil repeats:NO];
//对YSAdvertiseViewController的ImgLoadFinished进行监听的函数
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
    _advertiseImgDidLoad = YES;//说明图片加载完成
}

//判断广告图片是否加载完成
- (void)judegADImgWhetherLoad {
    [_adTime invalidate];
    _adTime = nil;
    if (!_advertiseImgDidLoad) {
        //加载未完成
        _isAdvertisedEnd = YES;
        [self doCheckComplete];
    }
}
//特别要注意移除监听,因为我就是这被坑了
[self.advertiseController removeObserver:self forKeyPath:@"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、另外需要的话,我们应该加一个统计,看广告详情有多少人观看,有多少人会跳过等。

OK,这就是我们一个广告页应该考虑的基本问题。这个时候你会说一个app很简单吗??

posted on 2016-06-07 12:03  hello_vzjw  阅读(148)  评论(0)    收藏  举报

导航