详细分析iOS启动页广告
最近公司有个需求,需要添加启动页广告,查了不少资料,基本上有2种说法。一种是实时展示广告,另外一种是先保存,下次再展示本地的。对于这两种说法,仔细了研究下,有可取之处,也有一些小缺点。下面就和大家慢慢探讨下。
1.先下载后展示方案
先说下我采用的方案,APP首次启动,加载引导页,然后进入首页,这第一次不展示启动页广告。可以选择在didFinishLaunchingWithOptions里面,先网络请求广告,判断本地是有已经存储了相同的广告信息,如果是,则不用理会。不是,则存储到本地上。
等下次进来,可以判断是否有本地存储的广告信息,有则直接展示,没有就直接进入首页。
优点:启动流程流畅,无影响,不会影响用户启动体验。
缺点:广告不是实时的。例如本地广告已经下架了,这时候启动还加载本地的是不是就出问题了。对于这点,我觉得还是要看公司实际运营情况来确定,如果有后台返回的有效期,就能避免这种情况。
想了下,无伤大雅,影响也不是很大。采用这种方式感觉也不错。
2.实时展示方案
这个方案,有研究过,也是一种不错的做法。APP启动,直接网络请求广告,我们直接跳到广告页,这里也分成2种情况。
一种情况,先加载本地固定的广告,1S内有广告数据返回,倒计时开启,直接展示广告,没有广告,或者网络请求失败,直接结束倒计时,进入首页。
另外一种情况,和一开始说的先下载后展示的有点雷同,这时候就是先加载本地下载的广告,1S内有广告数据返回,倒计时开启,直接展示广告,并把广告下载到本地。如果网络请求失败,就倒计时本地下载的广告,如果没有广告,也是直接结束倒计时,进入首页。
优点:实时更新启动广告,保证每次都是最新的。
缺点:广告可以会延迟展示,用户体验可能会差点。
还是想了下,其实感觉都行,毕竟要看注重点在哪里。用户体验嘛,对于我来说,肯定是能不展示倒计时是更好的,直接进入首页。但既然有启动页这广告东西,我觉得展示也行,不要太频繁就好,不要弄得每次打开都有。这只是我的一个小小期望而已。
3.多Windows实现
对于实现这个启动广告功能,又有两种做法,其中一种是利用多windows来实现。
我们在didFinishLaunchingWithOptions里面,先添加2个window。
// 多window实现,相当于又2个window,1个在下面,1个在上面
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.tintColor = .darkGray;
let nav1 = UINavigationController(rootViewController: ViewController())
window?.rootViewController = nav1
window?.makeKeyAndVisible()
// self.splashWindow = UIWindow(frame: CGRect(x: 0, y: 100, width: 300, height: 500))
self.splashWindow = UIWindow(frame: UIScreen.main.bounds)
let splashVC = SplashViewViewController()
let nav = UINavigationController(rootViewController: splashVC)
splashWindow?.rootViewController = nav
splashWindow?.makeKeyAndVisible()
splashWindow是展示广告的,window是展示首页的,window在splashwindow的下面,所以我们先看到的上面是展示广告的,这种做法的好处是在倒计时广告的时候,首页其实已经在请求加载页面了,等倒计时结束,这时候首页也已经加载好了。
4.单window实现
单window的话,无非就是看rootViewController是哪个页面,我们直接由广告页,变成首页就好。这里无非要注意的就是过渡的动画。这里看自己想怎样的效果了。
这种单window用法,我们常见的有登录页,首页互相切换,还有引导页和首页切换等等,实现起来倒是不难。也打算细说了。
5.效果图
按照国际惯例,提供一下GitHubDemo:github.com/wenweijia/S…
6.总结
对于方案提出了2个,都是文字类的,听起来的确是文绉绉的,本来想弄个流程图的,有点懒,也比较忙,后面有时间再补吧
主要是抛砖引玉,还是想看下各位大佬的看法,例如有没有更好的方案,哪些方案需要完善一下,欢迎留意,谢谢!