【问题标题】:canOpenURL return true and app is installed but app is not openingcanOpenURL 返回 true 并且应用程序已安装但应用程序未打开
【发布时间】:2020-03-24 09:16:04
【问题描述】:

当我使用canOpenURL打开通用链接时,(安装了目标应用程序)

canOpenURL 返回 true,但应用未打开(LSApplicationQueriesSchemes 未注册)

但是如果我使用open(_ url, options) 应用正在打开

如果我负责不注册LSApplicationQueriesSchemes,我如何注册Universal 到LSApplicationQueriesSchemes 的链接? (https://www.aaa.com)

<key>LSApplicationQueriesSchemes</key>
<array>
<string>https://www.aaa.com</string>
</array>

喜欢这样吗?

【问题讨论】:

  • 您是aaa.com 的所有者吗?
  • @CZ54 不,我不是。但是客户给了我们通用链接
  • 要使通用墨水工作,您需要在服务器上放置一个文件。如果您不是所有者,它将无法正常工作
  • 但是 open(_:, options) 可以打开那个链接
  • 当然,您可以打开任何格式正确的 url。并不意味着您的应用会打开它。这意味着 iOS 知道打开它的方法(另一个应用程序、Safari 等)

标签: ios swift ios-universal-links custom-scheme-url


【解决方案1】:

如果 AAA 是您尝试打开的应用程序,还有另一种方法可以从您的应用程序内部启动它。您需要获取目标应用使用的CFBundleURLSchemes
对于 AAA,它的“aaamobile” 对于 AAA 汽车俱乐部,它的“aaamobileace”

然后您需要将 url 方案添加到您的 plist 中:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>aaamobile</string>
</array>

然后在您的代码中,您可以检查应用程序是否已安装并启动应用程序或将用户带到网站:

    guard let url = URL(string: "aaamobile://") else { return }
    if UIApplication.shared.canOpenURL(url) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    } else {
        UIApplication.shared.open(URL(string: "https://www.aaa.com")!, options: [:], completionHandler: nil)
    }

【讨论】:

  • 我们如何找到这些应用使用的CFBundleURLSchemes
  • @lavta3 我有一个越狱设备,可用于测试目的,因此如果存在这些值,提取这些值非常简单。如果您没有 JB 设备,您仍然可以通过下载 .ipa 文件并提取内容来找到相同的信息。我不想链接到任何教程,因为它们可能会改变,但简单的谷歌搜索应该会产生正确的结果。
猜你喜欢
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多