我的应用在不同的屏幕中使用:
[[UIApplication sharedApplication] openURL:url];
为了打开从我的Web服务收到的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,因此,它工作得非常好,但我觉得这是一个糟糕的解决方案。
您的解决方案似乎合理为什么那么可怕?
可能你可以实现更好看的解决方案,比如独立的类LinkHandler
。该类可以识别您的应用程序是否可以处理链接(而不是它将使用App的处理)。否则,类将通过[UIApplication openURL:]
将此链接传递给iOS处理。
许多应用程序都在这样做,想象一下Google+或Facebook iOS应用程序如何处理这些社交网络中发布的链接。