| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- //
- // AppDelegate.swift
- // Lanu
- //
- // Created by OneeChan on 2025/11/6.
- //
- import UIKit
- import CocoaLumberjackSwift
- import Firebase
- import GoogleSignIn
- @main
- class AppDelegate: UIResponder, UIApplicationDelegate {
- func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
- // Override point for customization after application launch.
-
- setupLogger()
- setupFirebase()
- setupAdjust()
- LNNetworkMonitor.startMonitoring()
-
- _ = LNProfileManager.shared
- _ = LNIMManager.shared
- _ = LNGameMateManager.shared
- _ = LNPurchaseManager.shared
- _ = RechargeManager.shared
- _ = LNLocationManager.shared
- _ = LNRelationManager.shared
- _ = LNDeeplinkManager.shared
- _ = LNKeyboardManager.shared
- _ = LNConfigManager.shared
- _ = LNOrderManager.shared
-
- LNEventDeliver.notifyAppLaunchFinished()
-
- if let url = launchOptions?[.url] as? URL {
- LNDeeplinkManager.shared.handleDeepLink(url)
- }
- reportLanguage()
- requestNotificationPermissions()
-
- return true
- }
- // MARK: UISceneSession Lifecycle
- func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
- // Called when a new scene session is being created.
- // Use this method to select a configuration to create the new scene with.
- return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
- }
- func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
- // Called when the user discards a scene session.
- // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
- // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
- }
- }
- extension AppDelegate {
- @objc func businessID() -> Int32 {
- LNIMManager.shared.offlinePushAppId
- }
-
- @objc func onRemoteNotificationReceived(_ notice: String?) -> Bool {
- false
- }
- }
- extension AppDelegate {
- private func reportLanguage() {
- LNProfileManager.shared.reportCurrentLanguage(code: LNAppConfig.shared.curLang.languageCode) { _ in }
- }
- }
- extension AppDelegate {
- private func setupFirebase() {
- #if DEBUG
- let plistName = "GoogleService-Info-Debug"
- #else
- let plistName = "GoogleService-Info-Release"
- #endif
- let plistPath = Bundle.main.path(forResource: plistName, ofType: "plist")!
- let options = FirebaseOptions(contentsOfFile: plistPath)
- FirebaseApp.configure(options: options!)
- }
-
- private func setupLogger() {
- #if DEBUG // 只在 Debug 模式打印到终端
- let logger = DDOSLogger.sharedInstance
- logger.logFormatter = LNLoggerFormater()
- DDLog.add(logger)
- #endif
-
- let fileLogger = DDFileLogger()
- fileLogger.logFormatter = LNLoggerFormater()
- fileLogger.rollingFrequency = 24 * 60 * 60 // 1 天轮转
- fileLogger.logFileManager.maximumNumberOfLogFiles = 7 // 最多保存 7 个文件
- fileLogger.maximumFileSize = 5 * 1024 * 1024 // 5M 最大限制
- DDLog.add(fileLogger)
-
- Log.i("\n\n\n\n==================== App Start ====================")
- Log.i("version: \(curAppVersion)")
- Log.i("buildVersion: \(curBuildVersion)")
- Log.i("OS: \(curSystemVersion)")
- Log.i("Env: \(LNAppConfig.shared.curEnv.text)")
- Log.i("==================== \(curTime.formattedFullDateWithTime()) ====================")
- }
-
- private func setupAdjust() {
- let token = "fbze46mdkxds"
- let env: String
- let logLevel: ADJLogLevel
- if LNAppConfig.shared.curEnv == .test {
- env = ADJEnvironmentSandbox
- logLevel = .verbose
- } else {
- env = ADJEnvironmentProduction
- logLevel = .suppress
- }
- let config = ADJConfig(appToken: token, environment: env)
- config?.logLevel = logLevel
- config?.externalDeviceId = curDeviceId
- config?.enableCostDataInAttribution()
- // config?.delegate = self
- Adjust.initSdk(config)
- }
-
- private func requestNotificationPermissions() {
- // 请求通知权限(可根据需求调整,如添加 sound/badge 等)
- LNPermissionHelper.requestNotificationAuthorization(options: [.alert, .sound, .badge]) { granted, error in
- if let error = error {
- Log.e("请求推送权限失败: \(error.localizedDescription)")
- return
- }
- if granted {
- Log.i("用户已授予推送权限")
- // 权限获取成功后,注册远程推送
- UIApplication.shared.registerForRemoteNotifications()
- } else {
- Log.i("用户拒绝了推送权限")
- }
- }
- }
- }
|