文档

初始化及偏好设置接口

更新时间:

无鉴权初始化接口

若在阿里云HTTPDNS控制台上开通HTTPDNS服务后,开启非鉴权接口访问权限配置,则可以使用此接口直接构造无鉴权配置的HTTPDNS全局服务实例。初始化后,该实例将在APP生命周期内以单例形式存在,使用时直接获取即可。

接口定义

- (instancetype)initWithAccountID:(int)accountID;

所属类

HttpDnsService

参数说明

参数

类型

是否必填

说明

accountId

int

系统分配的Account ID,当您开通HTTPDNS后,您可以在控制台获取到您阿里云账号对应的Account ID信息。

有鉴权初始化接口

若在阿里云HTTPDNS控制台上开通HTTPDNS服务后,未开启非鉴权接口访问权限配置,则需要使用此接口构造含鉴权配置的HTTPDNS全局服务实例。初始化后,该实例将在APP生命周期内以单例形式存在,使用时直接获取即可。

接口定义

- (instancetype)initWithAccountID:(int)accountID secretKey:(NSString *)secretKey;

所属类

HttpDnsService

参数说明

参数

类型

是否必填

说明

accountId

int

系统分配的Account ID,当您开通HTTPDNS后,您可以在控制台获取到您阿里云账号对应的Account ID信息。

secretKey

NSString

鉴权对应的secretKey,同样在阿里云HTTPDNS控制台获取。

获取HTTPDNS服务实例

在构造全局HTTPDNS服务实例之后,任何地方需要配置HTTPDNS或需要使用HTTPDNS解析域名时,都可以通过此接口获得全局单例。

接口定义

+ (instancetype)sharedInstance;

所属类

HttpDnsService

校正App签名时间

进行该操作后,如果有偏差,每次网络请求都会对设备进行时间校正;不进行该操作的话将以设备时间为准。

重要
  • 使用场景:有可能手机上的时间不太准确。

  • 校正操作在App的一个生命周期内生效,App重启后需要重新设置才能重新生效,可以重复设置。

  • 您需要一个时间服务,可以自建,简单的时间戳接口就可以。APP启动后,请求这个时间服务返回正确的时间,再将时间设置到本接口,SDK就能知道设备时间和正确时间的偏离值,随后在请求时自动校正时间。

接口定义

- (void)setInternalAuthTimeBaseBySpecifyingCurrentTime:(NSTimeInterval)currentTime;

所属类

HttpDnsService

参数说明

参数

类型

是否必填

说明

currentTime

NSTimeInterval

用于校正的准确时间戳,单位为秒。

开启本地调试日志

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

接口定义

- (void)setLogEnabled:(BOOL)enable;

所属类

HttpDnsService

参数说明

参数

类型

是否必填

说明

enable

BOOL

日志开关

设置域名解析网络请求类型

设置HTTPDNS域名解析请求的类型,若不调用该接口,默认为HTTP请求。

说明

HTTP请求基于底层CFNetwork实现,不受ATS限制。

接口定义

- (void)setHTTPSRequestEnabled:(BOOL)enable;

所属类

HttpDnsService

参数说明

参数

类型

是否必填

说明

enable

BOOL

取值如下:

YES:HTTPS请求

NO:HTTP请求

设置持久化缓存功能

持久化缓存功能旨在提升首屏加载速度。开启后,HTTPDNS会将上一次解析到的结果保存到本地持久层,App重启后,每个域名首次解析会优先从持久层获取缓存结果,以实现最快的解析效率。也正因如此,存在第一次使用的IP为过期IP的可能性,即该缓存结果TTL已过期。但大多数情况下该IP依然可以正常使用,特别是对于解析记录比较稳定的域名。

说明
  • 如果业务服务器IP变化比较频繁,建议谨慎接入该功能,以免对业务造成影响。

  • 持久化缓存仅影响第一次域名解析结果,后续解析仍会请求HTTPDNS服务器,并更新本地缓存。

  • 开启此功能后,每次网络解析记录,会更新到本地缓存;App重启后,首先加载本地缓存到内存中。

接口定义

- (void)setPersistentCacheIPEnabled:(BOOL)enable;

所属类

HttpDnsService

参数说明

参数

类型

是否必填

说明

enable

BOOL

取值如下:

YES:开启

NO:关闭

是否允许复用TTL过期的解析缓存结果

若考虑域名解析结果比较稳定,可以开启允许HTTPDNS返回TTL过期的解析结果,从而达成最快的域名解析效率。

说明
  • 当设置为YES时,SDK会先返回过期缓存解析结果,但也依然会同步发起异步更新以获取最新的IP信息。

  • 当设置为NO时,假设已有某个域名的缓存,该IP信息的TTL时间为60s,则60s内调用相关解析接口可以立即拿到缓存结果。但在60s之后,由于该缓存的TTL已经过期,如果调用同步、异步解析接口,则需要等待解析网络请求完成获得最新IP信息后,才会返回或回调结果;如果调用同步非阻塞接口,则会立即返回nil。

接口定义

- (void)setReuseExpiredIPEnabled:(BOOL)enable;

所属类

HttpDnsService

参数说明

参数

类型

是否必填

说明

enable

BOOL

是否允许返回TTL过期的缓存解析结果。

YES:允许

NO:不允许

预解析接口

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

接口定义

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

所属类

HttpDnsService

参数说明

参数

类型

是否必填

说明

hosts

NSArray

预解析域名列表

自定义日志输出回调

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

重要

该功能仅适用于SDK V1.6.20及以上版本。

接口定义

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

所属类

HttpDnsService

参数说明

参数

类型

是否必填

说明

logHandler

id<HttpdnsLoggerProtocol>

设置日志输出回调。

自定义域名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

代码示例

@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
  • 本页导读 (0)