【问题标题】:Not fully understanding UIApplication.shared.canOpenUrl不完全理解 UIApplication.shared.canOpenUrl
【发布时间】:2018-04-04 08:50:55
【问题描述】:

任何想法这是如何实现的

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

在 url 方案中我有 jobz-com

问题是虽然我没有安装应用程序,但它正在变得真实......而是在 safari 中打开 url......但是为什么没有因为我没有安装应用程序而变得虚假?

【问题讨论】:

  • 不要将 http 用于应用 url 方案
  • 用于通过 URL 启动系统应用的 URL 方案。您不应该将它与 https 一起使用
  • @ArnabHore 基本上我只是在这里硬编码了 url ......但在正常情况下,url 来自 api ......如果我安装了应用程序,我需要打开......否则打开它Safari 中的链接...但它在 canOpenUrl 中总是正确的
  • 是的,api会发送jobz-com://这种格式的url scheme。然后你用canOpenURL检查,如果失败则打开任何网站链接...其他方法是使用Universal links

标签: ios swift url-scheme uiapplication


【解决方案1】:

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

根据苹果自己的文档

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

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

我不认为有一个开放的 API 可以让您只在安装了应用程序的情况下打开 URL。

并始终确保您的 URL 以您需要的方案而不是 HTTP/S 开头。 my-app://myurl/parameters

【讨论】:

  • 好的..所以基本上是什么方法,因为带有 h​​ttp /https 的 url 来自 api ..如果它已安装或在 safari 中打开,我基本上需要打开应用程序
  • 如果您安装了应用程序并注册了应用程序以侦听您的方案,那么应用程序将始终打开。如果未安装该应用程序,则下一个最佳操作是打开 safari。我建议您阅读有关通用链接的更多信息:raywenderlich.com/128948/universal-links-make-connection
  • 使用通用链接,来自特定域的任何 URL 将始终在应用程序中打开,而不是在 safari 中打开。您甚至可以指定域中的哪些 URL 应在应用程序上打开或不打开。所以 www.yoursite.com/register 可以打开您的应用,而 www.yousite.com/forgotPassword 可以在网络上打开
【解决方案2】:

请勿使用http://https:// 打开应用程序。这些是用于网站的。使用这样的应用程序 url 方案:

jobz-com://

编辑

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

这里是Apple's Official doc about Universal Links,你可以关注this medium article,上面写着:

使用 URI 方案进行深度链接的解决方法包括 使用传统的 http:// 链接启动 Web 浏览器。这个链接 包含指向自定义 URI 方案的 JavaScript 重定向,即 由网络浏览器执行以启动应用程序。如果重定向尝试 由于未安装应用程序而失败,然后 JavaScript 采用 用户访问 App Store 或 Play Store。

而不是敞开心扉 单击链接时首先使用 Safari,iOS 将检查是否为 Universal 链接已注册(一个 AASA (apple-app-site-association) 文件 应该在包含应用程序包 ID 的域中 以及应用程序应打开的路径)用于与 链接,然后检查是否安装了相应的应用程序。如果应用程序是 当前已安装,它将被打开。如果不是,Safari 将打开 并且 http(s) 链接将加载。

【讨论】:

    猜你喜欢
    • 2018-05-13
    • 2012-04-29
    • 1970-01-01
    • 2021-12-19
    • 2023-01-26
    • 1970-01-01
    • 2014-06-19
    • 2017-07-28
    • 1970-01-01
    相关资源
    最近更新 更多