配置阿里云 HttpDns_iOS_SDK


首先下载 阿里云 HttpDns 官方 iOS_Demo 有助于我们借鉴学习
然后 打开 下载好的 Demo 阅读 README.md 文件


     HTTPDNS iOS Demo
     该Demo提供了App不同应用场景集成HTTPDNS服务的示例。
     
     Demo仅作为原理讲解和示例代码用途,
     强烈建议在搞清楚各场景下HTTPDNS接入实现细节和原理后,再集成到App线上环境。
     
     1. 普通场景
     基于网络API NSURLSession/NSURLConnection发送HTTP请求;
     相关示例代码:
     ViewController
     
     2. WebView场景
     WebView发起的HTTP网络请求,通过注册的NSURLProtocol拦截后处理;
     相关示例代码:
     WebViewController
     WebViewURLProtocol
     
     3. HTTPS场景
     3.1 普通HTTPS请求
     基于网络API NSURLSession/NSURLConnection发送HTTPS请求;
     相关示例代码:
     HTTPSSceneViewController
     
     3.2 SNI场景HTTPS请求
     基于WebView/NSURLSession/NSURLConnection发送的HTTPS(SNI场景)网络请求, 经过注册的NSURLProtocol拦截后,基于CFNetwork发出网络请求。
     相关示例代码:
     SNIViewController
     CFHTTPDNSRequestTaskDelegate
     CFHTTPDNSHTTPProtocol
     CFHTTPDNSRequestTask


已经说得比较详细 那我们就开始配置我们的项目
需要登录阿里云网站并且 开通该服务 下载 HttpDns iOS_SDK (这里是手动集成的)


把下载好的 SDK 拖入项目中 并在项目里添加 依赖 系统公共库:

  • libresolv.tbd
  • CoreTelephony.framework
  • SystemConfiguration.framework

获取服务实例

HTTPDNS iOS SDK 以全局service实例的方式提供域名解析服务,可以通过以下方式获取实例:

  • 在 AppDelegate.m 文件中 导入头文件 #import
  • 在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中初始化SDK
// 初始化HTTPDNS
HttpDnsService *httpdns = [HttpDnsService sharedInstance];
// 设置AccoutID,当您开通HTTPDNS服务时,您可以在控制台获取到您对应的Accout ID信息
[httpdns setAccountID:*****];
设置预解析域名

在您初始化程序时,可以选择性地预先向HTTPDNS SDK中注册您后续可能会使用到的域名,以便SDK提前解析,减少后续解析域名时请求的时延。您只需调用以下接口:

NSArray * hosts = [[NSArray alloc] initWithObjects:@"www.taobao.com", @"www.aliyun.com", nil];
[httpdns setPreResolveHosts:hosts];
附:代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    // 1=====================================
    // 初始化HTTPDNS
    HttpDnsService *httpdns = [HttpDnsService sharedInstance];
    // 设置AccoutID
    [httpdns setAccountID:160605];
    
    // 2=====================================
    //  设置HTTPDNS域名解析请求类型(HTTP/HTTPS),
    // 若不调用该接口,默认为HTTP请求;
    // SDK内部HTTP请求基于CFNetwork实现,不受ATS限制。
    // [httpdns setHTTPSRequestEnabled:YES];
    
    // 3=====================================
    // 在您初始化程序时,可以选择性地预先向HTTPDNS SDK中注册您后续可能会使用到的域名,
    // 以便SDK提前解析,减少后续解析域名时请求的时延
    NSArray * hosts = [[NSArray alloc] initWithObjects:@"www.taobao.com", @"www.aliyun.com", nil];
    // 设置预解析域名列表
    [httpdns setPreResolveHosts:hosts];
    
    // 4=====================================
    // 打开HTTPDNS Log,线上建议关闭
    // [httpdns setLogEnabled:YES];
    
    return YES;
}


iOS 端 API 与使用示例
 1、获取HTTPDNS服务实例
 + (instancetype)sharedInstance;

 2、设置HTTPDNS服务Account ID,您可以从控制台获取您的Account ID信息
 @param accountId 您的HTTPDNS租户ID
 - (void)setAccountID:(int)accountId;
 
 3、设置HTTPDNS域名解析请求类型(HTTP/HTTPS),
