美文网首页
ios广告页的实现

ios广告页的实现

作者: lizhi_boy | 来源:发表于2018-09-20 22:06 被阅读105次

之前有有些过简单的广告页的实现,现在我对之前的写的进行细致的优化使它更有效地应用到我们的项目中去。

还是说一下他的原理吧

遮盖首页显示广告页

其中:广告放在首页的最顶层视图上,这样做法的好处是点击了广告页跳转到相关html页面后,返回的页面仍是首页。
目前的话广告页支持一般图片和gif图片(如果有播放视频需求的童鞋,看到这里就可以return了)


界面内容:广告显示时间,全屏点击进入web页面。
技术点:定时器,图片下载缓存,下载超时控制等。

核心代码:

//数据加载类
-(void)loadData{
    
    //设置默认数据
    if (self.timeoutInterval == 0) {
        self.timeoutInterval = 5.0;
    }
    
     if (self.dayTimes == 0) {
        self.dayTimes = 99999;
     };

    NSString *imagePath = self.pictureUrl;
    __weak typeof(self) weakSelf = self;
    [self imageDataWihtUrl:imagePath callback:^(HHRADPictureType type, id data) {
        if ([data isKindOfClass:[NSData class]]) {
            
            if (type == HHRADPictureGIF) {
                UIImage *image = [UIImage sd_animatedGIFWithData:data];
                weakSelf.adView.adImageView.image = image;
                
            }else{
                weakSelf.adView.adImageView.image = [UIImage imageWithData:data];
            }
        }else if([data isKindOfClass:[NSString class]]){
            
            [self loadDownPictureSourceWithUrl:data callback:^(HHRADPictureType type, id data) {
               
                dispatch_async(dispatch_get_main_queue(), ^{
                    if (type == HHRADPictureGIF) {
                        UIImage *image = [UIImage sd_animatedGIFWithData:data];
                        weakSelf.adView.adImageView.image = image;
                    }else{
                        weakSelf.adView.adImageView.image = [UIImage imageWithData:data];
                    }
                });
            }];
        }else{
            //后续补充其他类型
        }
    }];
}

/**
 开启图片下载操作

 @param api 图片资源链接
 @param callback 操作数据返回
 */
-(void)loadDownPictureSourceWithUrl:(NSString *)api callback:(CompletionBlock)callback{
    
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:api] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:self.timeoutInterval];
    NSURLSessionDownloadTask *task = [session downloadTaskWithRequest:request];
    //开始任务
    [task resume];
    //完成回调
    _completionBlock = callback;
    
}

#pragma mark --- NSURLSessionDownloadDelegate

-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
     //下载完成
   BOOL isSeccess =   [[NSFileManager defaultManager] moveItemAtPath:[location path] toPath:[self filePathWihtImagePath:self.pictureUrl] error:nil];
    if (isSeccess) {
        NSLog(@"广告页已缓存");
        __weak typeof(self) weakSelf = self;
        [self imageDataWihtUrl:self.pictureUrl callback:^(HHRADPictureType type, id data) {
             weakSelf.completionBlock(type,data);
        }];
       
    }else{
         NSLog(@"广告页缓存出现问题请排查");
    }
}


-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{
    
    //显示下载进度(暂不需要)
//   NSLog(@"下载进度:%f",1.0*totalBytesWritten/totalBytesExpectedToWrite);
    
}


-(void)URLSession:(NSURLSession *)session task:(nonnull NSURLSessionTask *)task didCompleteWithError:(nullable NSError *)error{
   //下载出错(退出广告界面)
    if (error) {
        NSLog(@"资源下载出错:%ld",[error code]);
        [self.adView dismissADView];
    }
}

下面是图片数据获取的代码

/**
 图片数据获取
 */
-(void)imageDataWihtUrl:(NSString *)imageUrl callback:(void(^)(HHRADPictureType type,id data))callback{
    
    NSString *filePath = [self filePathWihtImagePath:imageUrl];
    HHRADPictureType type_p = HHRADPictureJPG;
    
    //如果指定资源文件类型(推荐使用)
    if (_adModel.type_str) {
        
        if ([_adModel.type_str containsString:@"gif"] || [_adModel.type_str containsString:@"GIF"]) {
            type_p = HHRADPictureGIF;
        }
        
    }else{
        
        //否则按默认的类型判断(链接不是文件类型结尾的可能会出现显示bug)
        if ([filePath hasSuffix:@"gif"] || [filePath hasSuffix:@"GIF"]) {
            type_p = HHRADPictureGIF;
        }
    }
    
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:filePath]) {
        //如果存在则加载缓存数据
        NSData *imageData = [NSData dataWithContentsOfFile:filePath];
        callback(type_p,imageData);
        
    }else{
        //否则加载网络数据
        callback(type_p,imageUrl);
    }
}

以上只是部分代码,详情请看github demo实现,同时欢迎对代码实现上不好的地多多指出。

相关文章

  • ios广告页的实现

    之前有有些过简单的广告页的实现,现在我对之前的写的进行细致的优化使它更有效地应用到我们的项目中去。 还是说一下他的...

  • iOS 广告页的实现

    现象: 诚然、现在很多app启动后除了启动页,还会加一个广告页。今天我们就来说下广告页的实现。 分析(3部分组成)...

  • iOS广告页实现优化技巧

    之前做广告页的时候就一直想来总结一下几个版本优化时的思路,广告页不同于其他页面图片的原因是极其需要考虑弱网情况下的...

  • iOS资讯详情页实现—WebView和TableView混合使用

    iOS资讯详情页实现—WebView和TableView混合使用 iOS资讯详情页实现—WebView和Table...

  • iOS 实现启动页广告并消失

    启动页无疑就是后端提供了各项参数,移动端展示出来。 但是如何让启动页消失,直接显示出首页呢? 上代码 启动页Con...

  • 启动加载广告页面

    转载自:http://ios.jobbole.com/85556/ 思路 1.广告页加载思路。广告页的内容要实时显...

  • iOS广告页的实现及注意点

    在大多数app启动过程中都会出现广告页,那么现在说说到底是如何实现的。 实现思路: 自定义一个广告页viewCon...

  • iOS开发中实现广告页的思路

    参考XHLaunchAd https://github.com/CoderZhuXH/XHLaunchAd[htt...

  • 收集一些好用的第三方库

    1.iOS设置启动页后的广告页: https://github.com/CoderZhuXH/XHLaunchAd...

  • 启动页+广告页实现优化

    前言 每个app中都有启动+广告这个功能逻辑,或多或少,每个公司的逻辑都不大一样,最近我优化了一版广告业+启动页面...

网友评论

      本文标题:ios广告页的实现

      本文链接:https://www.haomeiwen.com/subject/oyywnftx.html