没有完全理解UIApplication.shared.canOpenUrl

时间:2018-04-04 08:50:55

标签: ios swift url-scheme uiapplication

任何想法如何在

中实现
appUrl = "http://dum:site2015@jobz.store.com/
if UIApplication.shared.canOpenURL(appUrl!){
        if #available(iOS 10.0, *) {
            UIApplication.shared.open(appUrl!)
        }

并且在网址方案中我有jobz-com

事情就是这样,虽然我没有安装应用程序...而是在safari中打开网址...但是为什么不会因为我没有安装应用程序而得到错误?

2 个答案:

答案 0 :(得分:1)

此功能不会检查已安装的应用。它只是告诉你它是否可以在safari中或通过应用程序打开该URL。 有效的URL将始终返回true,因为系统实际上可以在某处打开它。

根据Apple自己的文档

  

URL(统一资源定位符)。在运行时,系统会测试URL的方案,以确定是否有已安装的应用程序已注册以处理该方案。可以注册多个应用程序来处理方案。   https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl

Safari已注册处理任何有效的URL,因此如果使用该方案的应用程序不存在,则注册为阅读它的下一个应用程序是safari。

我认为如果安装了该应用,您只能打开一个开放的API。

始终确保您的网址以您需要的方案开头,而不是HTTP / S. my-app://myurl/parameters

答案 1 :(得分:0)

请勿使用http://https://打开应用。这些是针对网站的。使用这样的app url方案:

jobz-com://

修改

提问者试图实现的另一种方法是使用Universal Link

以下是Apple's Official doc about Universal Links,您可以按照this medium article说明:

  

与URI方案进行深层链接的变通方法涉及到   使用传统的http://链接启动Web浏览器。这个链接   包含JavaScript重定向到自定义URI方案,即   由Web浏览器执行以启动应用程序。如果重定向尝试   失败,因为没有安装应用程序,JavaScript然后采取   用户访问App Store或Play商店。

     而不是开放   Safari首先点击链接时,iOS会检查是否为Universal   已注册链接(AASA(apple-app-site-association)文件   应该在包含应用程序的包ID的域中   对于与之关联的域,应用程序应该打开的路径)   链接,然后检查是否安装了相应的应用程序。如果应用程序是   目前已安装,它将被打开。如果不是,Safari将会打开   并且http(s)链接将加载。