188 lines
6.2 KiB
Swift
188 lines
6.2 KiB
Swift
//
|
||
// 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
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
}
|