我的应用在不同的屏幕中使用:
[[UIApplication sharedApplication] openURL: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];
请注意,我的appdelegate应用程序:continueUserActivity:restorationHandler:将在我的应用程序中转发给openURL任何没有特定屏幕的URL,因此,它工作得很好,但我觉得这是一个糟糕的解决方案。
答案 0 :(得分:3)
您的解决方案似乎合理。为什么那么可怕?
可能你可以实现更好看的解决方案,比如独立的类LinkHandler
。该类可以识别您的应用程序是否可以处理链接(而不是它将使用应用程序的处理)。否则,类会将此链接传递给使用[UIApplication openURL:]
的iOS处理。
许多应用这样做,想象一下Google+或Facebook iOS应用程序如何处理这些社交网络中发布的链接。
答案 1 :(得分:2)
这是里卡多自己的解决方案的快速4.2版本
let userActivity = NSUserActivity(activityType: NSUserActivityTypeBrowsingWeb)
userActivity.webpageURL = url;
UIApplication.shared.delegate?.application?(UIApplication.shared, continue: userActivity, restorationHandler: { _ in })