高阶配置接口

是否允许HTTPDNS打印Log

本地日志调试日志开关,可以开启调试日志排查解析相关问题。上线时建议关闭。

接口定义

- (void)setLogEnabled:(BOOL)enable;

所属类

HttpDnsService

参数说明

参数

类型

是否必填

说明

enable

BOOL

日志开关

设置接收SDK日志的回调类

开启HTTPDNS日志开关后,若希望日志打印到自定义目标处,可以通过此回调配置实现。如希望通过日志文件收集相关解析日志,则可以通过此回调把日志写入相关文件中。

接口定义

- (void)setLogHandler:(id<HttpdnsLoggerProtocol>)logHandler;

所属类

HttpDnsService

参数说明

参数

类型

是否必填

说明

logHandler

id<HttpdnsLoggerProtocol>

设置日志输出回调。

校正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

预解析接口

可以通过此接口,预先注册您后续可能会使用到的域名,以便SDK提前解析,减少后续域名解析时请求的时延。

接口定义

- (void)setPreResolveHosts:(NSArray *)hosts;

所属类

HttpDnsService

参数说明

参数

类型

是否必填

说明

hosts

NSArray

预解析域名列表

自定义解析结果TTL

若需要在APP本地指定某个域名的TTL,覆盖真实的域名配置,则可以通过此代理接口实现。

接口定义

@protocol HttpdnsTTLDelegate <NSObject>

/// 自定义HOST的TTL时长
/// @return 返回需要自定义的TTL时长
/// @param host 域名
/// @param ipType 当前查询的IP类型
/// @param ttl 当次域名解析返回的TTL
- (int64_t)httpdnsHost:(NSString *)host ipType:(AlicloudHttpDNS_IPType)ipType ttl:(int64_t)ttl;

@end

所属类

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:xxxxx];
    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