APP启动和广告

11 9月
  • 启动流程
  • 启动屏广告
  • 闪屏广告

启动流程

在APP启动过程中,main函数并不是最先执行的,main函数之前系统还会执行动态链接,加载二进制文件,初始化runtime,加载一些类等操作,简而言之就是IOS执行了APP的装载和链接等工作。

main函数中,就是创建一个UIApplication对象(内含系统功能)和一个UIApplicationDelegate(程序员在里面实现业务逻辑):

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

创建一个UIApplication对象用于处理APP生命周期,内存告警,UI展示,方向,openURL等,可以用UIApplicationDelegate获得这些功能的控制权。

APP的生命周期有:APP的优化,如果是main函数执行后的优化属于业务优化,主要就集中在生命周期里中间3个的优化。

Not running:未启动
Inactive:过渡的中间状态,除启动时外,还有双击home键,出现应用列表,此时APP既不是前台运行,也不是进入后台
Active:运行中,系统会分配更多的资源
Background:系统分配较少资源
Suspended:内存不足,系统kill APP

UIApplicationDelegate中可以获得这些生命周期的控制权:

启动屏广告

在main函数执行前,IOS启动APP时有个系统提供的启动屏(Launch Screen),等系统ready后,启动屏自动消失,执行main函数,显示APP的业务首屏。

可以将启动屏(Launch Screen)贴张广告图片增加收入:

1.删除项目中的默认的storyboard文件

2.删除项目中info.plist里的【Launch screen interface file base name】:【LaunchScreen】字段

3.点击项目名,进入General tab,点击【App Icons and Launch Images】的【Use Asset Catalog】,弹出窗点击【Migrate】。在项目的Assets.xcassets里就会出现LaunchImage的配置。

4.勾上为iPhone配置启动图的配置项

5.将不同尺寸的广告图片拖进Assets.xcassets中对应的机型中。

这样启动屏(Launch Screen)就能显示我们添加的广告图片了。

闪屏广告

随着IOS速度越来越快,启动屏时间变的越来越短。所以光靠启动屏不能满足日常广告的曝光时长。

现在的做法是:启动屏(Launch Screen)仍旧贴广告图片,等启动屏消失后,APP的首屏UIWindow里addSubView显示同样的图片,过段时间再让广告图片消失。

这样对用户来说是无感知的,以为广告图片显示的时间变长了。

做法很简单,先创建个UIImageView:

#import "SplashView.h"

@interface SplashView()
@property(nonatomic, strong, readwrite)UIButton *button;   // 广告图片右上角显示【跳过】按钮
@end

@implementation SplashView
- (instancetype)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {
        self.image = [UIImage imageNamed:@"icon.bundle/splashscreen.jpg"];
        [self addSubview:({
            _button = [[UIButton alloc] initWithFrame:CGRectMake(330, 100, 60, 40)];
            _button.backgroundColor = [UIColor lightGrayColor];
            [_button setTitle:@"跳过" forState:UIControlStateNormal];
            [_button addTarget:self action:@selector(_removeSplashView) forControlEvents:UIControlEventTouchUpInside];
            _button;
        })];
        self.userInteractionEnabled = YES;
    }
    return self;
}

- (void)_removeSplashView{
    [self removeFromSuperview];
}
@end

在UIApplicationDelegate的didFinishLaunchingWithOptions生命周期里加上闪屏广告:

#import "SplashView.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ...

    // 添加闪屏
    [self.window addSubview:({
        SplashView *splashView = [[SplashView alloc] initWithFrame:self.window.bounds];
        splashView;
    })];
    
    return YES;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注