diff --git a/src/iOS/Avalonia.iOS/AvaloniaAppDelegate.cs b/src/iOS/Avalonia.iOS/AvaloniaAppDelegate.cs index 70e35e3973..ec3cca685e 100644 --- a/src/iOS/Avalonia.iOS/AvaloniaAppDelegate.cs +++ b/src/iOS/Avalonia.iOS/AvaloniaAppDelegate.cs @@ -12,7 +12,12 @@ namespace Avalonia.iOS event EventHandler Deactivated; } - public class AvaloniaAppDelegate : UIResponder, IUIApplicationDelegate, IAvaloniaAppDelegate + internal interface IAvaloniaAppInternalDelegate + { + bool ContinueUserActivity(NSUserActivity userActivity); + } + + public class AvaloniaAppDelegate : UIResponder, IUIApplicationDelegate, IAvaloniaAppDelegate, IAvaloniaAppInternalDelegate where TApp : Application, new() { private EventHandler? _onActivated, _onDeactivated; @@ -104,7 +109,13 @@ namespace Avalonia.iOS [Export("application:continueUserActivity:restorationHandler:")] public bool ContinueUserActivity(UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler) { - if (userActivity.ActivityType == NSUserActivityType.BrowsingWeb && Uri.TryCreate(userActivity.WebPageUrl?.ToString(), UriKind.RelativeOrAbsolute, out var uri)) + return ((IAvaloniaAppInternalDelegate)this).ContinueUserActivity(userActivity); + } + + bool IAvaloniaAppInternalDelegate.ContinueUserActivity(NSUserActivity userActivity) + { + if (userActivity.ActivityType == NSUserActivityType.BrowsingWeb && + Uri.TryCreate(userActivity.WebPageUrl?.ToString(), UriKind.RelativeOrAbsolute, out var uri)) { // Activation using a univeral link or web browser-to-native app Handoff _onActivated?.Invoke(this, new ProtocolActivatedEventArgs(uri)); diff --git a/src/iOS/Avalonia.iOS/AvaloniaSceneDelegate.cs b/src/iOS/Avalonia.iOS/AvaloniaSceneDelegate.cs index e4bbb4843e..b7b285a1c3 100644 --- a/src/iOS/Avalonia.iOS/AvaloniaSceneDelegate.cs +++ b/src/iOS/Avalonia.iOS/AvaloniaSceneDelegate.cs @@ -24,6 +24,13 @@ internal sealed class AvaloniaSceneDelegate : UIResponder, IUIWindowSceneDelegat Window.MakeKeyAndVisible(); } + [Export("scene:continueUserActivity:")] + public void ContinueUserActivity(UIScene scene, NSUserActivity userActivity) + { + var appDelegate = UIApplication.SharedApplication.Delegate as IAvaloniaAppInternalDelegate; + appDelegate?.ContinueUserActivity(userActivity); + } + internal static void InitWindow(UIWindow window, SingleViewLifetime lifetime) { var view = new AvaloniaView();