App 启动加载广告页面思路

需求

很多app(如淘宝、美团等)在启动图加载完毕后,还会显示几秒的广告,一般都有个跳过按钮可以跳过这个广告,有的app在点击广告页之后还会进入一个广告页面,点击返回进入首页。今天我们就来开发一个广告页面,效果如下。

思路

1.广告页加载思路。广告页的内容要实时显示,在无网络状态或者网速缓慢的情况下不能延迟加载,或者等到首页出现了再加载广告页。所以这里我不采用网络请求广告接口获取图片地址,然后加载图片的方式,而是先将图片异步下载到本地,并保存图片名,每次打开app时先根据本地存储的图片名查找沙盒中是否存在该图片,如果存在,则显示广告页。

2.判断广告页面是否更新。无论本地是否存在广告图片,每次启动都需要重新调用广告接口,根据图片名称或者图片id等方法判断广告是否更新,如果获取的图片名称或者图片id跟本地存储的不一致,则需要重新下载新图片,并删除旧图片。

3.广告页点击。如果点击广告需要跳转广告详情页面,那么广告链接地址也需要用NSUserDefaults存储。注意:广告详情页面是从首页push进去的。

4.广告页的显示代码可以放在AppDeleate中,也可以放在首页的控制器中。如果代码是在AppDelegate中,可以通过发送通知的方式,让首页push到广告详情页。

5.广告页面的底部和启动图的底部一般都是相同的,给我们的感觉就是启动图加载完之后把广告图放在了启动图上,而且不能有偏差,比如淘宝。美工在制作广告图的时候要注意这点。

6.研究了一下淘宝的广告显示机制,删除淘宝之后重新打开不会显示广告图片,第二次打开才会显示。美团的广告图有时候一直都不会显示,所以后台在开发广告api的时候可以增加个字段来判断是否启用广告,如果后台关闭了广告,将沙盒中的图片删除即可。

步骤

1.判断沙盒中是否存在广告图片,如果存在,直接显示

NSString *filePath = [self getFilePathWithImageName:[kUserDefaults valueForKey:adImageName]];

BOOL isExist = [self isFileExistWithFilePath:filePath];

if (isExist) {// 图片存在

AdvertiseView *advertiseView = [[AdvertiseView alloc] initWithFrame:self.window.bounds];

advertiseView.filePath = filePath;

[advertiseView show];

}

2.无论沙盒中是否存在广告图片,都需要重新调用获取广告接口,判断广告是否更新

AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html", nil];

[manager GET:urlStr parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {

NSArray *dataArray = responseObject[@"data"];

NSString *imageUrl = dataArray[0][@"imageUrl"];

NSArray *stringArr = [imageUrl componentsSeparatedByString:@"/"];

NSString *imageName = stringArr.lastObject;

NSString *filePath = [self getFilePathWithImageName:imageName];

BOOL isExist = [self isFileExistWithFilePath:filePath];

if (!isExist){// 如果该图片不存在,则下载新图片,删除老图片

[self downloadAdImageWithUrl:imageUrl imageName:imageName];

}

} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {

}];

异步下载图片

/**

*  下载新图片

*/

- (void)downloadAdImageWithUrl:(NSString *)imageUrl imageName:(NSString *)imageName

{

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]];

UIImage *image = [UIImage imageWithData:data];

NSString *filePath = [self getFilePathWithImageName:imageName]; // 保存文件的名称

if ([UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES]) {// 保存成功

NSLog(@"保存成功");

[self deleteOldImage];// 保存成功后删除旧图片

[kUserDefaults setValue:imageName forKey:adImageName];

[kUserDefaults synchronize];

// 如果有广告链接,需要将广告链接也保存下来

}else{

NSLog(@"保存失败");

}

});

}

/**

*  删除旧图片

*/

- (void)deleteOldImage

{

NSString *imageName = [kUserDefaults valueForKey:adImageName];

if (imageName) {

NSString *filePath = [self getFilePathWithImageName:imageName];

NSFileManager *fileManager = [NSFileManager defaultManager];

[fileManager removeItemAtPath:filePath error:nil];

}

}

3.广告页面的跳过按钮倒计时功能可以通过定时器或者GCD实现

// GCD倒计时

- (void)startCoundown

{

__block int timeout = showtime + 1; //倒计时时间 + 1

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);

dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0 * NSEC_PER_SEC, 0); //每秒执行

dispatch_source_set_event_handler(_timer, ^{

if(timeout <= 0){ //倒计时结束,关闭

dispatch_source_cancel(_timer);

dispatch_async(dispatch_get_main_queue(), ^{

[self dismiss];

});

}else{

dispatch_async(dispatch_get_main_queue(), ^{

[_countBtn setTitle:[NSString stringWithFormat:@"跳过%d",timeout] forState:UIControlStateNormal];

});

timeout--;

}

});

dispatch_resume(_timer);

}

4.为广告页面添加一个点击手势,跳转到广告页面

//AdvertiseView.m

- (void)pushToAd{

[self dismiss];

[[NSNotificationCenter defaultCenter] postNotificationName:@"pushtoad" object:nil userInfo:nil];

}

// ViewController.m

- (void)viewDidLoad {

[super viewDidLoad];

self.title = @"首页";

self.view.backgroundColor = [UIColor orangeColor];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pushToAd) name:@"pushtoad" object:nil];

}

- (void)pushToAd {

AdvertiseViewController *adVc = [[AdvertiseViewController alloc] init];

[self.navigationController pushViewController:adVc animated:YES];

}

代码下载地址:https://github.com/zhouhuanqiang/AdvertisingPageDemo

时间: 2024-10-30 15:18:13

