Xamarin.iOS-深度链接不';应用程序关闭时无法工作

Xamarin.iOS-深度链接不';应用程序关闭时无法工作,xamarin.ios,deep-linking,Xamarin.ios,Deep Linking,我不明白,当应用程序在后台时,deeplink工作正常,但当它关闭时,应用程序只是启动,什么也没有发生。。 此外,由于应用程序一开始是关闭的,我无法调试它(至少我不知道如何调试) 你知道为什么它不起作用吗 最好的 Max所以过了一会儿我终于发现了 实际上,当应用程序还没有启动时,OpenUrl不会被调用这一事实是非常符合逻辑的 示例:my_app://query?id=azerty 应用程序已在后台#启动 OpenUrl(UIApplication应用程序、NSUrl url、NSDicti

我不明白,当应用程序在后台时,deeplink工作正常,但当它关闭时,应用程序只是启动,什么也没有发生。。 此外,由于应用程序一开始是关闭的,我无法调试它(至少我不知道如何调试)

你知道为什么它不起作用吗

最好的


Max

所以过了一会儿我终于发现了

实际上,当应用程序还没有启动时,OpenUrl不会被调用这一事实是非常符合逻辑的

示例:
my_app://query?id=azerty

  • 应用程序已在后台#启动

    • OpenUrl(UIApplication应用程序、NSUrl url、NSDictionary选项)
      将被调用,在
      url
      中,您可以找到启动应用程序的链接
  • 应用程序未在后台运行#未启动

    • FinishedLaunching(UIApplication应用程序,NSDictionary launchOptions)
      实际上会在launchOptions中包含url参数。然后,您要查找的键就是UIApplicationLaunchOptionsURLKey
代码示例:

public class AppDelegate : UIApplicationDelegate
{
    public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
    {
        /* ... */

        if (launchOptions != null && launchOptions.Count > 0)
        {
            try
            {
                var url = launchOptions["UIApplicationLaunchOptionsURLKey"] as NSUrl;
                var result = AppDeepLinksEntry(url);
            }
            catch (Exception ex) { /* ... */ }
        }

        /* ... */
    }

    #region OpenUrl

    public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
    {
        return AppDeepLinksEntry(url);
    }

    public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation)
    {
        return AppDeepLinksEntry(url);
    }

    #endregion OpenUrl

    private bool AppDeepLinksEntry(NSUrl url)
    {
        Debug.WriteLine($"OpenUrl Url : {url}");
        Debug.WriteLine($"OpenUrl Url Query: {url.Query}");
        Debug.WriteLine($"OpenUrl Url Host: {url.Host}");
        Debug.WriteLine($"OpenUrl Url Path: {url.Path}");

        return true;
    }
}
我希望上面的解释和代码示例能够帮助您理解和/或解决您未来的问题


Max

您是否使用Url方案或第三方库来实现深度链接<代码>OpenUrl(UIApplication应用程序、NSUrl url、NSDictionary选项)无论应用程序处于后台还是终止状态,都将始终启动。您可以处理此事件来进行配置。我正在使用您刚才提供的OpenUrl。。问题是,由于我无法调试,我不知道为什么它似乎不工作..你确定当应用程序关闭时它在你这边工作吗?(甚至不在后台运行)是的。您可以尝试使用NSUserDefaults显示警报或存储字符串,以确认是否调用此事件。在本次活动中,请尝试共享您的代码,这有助于我们了解您想要达到的效果。共享代码很困难,因为应用程序已经很复杂,而且由于保密性。。。我知道这会让事情变得复杂。。你知道什么时候会调用OpenUrl吗?像是在完成发射之前还是之后?我并不完全同意这一点。我们可以从
launchOptions
获取url,因为当应用程序终止时,如果我们打开应用程序,将调用事件
FinishedLaunching
。但是正如我在上面所说的,
OpenUrl()
总是会被触发,从中我们可以知道,如果URL在你的应用程序挂起或在后台运行时到达,系统会在调用此方法之前将你的应用程序移到前台。也许你是对的,但我确实按照你说的做了。。当应用程序关闭时,我似乎没有通过
OpenUrl
。此外,我试图在AppDelegate中编辑调试变量的值,但仍然没有任何结果。。也许只是我们的应用程序创造了这种行为?