【问题标题】:iOS App Transport SecurityiOS 应用传输安全
【发布时间】:2016-02-12 00:54:25
【问题描述】:

我在一个包含许多不同 URL 的应用上有列表;因此,我将 info.plist 设置为 ...

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

在模拟器上一切正常。在我的测试设备上它不起作用。

错误是...

2015-11-10 18:58:05.159 MPSTApp[520:169178] -canOpenURL:URL 失败:“https:/www.facebook.com/prontosantateresa -- file:///”-错误:“这不允许app查询方案文件”

调用url链接的代码是这样的——

var anchorLink: String?

func loadWebPage(){
    let requestURL = NSURL(string: anchorLink!)
    let request = NSURLRequest(URL: requestURL!)
    webView.loadRequest(request)
}

【问题讨论】:

  • 这与 ATS 无关,而是 IOS9 中的一项更改,要求您的应用在其 info.plist 中声明它将查询的 URL 方案 - stackoverflow.com/questions/30987986/…
  • 但是如果用户能够发布他们自己的链接呢?或者链接 URL 从 API 更改。这意味着 URL 可以改变并且可以是任何东西。例如,twitter 会对推文中发布的所有链接做什么。
  • 您可以打开任何您喜欢的 URL 方案,但如果您要在该方案上调用 canOpenUrl,它必须在您的 Info.plist 中。

标签: ios swift app-transport-security


【解决方案1】:

对于iOS9,你必须在plist文件中添加一些东西:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fbapi20130214</string>
    <string>fbapi20130410</string>
    <string>fbapi20130702</string>
    <string>fbapi20131010</string>
    <string>fbapi20131219</string>    
    <string>fbapi20140410</string>
    <string>fbapi20140116</string>
    <string>fbapi20150313</string>
    <string>fbapi20150629</string>
    <string>fbauth</string>
    <string>fbauth2</string>
    <string>fb-messenger-api20140430</string>
</array>

更多:Preparing Your Apps for iOS9

【讨论】:

  • 我放进去没有变化。
  • 该错误与file URL 方案有关。不是此答案中列出的任何方案。
【解决方案2】:

您的网址中有错字。变化:

https:/facebook.com

收件人:

https://facebook.com

此外,您应该将 LSAllowsArbitraryLoads 改回默认值,因为这对大多数应用程序来说是最好的。

【讨论】:

  • 谢谢阿比。我在错误中也注意到了这一点,并认为这是问题所在。我正在从一串文本中提取链接(以及其他链接)。该字符串将显示为https://facebook.com。我猜链接将//视为转义字符?
猜你喜欢
  • 2016-01-17
  • 2016-08-27
  • 2016-01-02
  • 1970-01-01
  • 2015-12-25
  • 2016-06-07
  • 2016-01-05
  • 2015-12-28
  • 1970-01-01
相关资源
最近更新 更多