若不调用该接口,默认为HTTP请求。
 HTTP请求基于底层CFNetwork实现,不受ATS限制;
 @param enable  YES: HTTPS请求, NO: HTTP请求
 - (void)setHTTPSRequestEnabled:(BOOL)enable;

 4、将app使用到的域名预设进来,以便于HTTPDNS 进行预解析
 @param hosts 预解析列表
 - (void)setPreResolveHosts:(NSArray *)hosts;

// =====《以上具体使用参考AppDelegate.m 文件》==================

 5、异步解析接口,首先查询缓存,若存在则返回结果,
 若不存在返回nil并且进行异步域名解析更新缓存
 @param host 域名(如www.aliyun.com)
 @return 域名对应的解析结果
 - (NSString *)getIpByHostAsync:(NSString *)host;

 6、异步解析接口,首先查询缓存,若存在则返回结果列表,
 若不存在返回nil并且进行异步域名解析更新缓存
 @param host 域名(如www.aliyun.com)
 @return 域名对应的解析结果列表
 - (NSArray *)getIpsByHostAsync:(NSString *)host;

 7、异步解析接口,首先查询缓存,若存在则返回结果,
 若不存在返回空对象并且进行异步域名解析更新缓存。
 返回的结果是URL使用场景下的格式化结果
 @param host 域名(如www.aliyun.com)
 @return 域名对应的解析结果
 - (NSString *)getIpByHostAsyncInURLFormat:(NSString *)host;

 8、设置降级策略,用户可定制规则降级为原生DNS解析方式;
 @param delegate 降级代理
 - (void)setDelegateForDegradationFilter:(id)delegate;
 @protocol HttpDNSDegradationDelegate 

 9、降级过滤器
 @param hostName 当前的目标域名(如www.aliyun.com),您可以针对域名进行降级过滤
 @return 是否降级走原生DNS逻辑
 - (BOOL)shouldDegradeHTTPDNS:(NSString *)hostName;

 10、是否允许HTTPDNS返回TTL过期的域名
 当您允许返回TTL过期的IP时,SDK在实时返回过期IP的同时依然会进行异步更新以获取最新的IP信息
 @param enable 是否返回TTL过期域名
 - (void)setExpiredIPEnabled:(BOOL)enable;

 11、设置网络切换时是否自动刷新所有域名解析结果,
 如果打开此开关,在网络切换时,会自动刷新所有域名的解析结果,
 但会产生一定流量消耗
 @param enable
 - (void)setPreResolveAfterNetworkChanged:(BOOL)enable;

 12、设置网络请求的超时时间
 超时时间默认为15秒
 @param timeoutInterval 超时时间,单位为秒
 - (void)setTimeoutInterval:(NSTimeInterval)timeoutInterval;

 // ====================================================
从安全角度我们强烈建议用户使用 异步解析接口。
在DDOS攻击等特殊场景下,HTTPDNS有可能会触发流量黑洞,
此时同步接口就有可能出现短暂的请求解析超时等待,
而异步接口的网络请求都是后台操作的,业务层面不会感知到请求超时的动作,
能够做到对异常情况的冗余。
 
 13、同步解析接口,首先查询缓存,若存在则返回结果,
 若不存在则进行同步域名解析请求,解析完成返回最新解析结果,
 若解析失败返回nil
 @param host 域名(如www.aliyun.com)
 @return 域名对应的解析结果
 - (NSString *)getIpByHost:(NSString *)host;

 14、同步解析接口,首先查询缓存,若存在则返回结果,
 若不存在则进行同步域名解析请求,解析完成返回最新解析结果列表,
 若解析失败返回nil
 @param host 域名(如www.aliyun.com)
 @return 域名对应的解析结果列表
 - (NSArray *)getIpsByHost:(NSString *)host;

 15、同步解析接口,首先查询缓存,若存在则返回结果,
 若不存在则进行同步域名解析请求,解析完成返回最新解析结果,
 若解析失败返回空对象。返回的结果是URL使用场景下的格式化结果
 @param host 域名(如www.aliyun.com)
 @return 域名对应的解析结果
 - (NSString *)getIpByHostInURLFormat:(NSString *)host;

你可能感兴趣的:(配置阿里云 HttpDns_iOS_SDK)