/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #import #import "HttpdnsDegradationDelegate.h" #import "HttpdnsLoggerDelegate.h" #define ALICLOUD_HTTPDNS_DEPRECATED(explain) __attribute__((deprecated(explain))) extern NSString *const ALICLOUDHDNS_IPV4; extern NSString *const ALICLOUDHDNS_IPV6; typedef NS_ENUM(NSUInteger, AlicloudHttpDNS_IPType) { AlicloudHttpDNS_IPTypeV4, //ipv4 AlicloudHttpDNS_IPTypeV6, //ipv6 AlicloudHttpDNS_IPTypeV64, //ipv4 + ipv6 }; @interface HttpDnsService: NSObject @property (nonatomic, assign, readonly) int accountID; @property (nonatomic, copy, readonly) NSString *secretKey; @property (nonatomic, weak, setter=setDelegateForDegradationFilter:) id delegate; @property (nonatomic, assign) NSTimeInterval timeoutInterval; - (instancetype)autoInit; - (instancetype)initWithAccountID:(int)accountID; /*! * @brief 启用鉴权功能的初始化接口 * @details 初始化、开启鉴权功能,并设置 HTTPDNS 服务 Account ID,鉴权功能对应的 secretKey。 * 您可以从控制台获取您的 Account ID 、secretKey 信息。 * 此方法会初始化为单例。 * @param accountID 您的 HTTPDNS Account ID * @param secretKey 鉴权对应的 secretKey */ - (instancetype)initWithAccountID:(int)accountID secretKey:(NSString *)secretKey; /*! * @brief 校正 App 签名时间 * @param authCurrentTime 用于校正的时间戳,正整数。 * @details 不进行该操作,将以设备时间为准,为`(NSUInteger)[[NSDate date] timeIntervalSince1970]`。进行该操作后,如果有偏差,每次网络请求都会对设备时间进行矫正。 * @attention 校正操作在 APP 的一个生命周期内生效,APP 重启后需要重新设置才能重新生效。可以重复设置。 */ - (void)setAuthCurrentTime:(NSUInteger)authCurrentTime; + (instancetype)sharedInstance; /// 设置持久化缓存功能 /// @param enable YES: 开启 NO: 关闭 - (void)setCachedIPEnabled:(BOOL)enable; /// 是否允许 HTTPDNS 返回 TTL 过期域名的 ip ,建议允许(默认不允许) /// @param enable YES: 开启 NO: 关闭 - (void)setExpiredIPEnabled:(BOOL)enable; /// * 设置 HTTPDNS 域名解析请求类型 ( HTTP / HTTPS ) /// 若不调用该接口,默认为 HTTP 请求。 /// HTTP 请求基于底层 CFNetwork 实现,不受 ATS 限制; /// @param enable YES: HTTPS请求 NO: HTTP请求 - (void)setHTTPSRequestEnabled:(BOOL)enable; /// 设置 region 节点,调用后,会按照 region 更新服务IP /// @param region region为节点,可设置海外region - (void)setRegion:(NSString *)region; /// 域名预解析 (ipv4) /// 选择性的预先向 HTTPDNS SDK 中注册您后续可能会使用到的域名,以便 SDK 提前解析,减少后续解析域名时请求的时延 /// @param hosts 预解析列表数组 - (void)setPreResolveHosts:(NSArray *)hosts; /// 域名预解析 /// @param hosts 域名 /// @param ipType 4: ipv4; 6: ipv6; 64: ipv4+ipv6 - (void)setPreResolveHosts:(NSArray *)hosts queryIPType:(AlicloudHttpDNS_IPType)ipType; /// 本地日志 log 开关 /// @param enable YES: 打开 NO: 关闭 - (void)setLogEnabled:(BOOL)enable; /// 设置网络切换时是否自动跟新所有域名解析结果 /// 如果打开此开关,在网络切换时,会自动刷新所有域名的解析结果,但会产生一定流量消耗 /// @param enable YES: 开启 NO: 关闭 - (void)setPreResolveAfterNetworkChanged:(BOOL)enable; /// 设置IP俳优规则 /// @param IPRankingDatasource 设置对应域名的端口号 /// @{host: port} - (void)setIPRankingDatasource:(NSDictionary *)IPRankingDatasource; /// 设置是否 开启 IPv6 结果解析 /// 开启后调用 getIPv6ByHostAsync: 接口使用 ///【注意】开启 IPv6 结果解析后,SDK在 IPv6-Only 网络环境下,对 IPv4 解析结果不再自动转换为 IPv6 地址, getIpsByHostAsync:返回 IPv4 地址,getIPv6ByHostAsync:返回 IPv6 地址 /// @param enable YES: 开启 NO: 关闭 - (void)enableIPv6:(BOOL)enable; /// 是否允许通过 CNCopyCurrentNetworkInfo 获取wifi ssid bssid /// @param enable YES: 开启 NO: 关闭 ,默认关闭 - (void)enableNetworkInfo:(BOOL)enable; /// 获取用于用户追踪的 sessionId /// sessionId为随机生成,长度为 12 位,App 生命周期内保持不变 /// 为了排查可能的解析问题,需要您将 sessionId 和解析出的 IP 一起记录在日志中 /// 请参考: 解析异常排查之 “会话追踪方案” https://help.aliyun.com/document_detail/100530.html - (NSString *)getSessionId; /// 获取域名对应的IP,单IP /// @param host 域名 - (NSString *)getIpByHostAsync:(NSString *)host; /// 获取域名对应的IP数组,多IP /// @param host 域名 - (NSArray *)getIpsByHostAsync:(NSString *)host; /// 获取域名对应格式化后的IP (针对ipv6) /// @param host 域名 - (NSString *)getIpByHostAsyncInURLFormat:(NSString *)host; /// 获取域名对应的ipv6, 单IP (需要开启ipv6 开关 enableIPv6) /// @param host 域名 - (NSString *)getIPv6ByHostAsync:(NSString *)host; /// 获取域名对应的ipv6数组, 多IP (需要开启ipv6 开关 enableIPv6) /// @param host 域名 - (NSArray *)getIPv6sByHostAsync:(NSString *)host; /// 同时获取ipv4 ipv6的IP (需要开启ipv6 开关 enableIPv6) /// @param host 域名 /// @result 返回字典类型结构 /// { /// ALICLOUDHDNS_IPV4: ['xxx.xxx.xxx.xxx', 'xxx.xxx.xxx.xxx'], /// ALICLOUDHDNS_IPV6: ['xx:xx:xx:xx:xx:xx:xx:xx', 'xx:xx:xx:xx:xx:xx:xx:xx'] /// } - (NSDictionary *)getIPv4_v6ByHostAsync:(NSString *)host; /// 清除指定host缓存(内存+沙盒数据库) /// @param hostArray 需要清除的host域名数组。如果需要清空全部数据传nil或者空数组即可 - (void)cleanHostCache:(NSArray *)hostArray; /// 设置日志输出回调 - (void)setLogHandler:(id)logHandler; - (void)setSdnsGlobalParams:(NSDictionary *)params; - (void)clearSdnsGlobalParams; - (NSDictionary *)getIpsByHostAsync:(NSString *)host withParams:(NSDictionary *)params withCacheKey:(NSString *)cacheKey; @end @interface HttpDnsService (HttpdnsDeprecated) - (void)setAccountID:(int)accountID ALICLOUD_HTTPDNS_DEPRECATED("Deprecated in v1.5.2. Use -[HttpDnsService initWithAccountID:] instead."); @end