// // AppDelegate.swift // suixinkan import IQKeyboardManagerSwift import IQKeyboardToolbarManager import UIKit import UserNotifications @main class AppDelegate: UIResponder, UIApplicationDelegate { /// 兼容部分 Objective-C SDK 通过 UIApplicationDelegate.window 访问主窗口的场景。 @objc var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { configureKeyboardManager() UmengBootstrap.configureIfNeeded() WeChatManager.shared.registerIfNeeded() if AppStore.shared.session.privacyAgreementAccepted, !AppStore.shared.session.token.isEmpty { AMapBootstrap.configureIfNeeded() } PushNotificationManager.shared.initializeIfPrivacyAccepted(launchOptions: launchOptions) return true } /// APNs 注册成功后将 Device Token 交给极光。 func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data ) { PushNotificationManager.shared.handleDeviceToken(deviceToken) } /// APNs 注册失败不阻断应用启动,仅交由推送管理器记录。 func application( _ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error ) { PushNotificationManager.shared.handleRegistrationError(error) } /// 处理后台静默通知并完成极光到达统计。 func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void ) { PushNotificationManager.shared.handleRemoteNotification(userInfo) completionHandler(.newData) } // 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) { // 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. } private func configureKeyboardManager() { IQKeyboardManager.shared.isEnabled = true IQKeyboardManager.shared.keyboardDistance = 12 IQKeyboardManager.shared.resignOnTouchOutside = true IQKeyboardToolbarManager.shared.isEnabled = true IQKeyboardToolbarManager.shared.toolbarConfiguration.useTextInputViewTintColor = true IQKeyboardToolbarManager.shared.toolbarConfiguration.previousNextDisplayMode = .alwaysShow IQKeyboardToolbarManager.shared.playInputClicks = false } }