uniapp中NSAppTransportSecurity的配置问题如何解决

在uniapp开发iOS应用时,遇到NSAppTransportSecurity的配置问题该如何解决?我在info.plist中添加了ATS设置,但部分HTTP请求仍然被拦截。请问如何在uniapp中正确配置NSAppTransportSecurity以允许非HTTPS请求?是否需要额外的HBuilderX设置或原生代码修改?能否提供具体的配置示例?

2 回复

在uniapp中,NSAppTransportSecurity(ATS)问题通常出现在iOS平台。解决方法是在manifest.json的"plus" -> “distribute” -> "apple"下添加ATS配置,允许HTTP请求或指定域名。例如:

"NSAppTransportSecurity": {
    "NSAllowsArbitraryLoads": true
}

但建议仅允许特定域名,避免全开。


在 UniApp 中,NSAppTransportSecurity(ATS)是 iOS 平台的安全策略配置,用于控制 App 的网络请求是否必须使用 HTTPS。如果遇到 ATS 相关问题(如无法发起 HTTP 请求),需通过原生配置解决。以下是具体步骤:

解决方法

  1. manifest.json 中配置

    • 打开项目根目录的 manifest.json 文件。
    • 在 “App 常用其他设置” -> “iOS 设置” 中,找到 “ATS” 相关选项(部分 HBuilderX 版本可能直接提供勾选项)。
    • 若需允许 HTTP 请求,勾选 “允许不安全的 HTTP 请求” 或类似选项(具体名称可能因 HBuilderX 版本而异)。
  2. 手动配置 info.plist(如果上述方法无效):

    • 在 HBuilderX 中,右键项目目录,选择 “原生 App 云端打包”。
    • 在 “iOS 设置” 中,找到 “自定义 iOS plist 代码” 或类似字段。
    • 添加以下代码以禁用 ATS 限制(允许所有 HTTP 请求):
      <key>NSAppTransportSecurity</key>
      <dict>
          <key>NSAllowsArbitraryLoads</key>
          <true/>
      </dict>
      
    • 若需仅允许特定域名使用 HTTP,可细化配置:
      <key>NSAppTransportSecurity</key>
      <dict>
          <key>NSExceptionDomains</key>
          <dict>
              <key>yourdomain.com</key>
              <dict>
                  <key>NSExceptionAllowsInsecureHTTPLoads</key>
                  <true/>
                  <key>NSIncludesSubdomains</key>
                  <true/>
              </dict>
          </dict>
      </dict>
      
      yourdomain.com 替换为实际域名。
  3. 重新打包

    • 修改配置后,需重新提交云端打包或本地打包,使配置生效。

注意事项

  • 上架风险:完全禁用 ATS(NSAllowsArbitraryLoads 设为 true)可能导致 App Store 审核被拒。建议仅针对特定域名配置例外。
  • 测试环境:仅在开发或测试阶段临时禁用 ATS,生产环境应使用 HTTPS。

通过以上配置,可解决 UniApp 中因 ATS 限制导致的网络请求问题。

回到顶部