全部产品

配置启动页

更新时间:2020-09-10 15:44:45

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

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

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

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

  1. 框架启动时会创建 bootloader,管理应用的主 window。
  2. 展示启动页时,框架会自动完成 window 的切换,并将创建的启动页 window 返回给用户。
  3. 当 bootloader 启动完成并且 Launcher 微应用展示完成时,将关闭启动页,此时再将主 window 切换回来。

前置条件

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

使用示例

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

  1. 声明静态变量来持有启动页的 window 对象。
    1. static UIWindow *splashScreenWindow;
  2. 在框架分类文件的 application:handleDidFinishLaunchingWithOptions: 方法中,实现启动页广告的逻辑并打开启动页。

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

    1. - (void)splashScreenDidDismiss {
    2. // 将应用主 window 还原为 key window
    3. [DTContextGet().window makeKeyAndVisible];
    4. [self performSelector:@selector(doDismiss) withObject:nil afterDelay:0.0];
    5. }
    6. - (void)doDismiss {
    7. // 释放启动页对象
    8. splashScreenWindow.rootViewController = nil;
    9. splashScreenWindow = nil;
    10. [self notifySplashScreenDismiss];
    11. }
    12. - (void)notifySplashScreenDismiss {
    13. // 闪屏结束通知,处理其它逻辑(可选)
    14. [[NSNotificationCenter defaultCenter] postNotificationName:@"kSplashScreenDidDismiss" object:nil];
    15. }
  4. 在框架启动加载完成后,通知框架启动页即将关闭。
    建议在 application:afterDidFinishLaunchingWithOptions: 方法中调用。
    1. - (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    2. APWillKillSplashScreen();
    3. // ...
    4. }
  5. 在首页 ViewController 启动后发送通知,真正关闭启动页。
    ViewController 通常为 Launcher 微应用的 rootViewController,如果是 TabBarController,则为第一个 tab 所在的 ViewController。

    1. @implementation HomeViewController
    2. - (void)viewDidLoad {
    3. [super viewDidLoad];
    4. }
    5. - (void)viewDidAppear:(BOOL)animated {
    6. [super viewDidAppear:animated];
    7. // 通知 Launcher 已经展示
    8. [[NSNotificationCenter defaultCenter] postNotificationName:@"kNotificationLauncherDidAppear" object:nil];
    9. }
    10. @end

相关链接

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