You need to enable JavaScript to run this app.
导航
iOS SDK 集成方案概述
最近更新时间:2024.06.11 10:17:15首次发布时间:2022.05.20 17:46:16

您的 app 可能使用了网络库或 WKWebView。在网络库中,您可能使用了 NSURLProtocol 。火山引擎推荐您使用不同的方案在 app 端集成火山引擎移动解析(HTTPDNS)。

集成方案介绍

说明

SDK 默认向移动解析 HTTPDNS 服务端发送 HTTPS 请求。如果您调用了 enableHttpDnsClearText,SDK 会根据 enableHttpDnsClearText 的设置向 HTTPDNS 服务端发送 HTTPS 请求或 HTTP 请求。HTTPS 请求与 HTTP 请求的计费不同。参见 计费说明

网络库或 WKWebView

推荐集成方案

方案限制

参考文档

网络库(NSURLProtocol

使用自定义方法拦截请求。然后,您需要在自定义 NSURLProtocol 中手动将请求改写成 IP 直连请求。

  • App 开启代理时,如果代理无法读取 Host header,您无法将请求改写成 IP 直连请求。
  • 火山引擎推荐您使用 NSURLSessionDelegate 拦截非 SNI 请求。
  • 您需要使用 CFNetwork 改写 SNI 请求。CFNetwork 的 API 大部分已经废弃,扩展成本高。
  • 使用 CFNetwork 改写 POST 请求时,请求中的 body 会为空。您需要通过 InputStream 或把 body 传入 header 的方式确保 body 不为空。
  • 仅支持 HTTP 1.1。如果您的 app 向不支持 HTTP 1.1 的服务器发送请求,服务器会返回 505 错误码。

NSURLProtocol

WKWebView

使用 iOS 运行时函数替换框架 RSSwizzle 或使用 WKWebView 的私有 API 拦截 WKWebView 中的请求。然后,通过 NSURLSession 创建请求。最终,使用 WKWebView.loadRequest 加载请求。

如果您的网络库使用了 NSURLProtocol,方案限制和 网络库( NSURLProtocol) 相同。

WKWebView

Demo 示例

参见 获取并运行 iOS 示例项目 下载并试用 iOS 示例项目。

注意

示例项目的代码仅供参考,不适合直接在生产环境中使用。