diff --git a/NotificationExtension/NotificationService.swift b/NotificationExtension/NotificationService.swift index be2c6e43a8..965c1f925d 100644 --- a/NotificationExtension/NotificationService.swift +++ b/NotificationExtension/NotificationService.swift @@ -63,6 +63,7 @@ class NotificationService: UNNotificationServiceExtension { mutableContent.body = notification.body mutableContent.userInfo["notificationID"] = notification.notificationID mutableContent.userInfo["accountID"] = accountID + mutableContent.targetContentIdentifier = accountID let task = Task { await updateNotificationContent(mutableContent, account: account, push: notification) diff --git a/Tusker/AppDelegate.swift b/Tusker/AppDelegate.swift index c24d1d9d05..f33ee29e64 100644 --- a/Tusker/AppDelegate.swift +++ b/Tusker/AppDelegate.swift @@ -295,7 +295,12 @@ extension AppDelegate: UNUserNotificationCenterDelegate { rootViewController.getNavigationController().pushViewController(vc, animated: false) } else { let activity = UserActivityManager.showNotificationActivity(id: notificationID, accountID: accountID) - UIApplication.shared.requestSceneSessionActivation(nil, userActivity: activity, options: nil) + if #available(iOS 17.0, *) { + let request = UISceneSessionActivationRequest(userActivity: activity) + UIApplication.shared.activateSceneSession(for: request) + } else { + UIApplication.shared.requestSceneSessionActivation(nil, userActivity: activity, options: nil) + } } completionHandler() } diff --git a/Tusker/Scenes/AuxiliarySceneDelegate.swift b/Tusker/Scenes/AuxiliarySceneDelegate.swift index 284516a7a6..2b48bde00e 100644 --- a/Tusker/Scenes/AuxiliarySceneDelegate.swift +++ b/Tusker/Scenes/AuxiliarySceneDelegate.swift @@ -32,8 +32,9 @@ class AuxiliarySceneDelegate: UIResponder, UIWindowSceneDelegate, TuskerSceneDel } launchActivity = activity + scene.activationConditions.canActivateForTargetContentIdentifierPredicate = NSPredicate(value: false) + let account: UserAccountInfo - if let activityAccount = UserActivityManager.getAccount(from: activity) { account = activityAccount } else if let mostRecent = UserAccountsManager.shared.getMostRecentAccount() { diff --git a/Tusker/Scenes/ComposeSceneDelegate.swift b/Tusker/Scenes/ComposeSceneDelegate.swift index bea636f180..b86d95e6cb 100644 --- a/Tusker/Scenes/ComposeSceneDelegate.swift +++ b/Tusker/Scenes/ComposeSceneDelegate.swift @@ -29,6 +29,8 @@ class ComposeSceneDelegate: UIResponder, UIWindowSceneDelegate, TuskerSceneDeleg return } + scene.activationConditions.canActivateForTargetContentIdentifierPredicate = NSPredicate(value: false) + let account: UserAccountInfo let controller: MastodonController let draft: Draft? diff --git a/Tusker/Scenes/MainSceneDelegate.swift b/Tusker/Scenes/MainSceneDelegate.swift index b83de24c07..3eddbb75eb 100644 --- a/Tusker/Scenes/MainSceneDelegate.swift +++ b/Tusker/Scenes/MainSceneDelegate.swift @@ -225,6 +225,8 @@ class MainSceneDelegate: UIResponder, UIWindowSceneDelegate, TuskerSceneDelegate window!.windowScene!.title = account.instanceURL.host! } + window!.windowScene!.activationConditions.prefersToActivateForTargetContentIdentifierPredicate = NSPredicate(format: "self == %@", account.id) + if let container = window?.rootViewController as? AccountSwitchingContainerViewController { let direction: AccountSwitchingContainerViewController.AnimationDirection if animated, diff --git a/Tusker/Shortcuts/NSUserActivity+Extensions.swift b/Tusker/Shortcuts/NSUserActivity+Extensions.swift index d1dcacc2a0..7a460a725a 100644 --- a/Tusker/Shortcuts/NSUserActivity+Extensions.swift +++ b/Tusker/Shortcuts/NSUserActivity+Extensions.swift @@ -39,6 +39,7 @@ extension NSUserActivity { self.userInfo = [ "accountID": accountID ] + self.targetContentIdentifier = accountID } @MainActor