112 lines
3.5 KiB
Swift
112 lines
3.5 KiB
Swift
//
|
|
// SceneDelegate.swift
|
|
// suixinkan
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
|
|
|
var window: UIWindow?
|
|
|
|
func scene(
|
|
_ scene: UIScene,
|
|
willConnectTo session: UISceneSession,
|
|
options connectionOptions: UIScene.ConnectionOptions
|
|
) {
|
|
guard let windowScene = scene as? UIWindowScene else { return }
|
|
|
|
AppNavigationBarAppearance.applyGlobalAppearance()
|
|
|
|
let window = UIWindow(windowScene: windowScene)
|
|
window.rootViewController = AppRouter.makeRootViewController()
|
|
window.makeKeyAndVisible()
|
|
self.window = window
|
|
(UIApplication.shared.delegate as? AppDelegate)?.window = window
|
|
|
|
PushNotificationManager.shared.attach(window: window)
|
|
|
|
registerNotifications()
|
|
|
|
if AppStore.shared.session.isLoggedIn {
|
|
DispatchQueue.main.async {
|
|
PushNotificationManager.shared.handleLoginCompleted()
|
|
}
|
|
}
|
|
if let response = connectionOptions.notificationResponse {
|
|
PushNotificationManager.shared.handleNotificationResponse(response)
|
|
}
|
|
}
|
|
|
|
func sceneDidDisconnect(_ scene: UIScene) {
|
|
NotificationCenter.default.removeObserver(self)
|
|
if (UIApplication.shared.delegate as? AppDelegate)?.window === window {
|
|
(UIApplication.shared.delegate as? AppDelegate)?.window = nil
|
|
}
|
|
}
|
|
|
|
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
|
|
guard let url = URLContexts.first?.url else { return }
|
|
_ = WeChatManager.shared.handleOpenURL(url)
|
|
}
|
|
|
|
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
|
|
_ = WeChatManager.shared.handleContinueUserActivity(userActivity)
|
|
}
|
|
|
|
func sceneDidBecomeActive(_ scene: UIScene) {
|
|
PushNotificationManager.shared.retryPendingRegistrationUpload()
|
|
}
|
|
|
|
private func registerNotifications() {
|
|
NotificationCenter.default.addObserver(
|
|
self,
|
|
selector: #selector(handleSessionDidExpire),
|
|
name: NotificationName.sessionDidExpire,
|
|
object: nil
|
|
)
|
|
NotificationCenter.default.addObserver(
|
|
self,
|
|
selector: #selector(handleUserDidLogout),
|
|
name: NotificationName.userDidLogout,
|
|
object: nil
|
|
)
|
|
NotificationCenter.default.addObserver(
|
|
self,
|
|
selector: #selector(handleUserDidLogin),
|
|
name: NotificationName.userDidLogin,
|
|
object: nil
|
|
)
|
|
NotificationCenter.default.addObserver(
|
|
self,
|
|
selector: #selector(handleAccountDidSwitch),
|
|
name: NotificationName.accountDidSwitch,
|
|
object: nil
|
|
)
|
|
}
|
|
|
|
@objc private func handleSessionDidExpire() {
|
|
PushNotificationManager.shared.handleLogout()
|
|
AppStore.shared.logout()
|
|
AppRouter.setRoot(.login, on: window)
|
|
}
|
|
|
|
@objc private func handleUserDidLogout() {
|
|
PushNotificationManager.shared.handleLogout()
|
|
AppStore.shared.logout()
|
|
AppRouter.setRoot(.login, on: window)
|
|
}
|
|
|
|
@objc private func handleUserDidLogin() {
|
|
AppRouter.setRoot(.mainTab, on: window)
|
|
DispatchQueue.main.async {
|
|
PushNotificationManager.shared.handleLoginCompleted()
|
|
PushNotificationManager.shared.routePendingNotificationIfPossible()
|
|
}
|
|
}
|
|
|
|
@objc private func handleAccountDidSwitch() {
|
|
PushNotificationManager.shared.handleAccountSwitched()
|
|
}
|
|
}
|