不熟悉客户端软件开发的人都认为开发一款客户端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很简单吗??

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

  1. [air for ios] 三小时开发一个iOS飞行射击游戏

    [air for ios] 三小时开发一个iOS飞行射击游戏 http://www.badyoo.com/index.php/2012/07/04/158/index.html 2012-07-04 ...

  2. 视频教程-从零开发一个iOS企业级项目实战之我的云音乐视频 教程-iOS

    从零开发一个iOS企业级项目实战之我的云音乐视频 教程 任苹蜻,爱学啊创始人 & CEO,曾就职于某二车手公司担任Android工程师后离职创办爱学啊,我们的宗旨是:人生苦短,我们只做好课!熟 ...

  3. 【转载国外好文】代工开发一个iOS应用没有那么容易

    导读:这是来自新加坡的 iOS 开发者 Kent Nguyen 发表在1月底的一篇博文.这篇吐槽文在 iOS 开发圈子里流传甚广,从原文150多个评论就可见一斑,现翻译如下. 让我们开门见山吧:做一个 ...

  4. 开发一个iOS应用没有那么容易

    让我们开门见山吧:做一个iPhone应用需要花多少钱?(给外行人员看!转自外国程序员) 就是这个最常见的问题,我的很多朋友(大多是些西装革履的商务人士),还有我那些个对技术一知半解的客户们,他们都问过 ...

  5. 开发一个 iOS 应用你所需要做些什么呢?

    从 07 年到现在,iOS 开发也近乎 10 年的时间了,随着 iOS 版本的一步步更新, Xcode 慢慢的稳定,社区的力量也随之变的越来越大,有很多工具可以帮助我们快速去搭建一个 App. 但是 ...

  6. 广告化开发(基础知识)~广告生态链DSP/SSP/RTB/ADX的理解

    文章目录 程序化广告生态 需求方平台(DSP) 广告网盟(AdN) 供应方平台(SSP) 实时竞价 (RTB) 广告交易平台(ADX) 程序化创意平台(PCP) 广告验证平台(AVP) 数据管理平台( ...

  7. ios android统一开发平台,iOS EMAS 统一接入

    使用说明 配置文件下载 配置文件下载请参考 iOS端配置文件:AliyunEmasServices-Info.plist 配置文件引用Xcode中,将AliyunEmasServices-Info.p ...

  8. 2021 年 iOS 应用程序开发七种最佳语言

    原文地址 移动应用程序现在几乎是每个在线业务的必备品.最新的 StatCounter 数据显示,多达56% 的在线连接是通过移动设备建立的,这使它们高于平板电脑和计算机.更重要的是,同一个消息来源说, ...

  9. 如何开发一个用户脚本系列(2)——需要哪些基础知识

    本文原创首发于我的个人博客 一个贾程序员,文章原地址 点此 查看 在第一篇文章中,我对用户脚本进行了一些介绍,让大家对其有个大概的了解.在这篇文章中,我会对用户脚本开发过程中要用到的基础知识做一些介绍 ...

最新文章

  1. 学习记录2-Python中的注册器模块
  2. 共享可写节包含重定位_深度探索win32可执行文件格式
  3. char*,wchar_t*,CString和BSTR之间的转换
  4. Docker中常用的命令
  5. Eclipse用法和技巧十五:自动添加未实现方法1
  6. e.target与e.e.srcElement
  7. 再议FastReport.NET(转)
  8. JavaScript return的作用
  9. P2P网贷谋求“去担保”:引入保险 收益下滑
  10. 实习生如何在平淡无奇的工作中凸显自我价值?
  11. 云杰恒指:8.19恒指期货仓位管理---交易复盘
  12. 红帽linux能干什么,你能用Linux做什么?安徽红帽Redhat认证中心
  13. 儿童学计算机编程好处,孩子学编程的好处是什么
  14. Hadoop入门及官网教程
  15. python爬app_app爬虫(python app爬虫)
  16. 汽车电子EMC试验标准ISO11452
  17. SE、ECA、CA、SA、CBAM、ShuffleAttention、SimAM、CrissCrossAttention、SK、NAM、GAM、SOCA注意力模块、程序
  18. win7计算机启动修复,win7启动修复功能无法正常进入系统的解决方法
  19. 血战Maven,各种问题,Eclipse控制台乱码,Maven打包时Javadoc失败-UTF-8-BOM编码
  20. 多个小电容并联取代大电解电容的作用

热门文章

  1. python asyncio.sleep_Python asyncio 模块
  2. 6-2 求某学生8门课的平均分
  3. printf函数详解
  4. 红米note3Toast不显示问题
  5. office 2010 此应用无法你的在电脑上运行 诺要找到适用于你的电脑的版本,请咨询软件发布者
  6. zcat sort uniq
  7. hexo 菜单_Hexo-修改Hexo主题
  8. 梦幻模拟战手游服务器维护,服务器数据互通公告
  9. Hexo 主题部署到gitee上css样式不生效问题
  10. SSM+垃圾分类系统小程序 毕业设计-附源码221511