Ric*_*rdo 7 uiapplication uiapplicationdelegate ios ios-universal-links
我的应用程序在不同的屏幕中使用:
[[UIApplication sharedApplication] openURL:url];
Run Code Online (Sandbox Code Playgroud)
为了打开从我的网络服务收到的 URL。有时,这些 URL 与我的项目无关,因此将它们打开到 Safari 是可以的。其他的,这些 URL 属于我自己的,比如产品详细信息。这些可以由我的应用程序使用通用链接打开并转到正确的屏幕,但这并没有发生。
阅读苹果文档我看到了这个:
重要的是要了解,如果您的应用程序使用 openURL: 打开指向您网站的通用链接,则该链接不会在您的应用程序中打开。在这种情况下,iOS 会识别出呼叫源自您的应用,因此不应将其作为通用链接由您的应用处理。
这种行为让我很困惑。如何使用 openURL 尝试首先在我的应用程序中处理该 URL,而不是直接转到 Safari?
我找到了一个快速/肮脏的解决方法。删除 openURL 并在我的应用每次使用 openURL 时使用它:
NSUserActivity* userActivity = [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb];
userActivity.webpageURL = url;
[[UIApplication sharedApplication].delegate application:[UIApplication sharedApplication] continueUserActivity:userActivity restorationHandler:nil];
Run Code Online (Sandbox Code Playgroud)
请注意,我的 appdelegate application:continueUserActivity:restorationHandler: 会将我的应用程序中没有特定屏幕的任何 URL 转发到 openURL,因此,它工作得非常好,但我觉得这是一个糟糕的解决方案。
你的解决方案看起来很合理。为什么这么可怕?
也许您可以实现更美观的解决方案,例如独立类LinkHandler。该类可以确定您的应用程序是否可以处理链接(而不是使用应用程序的处理)。否则类会将此链接传递给 iOS 处理[UIApplication openURL:]。
很多应用程序都这样做,想象一下 Google+ 或 Facebook iOS 应用程序将如何处理在这些社交网络中发布的链接。