美文网首页111
配置阿里云 HttpDns_iOS_SDK

配置阿里云 HttpDns_iOS_SDK

作者: 双门 | 来源:发表于2017-06-15 14:24 被阅读385次

    首先下载 阿里云 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 <AlicloudHttpDNS/AlicloudHttpDNS.h>
    • 在 - (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<HttpDNSDegradationDelegate>)delegate;
     @protocol HttpDNSDegradationDelegate <NSObject>
    
     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

        本文链接:https://www.haomeiwen.com/subject/uusyqxtx.html