【问题标题】:Difference between openURL & canOpenURLopenURL 和 canOpenURL 的区别
【发布时间】:2019-09-04 12:30:00
【问题描述】:

我需要在 Safari 浏览器中打开一个链接,但我有疑问,我应该使用哪种方法? openURL/opencanOpenURL。 谁能帮我解释这两个功能之间的实际区别?

 if #available(iOS 10.0, *) {
       UIApplication.shared.open(URL(string: urlStr)!, options: [:], completionHandler: nil)
       UIApplication.shared.canOpenURL(URL(string: urlStr)!)

    } else {
        UIApplication.shared.openURL(URL(string: urlStr)!) //introduced: 2.0, deprecated: 10.0,

        UIApplication.shared.canOpenURL(URL(string: urlStr)!) // available(iOS 3.0, *)
    }

【问题讨论】:

  • 你用的是哪个版本的Xcode和swift?
  • xcode 9.2 (swift 4)

标签: ios swift openurl


【解决方案1】:

canOpenURL(_:)

返回一个布尔值,指示 URL 的方案是否可以由安装在设备上的某些应用程序处理。

openURL(_:)

尝试打开指定 URL 处的资源。

openURL(_:) 已弃用 - iOS 10.0

请改用open(_:options:completionHandler:) 方法。 示例:

if UIApplication.shared.canOpenURL(url) {
    if #available(iOS 10.0, *) {
         UIApplication.shared.open(url, options: [:], completionHandler: { (success) in

         })
    } else {
         UIApplication.shared.openURL(url)
    }
}

如果您的应用在 iOS 9.0 或之后链接,您必须声明 URL 通过添加传递给此方法的方案 应用程序 Info.plist 文件的 LSApplicationQueriesSchemes 键。这个 对于未声明的方案,方法总是返回 false,无论是否 已安装适当的应用程序。

【讨论】:

  • Important note if you use canOpenURL(_:) : 如果你的应用在 iOS 9.0 或之后链接,你必须通过添加 LSApplicationQueriesSchemes 键来声明你传递给这个方法的 URL 方案应用程序的 Info.plist 文件。对于未声明的方案,无论是否安装了适当的应用程序,此方法始终返回 false
【解决方案2】:

canOpenURL : 返回布尔值,url 是否可以打开。

例子:

func schemeAvailable(scheme: String) -> Bool {
    if let url = URL(string: scheme) {
        return UIApplication.shared.canOpenURL(url)
    }
    return false
}

openURL : 打开网址。

由于它已从 ios 10 中弃用。所以新的 func 是 openURL:options:completionHandler:

例子

func open(scheme: String) {
  if let url = URL(string: scheme) {
    UIApplication.shared.open(url, options: [:], completionHandler: {
      (success) in
      print("Open \(scheme): \(success)")
    })
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2017-09-14
    • 1970-01-01
    • 2010-12-21
    • 2016-06-18
    • 1970-01-01
    • 2013-08-07
    相关资源
    最近更新 更多