LaunchAdManager.swift
3.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//
// LaunchAdManager.swift
// metaCode
//
// Created by zx on 2025/4/22.
//
import Foundation
import UIKit
final class LaunchAdManager {
static let shared = LaunchAdManager()
private var adViewController: LaunchAdViewController?
private var adDataTask: URLSessionDataTask?
/// 预加载广告资源 :ml-citation{ref="1,3" data="citationList"}
func loadAd() {
let adURL = URL(string: "https://wjj.ys2.cnliveimg.com/769/img/2/2025/01/22/173751152842250414939.jpg")!
adDataTask?.cancel()
adDataTask = URLSession.shared.dataTask(with: adURL) { [weak self] data, _, _ in
guard let data = data else { return }
DispatchQueue.main.async {
self?.cacheAdImage(UIImage(data: data))
}
}
adDataTask?.resume()
}
/// 显示广告页(在AppDelegate中调用)
func showAdIfNeeded(in window: UIWindow?) {
// guard !UserSessionManager.shared.isLoggedIn() else {
// window?.switchToMainUI()
// return
// }
adViewController = LaunchAdViewController()
window?.rootViewController = adViewController
window?.makeKeyAndVisible()
}
private func cacheAdImage(_ image: UIImage?) {
// 实现广告图片缓存逻辑(可扩展为文件存储)
UserDefaults.standard.set(image?.pngData(), forKey: "cachedAdImage")
}
}
// MARK: - 广告页控制器实现
private class LaunchAdViewController: UIViewController {
private let countdownSeconds = 5
private var remainingSeconds = 5
private var timer: Timer?
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
startCountdown()
loadCachedAd()
}
private func setupUI() {
view.backgroundColor = .white
let skipButton = UIButton(type: .system)
skipButton.setTitle("跳过 \(countdownSeconds)s", for: .normal)
skipButton.addTarget(self, action: #selector(skipAd), for: .touchUpInside)
// 布局代码略...
}
@objc private func skipAd() {
timer?.invalidate()
switchToMainUI()
}
private func startCountdown() {
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { [weak self] _ in
guard let self = self else { return }
self.remainingSeconds -= 1
if self.remainingSeconds <= 0 {
self.switchToMainUI()
}
}
}
private func loadCachedAd() {
if let data = UserDefaults.standard.data(forKey: "cachedAdImage") {
let imageView = UIImageView(image: UIImage(data: data))
imageView.contentMode = .scaleAspectFill
view.addSubview(imageView)
// 布局代码略...
}
}
fileprivate func switchToMainUI() {
UIView.transition(with: view.window!,
duration: 0.3,
options: .transitionCrossDissolve,
animations: {
self.view.window?.switchToMainUI()
})
}
}
// MARK: - 登录状态管理(UserDefaults方案)
final class UserSessionManager {
static let shared = UserSessionManager()
private init() {}
func isLoggedIn() -> Bool {
return UserDefaults.standard.bool(forKey: "isLoggedIn")
}
}
// MARK: - 窗口切换扩展
extension UIWindow {
func switchToMainUI() {
rootViewController = CNLiveBaseTabBarViewController.init()
makeKeyAndVisible()
}
}