本文介绍iOS SDK高阶配置接口。
是否允许HTTPDNS打印Log
本地日志调试日志开关,可以开启调试日志排查解析相关问题。上线时建议关闭。
接口定义
- (void)setLogEnabled:(BOOL)enable;
所属类
HttpDnsService
参数说明
参数 | 类型 | 是否必填 | 说明 |
enable | BOOL | 是 | 日志开关 |
设置接收SDK日志的回调类
开启HTTPDNS日志开关后,若希望日志打印到自定义目标处,可以通过此回调配置实现。如希望通过日志文件收集相关解析日志,则可以通过此回调把日志写入相关文件中。
接口定义
- (void)setLogHandler:(id<HttpdnsLoggerProtocol>)logHandler;
所属类
HttpDnsService
参数说明
参数 | 类型 | 是否必填 | 说明 |
logHandler | id<HttpdnsLoggerProtocol> | 是 | 设置日志输出回调。 |
预解析接口
可以通过此接口,预先注册您后续可能会使用到的域名,以便SDK提前解析,减少后续域名解析时请求的时延。
接口定义
- (void)setPreResolveHosts:(NSArray *)hosts;
所属类
HttpDnsService
参数说明
参数 | 类型 | 是否必填 | 说明 |
hosts | NSArray * | 是 | 预解析域名列表 |
启用IP优选
指定域名对应服务的探测端口,设置该接口后,如果解析了相应的域名,则SDK会对解析返回的IP列表进行TCP建连测速,根据测速结果对该IP列表进行动态排序,以保证第一个IP是可用性最好的IP。
v3.2.0版本开始支持。如果IP列表包含v4、v6两种类型,则会进行分开测速和排序。
网络测速需要一定时间,首次调用接口触发HTTPDNS解析域名后,立即获得的IP列表可能未经排序。
当提供服务的多个IP入口存在明显的性能差异或者网络环境差异时,可能所有客户端的测速结果都相近,导致所有的客户端都向同一个服务IP发起业务请求,造成负载失衡,影响稳定性。因此需要谨慎评估是否启用IP优选。
接口定义
- (void)setIPRankingDatasource:(NSDictionary<NSString *, NSNumber *> *)IPRankingDatasource;
参数说明
参数 | 类型 | 是否必填 | 说明 |
IPRankingDatasource | NSDictionary<NSString *, NSNumber *> | 是 | 设置对应域名的端口号 @{host: port} |
代码示例
HttpDnsService *httpdns = [[HttpDnsService alloc] initWithAccountID:xxxx secretKey:@"xxxxx"];
NSDictionary *IPRankingDatasource = @{
@"www.aliyun.com" : @443,
@"www.taobao.com" : @443,
@"www.exmaple.com" : @443
};
[httpdns setIPRankingDatasource:IPRankingDatasource];
校正App签名时间
进行该操作后,如果有偏差,每次网络请求都会对设备进行时间校正;不进行该操作的话将以设备时间为准。
该功能仅适用于SDK v3.0.0及以上版本。
使用场景:有可能手机上的时间不太准确。
校正操作在App的一个生命周期内生效,App重启后需要重新设置才能重新生效,可以重复设置。
您需要一个时间服务,可以自建,简单的时间戳接口就可以。APP启动后,请求这个时间服务返回正确的时间,再将时间设置到本接口,SDK就能知道设备时间和正确时间的偏离值,随后在请求时自动校正时间。
在2.x.x版本及以前,本接口定义为
- (void)setAuthCurrentTime:(NSTimeInterval)currentTime;
接口定义
- (void)setInternalAuthTimeBaseBySpecifyingCurrentTime:(NSTimeInterval)currentTime;
所属类
HttpDnsService
参数说明
参数 | 类型 | 是否必填 | 说明 |
currentTime | NSTimeInterval | 是 | 用于校正的准确时间戳,单位为秒。 |
设置region节点
如果APP需要在海外环境使用HTTPDNS,为了提升解析效率,可以主动设置本SDK的启动服务节点。设置节点后,SDK会使用该节点进行域名解析和进行随后的调度节点列表更新。
该功能仅适用于SDK v3.1.0及以上版本。
接口定义
- (void)setRegion:(NSString *)region;
所属类
HttpDnsService
参数说明
参数 | 类型 | 是否必填 | 说明 |
region | NSString * | 是 | 节点名,当前可用节点为 中国内地节点、中国香港节点、新加坡节点、德国节点,美国节点,分别对应以下宏:
|
自定义解析结果TTL
若需要在APP本地指定某个域名的TTL,覆盖真实的域名配置,则可以通过此代理接口实现。
接口定义
- (int64_t)httpdnsHost:(NSString *)host ipType:(AlicloudHttpDNS_IPType)ipType ttl:(int64_t)ttl;
所属类
HttpdnsTTLDelegate
回调参数说明
参数 | 类型 | 说明 |
host | NSString * | 需要自定义ttl的域名 |
ipType | AlicloudHttpDNS_IPType | 什么查询类型下需要自定义ttl |
ttl | int64_t | 该域名从服务端返回的原始ttl |
代码示例
@interface AppDelegate () <HttpdnsTTLDelegate>
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 传入对应的accountID
HttpDnsService *httpdns = [[HttpDnsService alloc] initWithAccountID:xxxx secretKey:@"xxxx"];
httpdns.ttlDelegate = self;
return YES;
}
- (int64_t)httpdnsHost:(NSString *)host ipType:(AlicloudHttpDNS_IPType)ipType ttl:(int64_t)ttl {
if ([host isEqualToString:@"www.aliyun.com"]) {
// 假设业务考虑www.aliyun.com这个域名的解析记录非常稳定,可以在本地缓存更长时间
// 则判断host为www.aliyun.com时,将ttl设置为600秒
return 600;
}
// 若无需特殊配置,返回原始ttl
return ttl;
}
@end
设置允许降级Local Dns解析
此接口用于设置当HTTPDNS解析失败时是否自动降级到本地DNS进行尝试解析。此功能的目的在于提高域名解析的可靠性,即使在HTTPDNS服务不可用的情况下,也能确保应用能够继续运行。
降级生效时,SDNS参数不生效,降级逻辑只解析域名,返回的结果默认使用60秒(若未指定该域名自定义TTL)作为TTL值
降级请求也不会再对ip进行优先排序
默认关闭,不会自动降级
接口定义
- (void)setDegradeToLocalDNSEnabled:(BOOL)enable;
所属类
HttpDnsService
参数说明
参数 | 类型 | 是否必填 | 说明 |
enable | BOOL | 是 | 取值如下: YES:开启 NO:关闭 |