本文当介绍了如何在 iOS 项目中集成和初始化 HTTPDNS iOS SDK。
说明
HTTPDNS iOS SDK 所支持的 iOS 设备的版本是 9.0 或以上。
创建一个 基于 Cocoapods 的项目,在 Podfile 文件中引用以下依赖项。您可以参见 版本说明 了解最新的 SDK 版本号。
source 'https://github.com/CocoaPods/Specs.git' source 'https://github.com/volcengine/volcengine-specs.git' pod 'BDHTTPDNS-tob', '0.18.7'
在 Podfile 的目录下运行 pod install
命令安装 BDHTTPDNS。
pod install
如果您收到 Pod 仓库过期的提示,您需要运行以下命令更新 Pod 仓库。
pod install --repo-update
安装完成后,在您的项目的 Pods/BDHTTPDNS-tob/binaries/ios
目录下,CocoaPods 会生成 BDHTTPDNS_tob.xcframework
动态库。
导入 TTDnsResolver.h
头文件。
说明
.xcframework
动态库。导入头文件的方式从 #import <TTDnsResolver.h>
更改为 #import <BDHTTPDNS-tob/TTDnsResolver.h>
。TTHttpMnetURLProtocol
头文件。自 0.16.7 版本起,SDK 不再支持基于 MNet Protocol 的集成方案。#import <BDHTTPDNS-tob/TTDnsResolver.h>
实现 TTDnsResolver
类的 setHttpDnsAuthenticationBlock
回调。您可以在该回调中设置初始化 SDK 所需要的信息。例如,您可以将 HTTPDNS 鉴权密钥 中的 Service ID 和 Service Key 分别传入 httpDnsAccount
属性和 key
属性。
说明
对于 0.11.1 或更高版本的 iOS SDK,您可以在控制台创建应用,并把应用的 应用ID 传入 setHttpDnsAppId
属性。这样,您就可以区分同一火山引擎账号下的多个应用,并且为应用单独配置自定义解析。参见 应用管理 了解详细信息。如果您的 SDK 版本低于 0.11.1,您需要把 SDK 升级到 0.11.1 或更高版本才能使用 应用管理 功能。
警告
示例代码了方便功能演示,直接在属性中传入 Service ID 和 Secret Key。在生产环境中,您需要避免直接传入明文。例如,您可以预先把明文进行编码或加密处理,在传值的时候再对已编码或加密的明文进行解码或解密。同时,您必须对 app 进行代码混淆处理。否则,您的 Service ID 和 Secret Key 可能会被第三方通过反编译的方式获得。
[[TTDnsResolver shareInstance] setHttpDnsAuthenticationBlock: ^(void) { TTHttpDnsAuthenticationInfo* info = [[TTHttpDnsAuthenticationInfo alloc] init]; info.httpDnsAccount = @"xxxxx"; info.key = @"xxxxx"; info.setHttpDnsAppId = @"xxxxx"; return info; }];
(可选)设置 TTDnsResolver
类的 preloadDomains 属性。该属性指定 SDK 进行预解析的域名列表。您也可以在初始化 SDK 之后设置该属性。
[TTDnsResolver shareInstance].preloadDomains = @[@"www.a.com", @"www.bytedance.com"];
(可选)实现 TTDnsResolver
类的 setHttpDnsMonitorBlock 回调。您可以在该回调中获取 HTTPDNS 监控信息。
[[TTDnsResolver shareInstance] setHttpDnsMonitorBlock:^(NSDictionary* json, NSString* logtype) { NSData* jsonData = [NSJSONSerialization dataWithJSONObject:json options:0 error:0]; NSString* dataStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; NSLog(@"monitor log: log type: %@,message: %@, ", logtype, dataStr); }];
(可选)如果您希望使用固定 IP 地址接入 HTTPDNS 服务端,可以调用 setHttpDnsDomainList 方法,设置 SDK 通过固定 IP 地址接入 HTTPDNS 服务端。SDK 默认使用 httpdns.volcengineapi.com
域名接入 HTTPDNS 服务端。您可以调用 setHttpDnsBackupDomainList 方法把域名设置为备用接入方式。
说明
固定 IP 地址接入功能处于公测阶段,暂不对外公开。您可以 提交工单 联系我们获取固定 IP 地址。
[[TTDnsResolver shareInstance] setHttpDnsDomainList:@[@"xxx.xxx.xxx.1", @"xxx.xxx.xxx.2"]];
调用 TTDnsResolver
类的 dnsResolverColdStart 方法。该方法对 SDK 进行初始化。调用该方法之后,SDK 开始对预解析域名列表中的域名进行预解析。您必须在实现 setHttpDnsAuthenticationBlock
回调之后调用 dnsResolverColdStart
方法对 SDK 进行初始化。
[[TTDnsResolver shareInstance] dnsResolverColdStart];