首页 文章

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

提问于
浏览
2

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

[[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,因此,它工作得非常好,但我觉得这是一个糟糕的解决方案 .

1 回答

  • 3

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

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

    许多应用程序正在这样做,想象谷歌或Facebook iOS应用程序如何处理这些社交网络中发布的链接 .

相关问题