App 启动加载广告页面思路的相关文章

PhoneGap 白名单安全机制 navigator.app 加载外部页面返回以及退出介绍

一. Phonegap 白名单安全机制 Phonegap应用的页面大多存在于本地,但有时需要加载外部的Web页面到应用内置的浏览器 视图中已完成特定的应用功能,出于安全性考虑,PhoneGap 设立了白名单安全机制,通过它来 控制能够加载到内置浏览器视图的内容来源. Android 不通过白名单安全机制的话调用外部浏览器 IOS 不通过白名单安全的话 会直接拒绝 二.Android 配置白名单 在res/xml/config.xml这个文件里进行配置 三.IOS 配置 以及 Wp7/wp8配置白

PhoneGap 白名单安全机制 navigator.app 加载外部页面返回

学习要点: 1. Phonegap 白名单安全机制 2. Navigator.app 对象加载外部页面 返回上级页面 一. Phonegap 白名单安全机制 Phonegap应用的页面大多存在于本地,但有时需要加载外部的Web页面到应用内置的浏览器 视图中已完成特定的应用功能,出于安全性考虑,PhoneGap 设立了白名单安全机制,通过它来 控制能够加载到内置浏览器视图的内容来源. Android 不通过白名单安全机制的话调用外部浏览器 IOS 不通过白名单安全的话会直接拒绝. Android

应用程序程序启动时加载广告 ---ios

app 在启动的时候会加载启动图片,我们怎么样去做一个广告页面呢? 思路:在启动完毕后,创建一个加载广告的控制器,然后等广告结束后,我们在去加载主框架内容 如图: 首先我们先创建一个AD的控制器 @interface ABADViewController () @property (weak, nonatomic) IBOutlet UIButton *ADJumpBtn; //跳过 按钮 @property (weak, nonatomic) IBOutlet UIImageView *ADI

iOSAPP启动时实现加载广告

现在很多APP在启动的时候都在加载广告,现在也很流行,主要是盈利啊.笔者也做了很多关于广告的事情.现在记录下自己在APP启动的时候,怎么加载广告的. 下面总结下广告加载的三种方式 1.现在很多APP的广告不是在程序启动的时候开始请求广告的,而是直接加载广告的图片链接.可以在程序启动完后给个特定的时间去请求广告,并缓存到数据库.广告平台也是建议这样做的,可以节省用户的打开程序的时间.但是这种方法是有缺点的,就是广告的时常,一般的广告的平台都是55分钟左右展示是有效的.(如果有自己的广告商,还是建议

安卓APP加载HTML5页面解决方案总结

由于H5页面在移动端的兼容性及扩展性方面体现出来的优势,又兼得APP中植入H5页面对应用的灵活性有大大的提升(如活动.游戏的更新等),APP开发不可避免的需要加载一些H5页面,但安卓客户端对网页内容的排版.整理.交互等可能会出现一些不可预料的问题.本文将对安卓端加载网页写一些比较通用,可能避免问题的统一的解决方法总结. 背景 一般对前端知识有所了解的都清楚,解析网页主要是靠页面渲染引擎和JS解析引擎,前者负责取得网页的内容(HTML.XML.图象等等).整理信息(例如加入CSS等),以及计算网页

iOS中如何在欢迎界面中动态加载广告

当我们打开一款应用程序的时候,首先映入眼帘的往往并不是程序的主界面,而是经过精心设计的欢迎界面,这个界面通常会停留几秒钟,然后消失.看似很平常的一个小小的欢迎界面,其实还大有讲究. 一 为什么会有欢迎界面呢? 这是因为程序在启动的过程中需要消耗一些时间,那么在加载出现主界面之前,会出现短暂的黑屏,这实在是很糟糕的一件事情,会给用户一个非常不好的体验.为了缓解用户等待过程中心理的不适与烦躁,欢迎界面闪亮登场了! 用欢迎界面来替代黑屏的等待,可以有效的掩盖耗时阻塞的后台操作,还能向用户展示有效的信息

AngularJS进阶(三十九)基于项目实例解析ng启动加载过程

基于项目实例解析ng启动加载过程 前言 在AngularJS项目开发过程中,自己将遇到的问题进行了整理.回过头来总结一下angular的启动过程. 下面以实际项目为例进行简要讲解. 1.载入ng库 2.等待,直到DOM树构造完毕. 3.发现ng-app,自动进入启动引导阶段. 4.根据ng-app名称找到相应的路由. 5.加载默认地址. 6.Js顺序执行,加载相应模版页 sys_tpls/home.html 7.在此,可以看到index路由中只是填充了ui-view为sys_login的div模

iOS欢迎界面Launch Screen动态加载广告

有许多应用程序在打开的时候,欢迎界面会加载一张连网获取的广告图片或者显示一组动画,这样的效果是如何做到的呢?下面给大家介绍一种简单的实现加载广告的方式. 程序运行起来,欢迎界面之后,会进入AppDelegate,因此我们可以在application: didFinishLaunchingWithOptions:添加代码完成想要的效果.连网获取图片可以用第三方SDWebImage实现,所以需要先将第三方文件夹导入.因为显示广告的页面是在欢迎界面基础上显示的,因此可以直接利用LaunchScreen

Microsoft Corporation 去掉 windows 修改 启动加载 版权

windows 修改 开机界面 boot启动界面 windows 修改 启动加载 版权 windows 系统如何修改开机画面的版权文字"Microsoft Corporation ... ◎Microsoft Corporation Microsoft Corporation 去掉 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:[email protected] E-mail: 313134555 @qq.com 通过16进制的编辑器(我用的是winhex)打开winlo