全部產品
Search
文件中心

HTTPDNS:高階配置介面

更新時間:Jul 24, 2025

本文介紹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 *

節點名,當前可用節點為 中國內地節點、中國香港節點、新加坡節點、德國節點,美國節點,分別對應以下宏:

  • ALICLOUD_HTTPDNS_DEFAULT_REGION_KEY

  • ALICLOUD_HTTPDNS_HONGKONG_REGION_KEY

  • ALICLOUD_HTTPDNS_SINGAPORE_REGION_KEY

  • ALICLOUD_HTTPDNS_GERMANY_REGION_KEY

  • ALICLOUD_HTTPDNS_AMERICA_REGION_KEY

自訂解析結果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