集成httpdns
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* 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 <Foundation/Foundation.h>
|
||||
|
||||
static NSString *const HTTPDNS_IOS_SDK_VERSION = @"2.0.5";
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "HttpdnsLoggerDelegate.h"
|
||||
#import "HttpdnsServiceProvider.h"
|
||||
#import "HttpdnsDegradationDelegate.h"
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef HttpdnsDegradationDelegate_h
|
||||
#define HttpdnsDegradationDelegate_h
|
||||
|
||||
@protocol HttpDNSDegradationDelegate <NSObject>
|
||||
|
||||
- (BOOL)shouldDegradeHTTPDNS:(NSString *)hostName;
|
||||
|
||||
@end
|
||||
|
||||
#endif /* HttpdnsDegradationDelegate_h */
|
||||
@@ -0,0 +1,20 @@
|
||||
//
|
||||
// HttpdnsLoggerProtocol.h
|
||||
// AlicloudHttpDNS
|
||||
//
|
||||
// Created by junmo on 2018/12/19.
|
||||
// Copyright © 2018年 alibaba-inc.com. All rights reserved.
|
||||
//
|
||||
|
||||
#ifndef HttpdnsLoggerProtocol_h
|
||||
#define HttpdnsLoggerProtocol_h
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@protocol HttpdnsLoggerProtocol <NSObject>
|
||||
|
||||
- (void)log:(NSString *)logStr;
|
||||
|
||||
@end
|
||||
|
||||
#endif /* HttpdnsLoggerProtocol_h */
|
||||
@@ -0,0 +1,184 @@
|
||||
/*
|
||||
* 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 <Foundation/Foundation.h>
|
||||
#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<HttpDNSDegradationDelegate> 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<NSString *, NSNumber *> *)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 <NSString *, NSArray *>*)getIPv4_v6ByHostAsync:(NSString *)host;
|
||||
|
||||
|
||||
|
||||
/// 清除指定host缓存(内存+沙盒数据库)
|
||||
/// @param hostArray 需要清除的host域名数组。如果需要清空全部数据传nil或者空数组即可
|
||||
- (void)cleanHostCache:(NSArray <NSString *>*)hostArray;
|
||||
|
||||
|
||||
|
||||
/// 设置日志输出回调
|
||||
- (void)setLogHandler:(id<HttpdnsLoggerProtocol>)logHandler;
|
||||
- (void)setSdnsGlobalParams:(NSDictionary<NSString *, NSString *> *)params;
|
||||
- (void)clearSdnsGlobalParams;
|
||||
- (NSDictionary *)getIpsByHostAsync:(NSString *)host withParams:(NSDictionary<NSString *, NSString *> *)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
|
||||
@@ -0,0 +1,6 @@
|
||||
framework module AlicloudHttpDNS {
|
||||
umbrella header "AlicloudHttpDNS.h"
|
||||
|
||||
export *
|
||||
module * { export * }
|
||||
}
|
||||
Reference in New Issue
Block a user