| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- //
- // SceneDelegate.swift
- // Lanu
- //
- // Created by OneeChan on 2025/11/6.
- //
- import UIKit
- import Combine
- #if DEBUG
- import DoraemonKit
- #endif
- class SceneDelegate: UIResponder, UIWindowSceneDelegate {
- var window: UIWindow?
-
- func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
- handleUniversalLink(userActivity: userActivity)
- }
-
- func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
- // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
- // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
- // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
- guard let sceneWindow = (scene as? UIWindowScene) else { return }
-
- window = UIWindow(windowScene: sceneWindow)
- window?.backgroundColor = .white
- window?.overrideUserInterfaceStyle = .light
- window?.makeKeyAndVisible()
- window?.rootViewController = LNNavigationController(rootViewController: LNMainViewController())
-
- LNEventDeliver.addObserver(self)
-
- autoLoginIfNeed()
-
- #if DEBUG
- DoraemonManager.shareInstance().install()
- #endif
-
- if let userActivity = connectionOptions.userActivities.first {
- handleUniversalLink(userActivity: userActivity)
- }
- }
- func sceneDidDisconnect(_ scene: UIScene) {
- // Called as the scene is being released by the system.
- // This occurs shortly after the scene enters the background, or when its session is discarded.
- // Release any resources associated with this scene that can be re-created the next time the scene connects.
- // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
- }
- func sceneDidBecomeActive(_ scene: UIScene) {
- // Called when the scene has moved from an inactive state to an active state.
- // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
- }
- func sceneWillResignActive(_ scene: UIScene) {
- // Called when the scene will move from an active state to an inactive state.
- // This may occur due to temporary interruptions (ex. an incoming phone call).
- }
- func sceneWillEnterForeground(_ scene: UIScene) {
- // Called as the scene transitions from the background to the foreground.
- // Use this method to undo the changes made on entering the background.
- }
- func sceneDidEnterBackground(_ scene: UIScene) {
- // Called as the scene transitions from the foreground to the background.
- // Use this method to save data, release shared resources, and store enough scene-specific state information
- // to restore the scene back to its current state.
- }
-
- func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
- if let urlContext = URLContexts.first {
- let url = urlContext.url
- LNDeeplinkManager.shared.handleDeepLink(url)
- }
- }
- }
- extension SceneDelegate: LNNetworkMonitorNotify {
- func onNetworkStateChanged(state: LNNetworkState) {
- if state == .available {
- autoLoginIfNeed()
- } else {
- Log.d("network invailable")
- }
- }
- }
- extension SceneDelegate: LNAppMainEvent {
- func onAppLanguageChanged(newLanguage: LNAppLanguage) {
- let nav = LNNavigationController(rootViewController: LNMainViewController())
- window?.rootViewController = nav
- nav.viewControllers.append(LNSettingsViewController())
-
- LNProfileManager.shared.reportCurrentLanguage(code: newLanguage.languageCode) { _ in }
- }
- }
- extension SceneDelegate: LNAccountManagerNotify {
- func onUserLogout() {
- window?.rootViewController = LNNavigationController(rootViewController: LNMainViewController())
- }
-
- func onUserLogin() {
- guard let nav = window?.rootViewController as? UINavigationController else {
- return
- }
-
- if let index = nav.viewControllers.lastIndex(where: {
- !($0 is LNLoginPhoneInputViewController
- || $0 is LNLoginCaptchaInputViewController) }) {
- let viewControllers = Array(nav.viewControllers[0...index])
- nav.setViewControllers(viewControllers, animated: true)
- }
- }
- }
- extension SceneDelegate {
- private func autoLoginIfNeed() {
- guard LNAccountManager.shared.wasLogin,
- LNNetworkMonitor.curState == .available else { return }
-
- LNAccountManager.shared.loginByToken()
- }
-
- private func handleUniversalLink(userActivity: NSUserActivity) {
- // 验证是否为 Universal Link
- guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
- let url = userActivity.webpageURL else {
- return
- }
-
- LNDeeplinkManager.shared.handleDeepLink(url)
- }
- }
|