文档

配置启动页

更新时间:

启动页广告又称开屏广告。启动页(也称为闪屏/开屏 Splash)是在应用启动之后,系统 LaunchScreen 结束时展示,应用首页出现时消失。

在客户端配置启动页后,您可以在控制台侧配置 Splash 展位信息与广告内容(参见 创建展位创建活动),应用根据配置获取展位投放数据并进行展示,实现了投放数据的动态下发与展示。

说明

由于投放数据的下载是异步过程,为了不阻塞应用的启动,配置启动页的投放后,首次仅执行下载操作,将图片缓存到本地,下一次应用启动时才会展示上一次缓存的图片。

基于 mPaaS 框架(关于 mPaaS 框架的详细介绍,参见 mPaaS 框架介绍)下,启动页的时序和原理如下:

  1. 框架启动时会创建 bootloader,管理应用的主 window。

  2. 展示启动页时,框架会自动完成 window 的切换,并将创建的启动页 window 返回给用户。

  3. 当 bootloader 启动完成并且 Launcher 微应用展示完成时,将关闭启动页,此时再切换回主 window。

前置条件

确保已正确启动智能投放组件,操作参见 启动组件

操作步骤

在 mPaaS 框架自动生成的框架分类文件 DTFrameworkInterface+MPCDPDemo_plugin.m 中(如下图所示),完成以下配置:

  1. 声明静态变量来持有启动页的 window 对象。

     static UIWindow *splashScreenWindow;
  2. 在框架分类文件的 application:handleDidFinishLaunchingWithOptions: 方法中,实现启动页广告的逻辑并打开启动页。

     - (DTFrameworkCallbackResult)application:(UIApplication *)application handleDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
         // 广告逻辑
       // 查看启动页是否存在
         BOOL showSplashWindow = YES;
       showSplashWindow = splashScreenExist(showSplashWindow);
         if (showSplashWindow) {
             __weak typeof(self) weakSelf = self;
         // 打开启动页
             splashScreenWindow = APSplashScreenStart(^{
             // 启动页关闭的回调
                 [weakSelf splashScreenDidDismiss];
             });
         }
    
         return DTFrameworkCallbackResultContinue;
     }
  3. 实现启动页关闭的逻辑。 包括切换应用主 window,释放启动页 window 以及发送启动页结束的通知(可选)。

     - (void)splashScreenDidDismiss {
         // 将应用主 window 还原为 key window
         [DTContextGet().window makeKeyAndVisible];
         [self performSelector:@selector(doDismiss) withObject:nil afterDelay:0.0];
     }
    
     - (void)doDismiss {
         // 释放启动页对象
         splashScreenWindow.rootViewController = nil;
         splashScreenWindow = nil;
         [self notifySplashScreenDismiss];
     }
    
     - (void)notifySplashScreenDismiss {
         // 闪屏结束通知,处理其它逻辑(可选)
         [[NSNotificationCenter defaultCenter] postNotificationName:@"kSplashScreenDidDismiss" object:nil];
     }
  4. 在框架启动加载完成后,通知框架启动页即将关闭。 建议在 application:afterDidFinishLaunchingWithOptions: 方法中调用。

     - (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
         APWillKillSplashScreen();
       // ...
     }
  5. 在首页 ViewController 启动后发送通知,真正关闭启动页。 ViewController 通常为 Launcher 微应用的 rootViewController,如果是 TabBarController,则为第一个 tab 所在的 ViewController

     @implementation HomeViewController
    
     - (void)viewDidLoad {
         [super viewDidLoad];
     }
    
     - (void)viewDidAppear:(BOOL)animated {
         [super viewDidAppear:animated];
         // 通知 Launcher 已经展示
         [[NSNotificationCenter defaultCenter] postNotificationName:@"kNotificationLauncherDidAppear" object:nil];
     }
     @end

相关链接

启动页相关接口说明参见 API 说明