当我在自己的应用程序中调用openURL时,如何使用通用链接?

问题描述 投票:2回答:1

我的应用在不同的屏幕中使用:

[[UIApplication sharedApplication] openURL:url];

为了打开从我的Web服务收到的URL。有时,这些URL与我的项目无关,因此打开它们到Safari是可以的。其他人,这些URL属于我自己的,就像产品细节一样。那些可以通过我的应用程序使用通用链接打开并转到正确的屏幕,但这不会发生。

阅读苹果文档我看到了这个:

重要的是要了解如果您的应用使用openURL:打开指向您网站的通用链接,则该链接无法在您的应用中打开。在这种情况下,iOS会识别出呼叫来自您的应用,因此您的应用不应将其作为通用链接处理。

https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html

这种行为让我很困惑。如何使用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,因此,它工作得非常好,但我觉得这是一个糟糕的解决方案。

ios uiapplicationdelegate uiapplication ios-universal-links
1个回答
3
投票

您的解决方案似乎合理为什么那么可怕?

可能你可以实现更好看的解决方案,比如独立的类LinkHandler。该类可以识别您的应用程序是否可以处理链接(而不是它将使用App的处理)。否则,类将通过[UIApplication openURL:]将此链接传递给iOS处理。

许多应用程序都在这样做,想象一下Google+或Facebook iOS应用程序如何处理这些社交网络中发布的链接。

© www.soinside.com 2019 - 2024. All rights reserved.