Fableon/Fableon/App/SceneDelegate.swift
湖北秦九 2d30f62fb6 Merge branch 'AD'
# Conflicts:
#	Fableon/App/SceneDelegate.swift
2026-02-05 09:54:34 +08:00

188 lines
6.2 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// SceneDelegate.swift
// Fableon
//
// Created by on 2025/9/15.
//
import UIKit
import YYText
import MJRefresh
import Kingfisher
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
private var onLineTimer: Timer?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
NotificationCenter.default.addObserver(self, selector: #selector(networkStatusDidChangeNotification), name: FANetworkMonitor.networkStatusDidChangeNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(languageDidChange), name: FALanguageManager.languageDidChange, object: nil)
FATool.sceneDelegate = self
FATool.windowScene = windowScene
window = UIWindow(windowScene: windowScene)
window?.makeKeyAndVisible()
startApp()
onLineTimer = Timer.scheduledTimer(timeInterval: 60 * 10, target: YYTextWeakProxy(target: self), selector: #selector(handleOnLine), userInfo: nil, repeats: true)
if let webpageURL = connectionOptions.userActivities.first?.webpageURL {
self.handleOpenAppMessage(webpageURL: webpageURL)
} else if let url = connectionOptions.urlContexts.first?.url {
self.handleOpenAppMessage(webpageURL: url)
}
requestFirebase()
requestApns()
//广
FAOpenAdManager.manager.showAdIfAvailable()
//广
FARewardedAdManager.manager.load()
}
func sceneDidDisconnect(_ scene: UIScene) {
}
func sceneDidBecomeActive(_ scene: UIScene) {
FATool.requestIDFAAuthorization(nil)
self.handleOnLine()
FAStatAPI.requestEnterApp()
self.setBadgeCount(0)
}
func sceneWillResignActive(_ scene: UIScene) {
FAStatAPI.requestLeaveApp()
}
func sceneWillEnterForeground(_ scene: UIScene) {
FAStatAPI.uploadApnsAuthorizationStatus()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.handleOpenAppMessage(webpageURL: nil)
}
}
func sceneDidEnterBackground(_ scene: UIScene) {
FAAdjustStateManager.manager.allowOpenMessage = true
if #available(iOS 16.1, *) {
startWidgeLiveActivity()
}
}
}
extension SceneDelegate {
private func startApp() {
let languageManager = FALanguageManager.manager
if languageManager.languageDataLanguageKey != languageManager.currentLanguageKey {
let vc = FATool.getLanuchViewController()
window?.rootViewController = vc
// window?.makeKeyAndVisible()
languageManager.updateLanguageData { [weak self] finish in
guard let self = self else { return }
self.setRootVC()
}
} else {
languageManager.updateLanguageData(completer: nil)
setRootVC()
}
}
private func setRootVC() {
///
let hasOpenApp = UserDefaults.standard.object(forKey: kFAHasBeenOpenedAPPDefaultsKey) as? Bool
if hasOpenApp != true {
//广
FAOpenAdManager.manager.openAdVC.view.isHidden = true
let vc = FAAppStartViewController()
vc.openAppBlock = { [weak self] in
guard let self = self else { return }
UserDefaults.standard.set(true, forKey: kFAHasBeenOpenedAPPDefaultsKey)
self.setTabBarController()
self.retryHandleOpenAppMessage()
}
window?.rootViewController = vc
// window?.makeKeyAndVisible()
} else {
self.setTabBarController()
self.retryHandleOpenAppMessage()
}
}
private func setTabBarController() {
FAAdjustStateManager.manager.isOpenApp = true
window?.rootViewController = FATabBarController()
// window?.addSubview(FAOpenAdManager.manager.openAdVC.view)
}
}
extension SceneDelegate {
@objc private func handleOnLine() {
FAStatAPI.requestStatOnLine()
}
@objc private func networkStatusDidChangeNotification() {
let localizedData = FALanguageManager.manager.languageData ?? [:]
if FANetworkMonitor.manager.isReachable == true {
handleOnLine()
self.retryHandleOpenAppMessage()
FAIapManager.manager.preloadingProducts()
///
if localizedData.isEmpty {
self.startApp()
}
// FATool.requestIDFAAuthorization(nil)
}
}
@objc private func languageDidChange() {
MJRefreshConfig.default.languageCode = FALanguageManager.manager.mjLanguageKey
setTabBarController()
}
@available(iOS 16.1, *)
private func startWidgeLiveActivity() {
guard let model = FATool.widgetLiveActivityModel, let imageUrl = URL(string: model.image_url ?? "") else { return }
KingfisherManager.shared.retrieveImage(with: imageUrl) { result in
switch result {
case .success(let imageResult):
let image = imageResult.image
guard let data = image.compressImageSize(toByte: 9 * 1024) else { return }
guard let filePath = FAActivityManager.coverFileUrl else { return }
do {
try data.write(to: filePath, options: .atomic)
FAActivityManager.liveActivity(with: model.name ?? "",
videoId: model.short_play_id ?? "",
videoEpisode: model.current_episode ?? "")
} catch {
}
default:
break
}
}
}
}