您可以下载并运行示例项目,参考不同技术场景下的集成方案。
www.douyin.com
警告
示例项目会向上面的域名发送请求。如果您没有在控制台添加域名,HTTPDNS SDK 无法返回 HTTPDNS 服务端的解析结果,只能返回 Local DNS 的解析结果。
如果您需要在示例项目中向其他域名发送请求,您也需要在控制台添加这些域名。
下载并解压缩示例项目。
在示例项目的 example
目录运行 pod 命令安装依赖。如果您收到 out-of-date source repos
的提示,需要运行 pod install --repo-update
命令。
pod install
使用 Xcode 打开 example
目录下的 .xcworkspace
文件。
打开 TTAppDelegate.m
文件。在 info.httpDnsAccount
属性和 info.key
属性中分别填入您的 Service ID 和 Secret Key。Service ID 和 Secret Key 的获取方法参考 获取鉴权密钥 。
警告
示例代码了方便功能演示,直接在返回值传入 Service ID 和 Secret Key。在生产环境中,您需要避免直接传入明文。例如,您可以预先把明文进行编码或加密处理,在传值的时候再对已编码或加密的明文进行解码或解密。同时,您必须对 app 进行代码混淆处理。否则,您的 Service ID 和 Secret Key 可能会被第三方通过反编译的方式获得。
[[TTDnsResolver shareInstance] setHttpDnsAuthenticationBlock: ^(void) { TTHttpDnsAuthenticationInfo* info = [[TTHttpDnsAuthenticationInfo alloc] init]; info.httpDnsAccount = @"your_service_id"; info.key = @"your_secret_key"; return info; }];
连接 iOS 真机或模拟器。编译并运行项目。
您可以在文本框填入您需要访问的网站 URL,例如 www.douyin.com
。然后,您可以点击文本框下方的按钮,发送不同类型的请求。
通过 PrivateContext
更改移动解析 HTTPDNS 的 DNS 请求类型。
示例项目默认发送 HTTPDNS 请求。点击该按钮后,示例项目会发送 DoH 请求。
注意
您只能在 iOS 真机上验证该功能。
你必须确保已完成以下操作。否则按钮不生效。
TTViewController.m
文件中设置 DoH 地址。- (void)privacyContextButtonClicked { if (@available(iOS 14.0, *)) { // 设置您在控制台获取的 DoH 地址 nw_endpoint_t dohEndpoint = nw_endpoint_create_url("https://doh-xxxxxxxxxxxxxxx.volcdns.pub/dns-query"); nw_resolver_config_t dohResolver = nw_resolver_config_create_https(dohEndpoint); nw_privacy_context_require_encrypted_name_resolution(NW_DEFAULT_PRIVACY_CONTEXT, true, dohResolver); NSURL* url = [NSURL URLWithString:self.urlInput.text]; NSURLRequest* request = [NSURLRequest requestWithURL:url]; [self sendRequestWithoutHook:request];
通过 NEDNSSettingsManager
更改移动解析 HTTPDNS 的 DNS 请求类型。示例项目默认发送 HTTPDNS 请求。点击该按钮后,示例项目会发送 DoH 请求。
注意
您只能在 iOS 真机上验证该功能。
你必须确保已完成以下操作。否则按钮不生效。
在控制台开启 DoH 功能并获取 DoH 地址。参见 开启 DoH 并获取接入域名。
在 TTDNSSettingsManager.swift
文件中设置 DoH 地址。
let doh = NEDNSOverHTTPSSettings() // 设置您在控制台获取的 DoH 地址 doh.serverURL = URL(string: "https://doh-xxxxxxxxxxxxxxx.volcdns.pub/dns-query")
代码运行后,DNS 配置会被安装到 iOS 系统。为了让 DNS 配置生效,您需要在 iOS 设备的 设置 > 通用 > VPN 与设备管理 > DNS 中手动启用 DNS 配置。
您可以参考下面的视频了解如何手动启用 DNS 配置。
App 界面会通过 WKWebView
渲染您指定的网站。请求完成之后,您可以在界面上看到网页。
App 会发送带 SNI(Server Name Indication) 信息的 HTTP POST 请求。您可以在界面上看到打印的日志。
App 会发送带 SNI 信息的 HTTP GET 请求。请求完成之后,您可以在界面上看到打印的日志。
App 会通过 AFNetworking 库发送请求。请求完成之后,您可以在界面上看到打印的日志。
App 会通过 Alamofire 库发送请求。请求完成之后,您可以在界面上看到打印的日志。
App 会通过 NSURLSession 库发送请求。请求完成之后,您可以看到打印的日志。
参考 查看解析请求统计数据 查看您发送的解析请求信息。
如果您在运行示例项目时,无法获取 HTTPDNS 服务端的解析结果或遇到错误,您可以参考 常见问题。
在自己的 iOS 项目里集成 HTTPDNS SDK
HTTPDNS iOS SDK 的集成较为复杂。您也可以在 iOS 项目中通过 DoH 接入 HTTPDNS 服务端。DoH 功能不依赖 HTTPDNS iOS SDK。您可以直接通过 iOS 的原生方法接入 DoH。参见 在 iOS 客户端配置 DoH。