高阶配置接口

本文介绍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 *

节点名,当前可用节点为 中国内地节点、中国香港节点、新加坡节点、德国节点,美国节点,分别对应以下宏:

  • ALICLOUD_HTTPDNS_DEFAULT_REGION_KEY

  • ALICLOUD_HTTPDNS_HONGKONG_REGION_KEY

  • ALICLOUD_HTTPDNS_SINGAPORE_REGION_KEY

  • ALICLOUD_HTTPDNS_GERMANY_REGION_KEY

  • ALICLOUD_HTTPDNS_AMERICA_REGION_KEY

自定义解析结果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:关闭