本文介紹iOS SDK高階配置介面。
是否允許HTTPDNS列印Log
本地日誌調試日誌開關,可以開啟調試日誌排查解析相關問題。上線時建議關閉。
介面定義
- (void)setLogEnabled:(BOOL)enable;
所屬類
HttpDnsService
參數說明
參數 | 類型 | 是否必填 | 說明 |
enable | BOOL | 是 | 日誌開關 |
設定接收SDK日誌的回調類
開啟HTTPDNS日誌開關後,若希望日誌列印到自訂目標處,可以通過此回調配置實現。如希望通過記錄檔收集相關解析日誌,則可以通過此回調把日誌寫入相關檔案中。
介面定義
- (void)setLogHandler:(id<HttpdnsLoggerProtocol>)logHandler;
所屬類
HttpDnsService
參數說明
參數 | 類型 | 是否必填 | 說明 |
logHandler | id<HttpdnsLoggerProtocol> | 是 | 設定日誌輸出回調。 |
範例程式碼
參考如下代碼實現日誌接收類。
#import "HttpdnsLoggerProtocol.h"
@interface MyLoggerHandler : NSObject <HttpdnsLoggerProtocol>
@end
@implementation MyLoggerHandler
- (void)log:(NSString *)logStr {
NSLog(@"[myLog] - %@", logStr);
}
@end啟用IP優選
指定網域名稱對應服務的探測連接埠,設定該介面後,如果解析了相應的網域名稱,則SDK會對解析返回的IP列表進行TCP建連測速,根據測速結果對該IP列表進行動態排序,以保證第一個IP是可用性最好的IP。
v3.2.0版本開始支援。如果IP列表包含v4、v6兩種類型,則會進行分開測速和排序。
網路測速需要一定時間,首次調用介面觸發HTTPDNS解析網域名稱後,立即獲得的IP列表可能未經排序。
當提供服務的多個IP入口存在明顯的效能差異或者網路環境差異時,可能所有用戶端的測速結果都相近,導致所有的用戶端都向同一個服務IP發起業務請求,造成負載失衡,影響穩定性。因此需要謹慎評估是否啟用IP優選。
介面定義
- (void)setIPRankingDatasource:(NSDictionary<NSString *, NSNumber *> *)IPRankingDatasource;
參數說明
參數 | 類型 | 是否必填 | 說明 |
IPRankingDatasource | NSDictionary<NSString *, NSNumber *> | 是 | 設定對應網域名稱的連接埠號碼 @{host: port} |
程式碼範例
HttpDnsService *httpdns = [[HttpDnsService alloc] initWithAccountID:xxxx secretKey:@"xxxxx"];
NSDictionary *IPRankingDatasource = @{
@"www.aliyun.com" : @443,
@"www.taobao.com" : @443,
@"www.exmaple.com" : @443
};
[httpdns setIPRankingDatasource:IPRankingDatasource];校正App簽章時間
進行該操作後,如果有偏差,每次網路請求都會對裝置進行時間校正,避免鑒權模式下,請求因為裝置時間到期導致鑒權校正不通過。不進行該操作的話將以裝置時間為準。
該功能僅適用於SDK v3.0.0及以上版本。
使用情境:有可能手機上的時間不太準確。
校正操作在App的一個生命週期內生效,App重啟後需要重新設定才能重新生效,可以重複設定。
您需要一個時間服務,可以自建,簡單的時間戳記介面就可以。APP啟動後,請求這個時間服務返回正確的時間,再將時間設定到本介面,SDK就能知道裝置時間和正確時間的偏離值,隨後在請求時自動校正時間。
在2.x.x版本及以前,本介面定義為
- (void)setAuthCurrentTime:(NSTimeInterval)currentTime;
介面定義
- (void)setInternalAuthTimeBaseBySpecifyingCurrentTime:(NSTimeInterval)currentTime;
所屬類
HttpDnsService
參數說明
參數 | 類型 | 是否必填 | 說明 |
currentTime | NSTimeInterval | 是 | 用於校正的準確時間戳記,單位為秒。 |
設定region節點
如果APP需要在海外環境使用HTTPDNS,為了提升解析效率,可以主動設定本SDK的啟動服務節點。設定節點後,SDK會使用該節點進行網域名稱解析和進行隨後的調度節點列表更新。
預設無需設定,即使App在海外環境啟動,SDK內部也會自動調度到最近的海外節點,對效率的影響並不明顯。
該功能僅適用於SDK v3.1.0及以上版本。
介面定義
- (void)setRegion:(NSString *)region;
所屬類
HttpDnsService
參數說明
參數 | 類型 | 是否必填 | 說明 |
region | NSString * | 是 | 節點名,當前可用節點為 中國內地節點、中國香港節點、新加坡節點、德國節點,美國節點,分別對應以下宏:
|
自訂解析結果TTL
若需要在APP本地指定某個網域名稱的TTL,覆蓋真實的網域名稱配置,則可以通過此代理介面實現。
介面定義
- (int64_t)httpdnsHost:(NSString *)host ipType:(AlicloudHttpDNS_IPType)ipType ttl:(int64_t)ttl;
所屬類
HttpdnsTTLDelegate
回調參數說明
參數 | 類型 | 說明 |
host | NSString * | 需要自訂ttl的網域名稱 |
ipType | AlicloudHttpDNS_IPType | 什麼查詢類型下需要自訂ttl |
ttl | int64_t | 該網域名稱從服務端返回的原始ttl |
程式碼範例
@interface AppDelegate () <HttpdnsTTLDelegate>
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 傳入對應的accountID
HttpDnsService *httpdns = [[HttpDnsService alloc] initWithAccountID:xxxx secretKey:@"xxxx"];
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