啟動頁廣告又稱開屏廣告。啟動頁(也稱為閃屏/開屏 Splash)是在應用啟動之後,系統 LaunchScreen 結束時展示,應用首頁出現時消失。
在用戶端配置啟動頁後,您可以在控制台側配置 Splash 展位資訊與廣告內容(參見 建立展位 和 建立活動),應用根據配置擷取展位投放資料並進行展示,實現了投放資料的動態下發與展示。
由於投放資料的下載是非同步過程,為了不阻塞應用的啟動,配置啟動頁的投放後,首次僅執行下載操作,將圖片緩衝到本地,下一次應用啟動時才會展示上一次緩衝的圖片。
基於 mPaaS 架構(關於 mPaaS 架構的詳細介紹,參見 mPaaS 架構介紹)下,啟動頁的時序和原理如下:
架構啟動時會建立 bootloader,管理應用的主 window。
展示啟動頁時,架構會自動完成 window 的切換,並將建立的啟動頁 window 返回給使用者。
當 bootloader 啟動完成並且 Launcher 微應用展示完成時,將關閉啟動頁,此時再切換回主 window。
前置條件
確保已正確啟動智能投放組件,操作參見 啟動組件。
操作步驟
在 mPaaS 架構自動產生的架構分類檔案 DTFrameworkInterface+MPCDPDemo_plugin.m
中(如下圖所示),完成以下配置:
聲明靜態變數來持有啟動頁的 window 對象。
static UIWindow *splashScreenWindow;
在架構分類檔案的
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; }
實現啟動頁關閉的邏輯。 包括切換應用主 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]; }
在架構啟動載入完成後,通知架構啟動頁即將關閉。 建議在
application:afterDidFinishLaunchingWithOptions:
方法中調用。- (void)application:(UIApplication *)application afterDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions { APWillKillSplashScreen(); // ... }
在首頁
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 說明。