import SwiftUI import UIKit import UserNotifications class AppDelegate: NSObject, UIApplicationDelegate, ObservableObject, UNUserNotificationCenterDelegate { func application( _ application: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { application.registerForRemoteNotifications() return true } func application( _: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void ) { debug(.remoteControl, "Received notification") do { let jsonData = try JSONSerialization.data(withJSONObject: userInfo) let pushMessage = try JSONDecoder().decode(PushMessage.self, from: jsonData) Task { await TrioRemoteControl.shared.handleRemoteNotification(pushMessage: pushMessage) completionHandler(.newData) } } catch { debug(.remoteControl, "Error decoding push message: \(error.localizedDescription)") completionHandler(.failed) } } func application( _: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data ) { let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) } let token = tokenParts.joined() Task { await TrioRemoteControl.shared.handleAPNSChanges(deviceToken: token) } } func application( _: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error ) { debug(.remoteControl, "Failed to register for remote notifications: \(error.localizedDescription)") } }