LaunchAdManager.swift 3.55 KB
//
//  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()
    }
}