本文介紹HTTPDNS iOS SDK的基礎配置介面。
初始化介面
通過此介面構建HTTPDNS全域服務執行個體。該執行個體採用單例設計模式,一旦初始化完成,該執行個體將持續存在於整個App生命週期中。開發人員無需重複建立,首次建立後,在該App生命週期中,只需在使用時直接調用[HttpDnsService sharedInstance]介面獲得該服務執行個體。
本介面提供兩個版本,分別用於無需加密情境和需加密情境。若啟用加密,則SDK內部向服務端發起請求時,請求參數和響應結果將會使用AES演算法進行加密。使用加密能力可以獲得更高的安全性,但在計費邏輯上也存在差異。關於計費邏輯可參考產品計費。
確保在使用HTTPDNS解析介面前,已經調用本介面初始化完成,否則解析將失敗。建議在 applicationDidFinishLaunching中完成初始化。
介面定義
- (nonnull instancetype)initWithAccountID:(NSInteger)accountID secretKey:(NSString * _Nonnull)secretKey;
- (nonnull instancetype)initWithAccountID:(NSInteger)accountID secretKey:(NSString * _Nonnull)secretKey aesSecretKey:(NSString * _Nullable)aesSecretKey;
所屬類
HttpDnsService
參數說明
參數 | 類型 | 是否必填 | 說明 |
accountId | int | 是 | 系統分配的Account ID,當您開通HTTPDNS後,您可以在控制台擷取到您阿里雲帳號對應的Account ID資訊。 |
secretKey | NSString | 是 | 鑒權對應的secretKey,同樣在阿里雲HTTPDNS控制台擷取。 |
aesSecretKey | NSString | 否 | 加密功能對應的 aesSecretKey,同樣在阿里雲HTTPDNS控制台擷取。若設定此參數,則SDK內部啟用加密功能。 |
擷取服務執行個體
在構造全域HTTPDNS服務執行個體之後,任何地方需要配置HTTPDNS或需要使用HTTPDNS解析網域名稱時,都可以通過此介面獲得全域單例。
介面定義
+ (instancetype)sharedInstance;
所屬類
HttpDnsService
是否使用HTTPS請求
設定SDK內部向服務端發起解析請求時,是否使用HTTPS協議。若不調用該介面,預設使用HTTP協議。
使用HTTPS請求將會獲得更高的安全性,但也要關注HTTP和HTTPS兩種方式在計費上的不同。關於計費邏輯可參考產品計費。
HTTP請求基於底層CFNetwork實現,不受ATS限制。
使用HTTPS請求是否還需要加密:兩者工作在不同層次。HTTPS協議保障傳輸層安全,但通過抓包方式仍可以查看參數和響應細節。AES加密保障HTTPDNS業務層安全,即使抓包也無法看到明文內容。因此,可以按需求決定是否都啟用。
介面定義
- (void)setHTTPSRequestEnabled:(BOOL)enable;
所屬類
HttpDnsService
參數說明
參數 | 類型 | 是否必填 | 說明 |
enable | BOOL | 是 | 取值如下: YES:使用HTTPS協議 NO:使用HTTP協議 |
是否允許使用到期IP
HTTPDNS iOS SDK遵循DNS協議,按照TTL緩衝網域名稱解析結果,從而提升App在發起網路請求時擷取IP的效率。當緩衝到期後,若App調用解析介面擷取IP,此時會有不同情況:
如果App調用的是同步非阻塞介面,因為緩衝已到期,但SDK又無法立即從服務端獲得新的解析結果,為了不阻塞線程,該介面將返回空結果,需要調用方做降級到LocalDNS解析的處理。
如果App調用的是同步介面或非同步介面,則SDK會發起解析請求從服務端擷取新的解析,這個過程需要一定時間,則同步介面會阻塞線程直到獲得新的解析結果,非同步介面將在獲得新的解析結果後才回調
completionHandler。
SDK提供設定選項,允許複用到期IP,設定為YES後,則上述兩種情況,雖然緩衝的IP到期了,但介面仍然可以立即返回這個到期的IP,從而減少DNS環節處理時間,提升網路請求效能。同時,SDK發現該IP到期,返回後,也會立即啟動非同步線程對這個網域名稱進行解析,從而擷取新的解析結果。
因此,開啟這個選項的副作用非常小,特別是在,所解析網域名稱本身的解析配置不會頻繁變動時(如主站網域名稱、靜態網關網域名稱等)。若網域名稱確實發生解析變更,則開啟該選項也只會影響該網域名稱緩衝到期後的第一個請求,因為SDK在被調用時發現IP到期,總是會立即發起對這個網域名稱的解析更新。
預設不允許。
如果商務服務器IP變化比較頻繁,建議謹慎啟用該功能,以免對業務造成影響。
在2.x.x版本及以前,本介面定義為
- (void)setExpiredIPEnabled:(BOOL)enable。
介面定義
- (void)setReuseExpiredIPEnabled:(BOOL)enable;
所屬類
HttpDnsService
參數說明
參數 | 類型 | 是否必填 | 說明 |
enable | BOOL | 是 | 是否允許解析介面返回TTL到期的緩衝解析結果。 YES:允許 NO:不允許 |
是否啟用持久化緩衝
持久化緩衝功能旨在最佳化啟動後的網域名稱解析環節耗時,進而提升首屏載入速度。
開啟後,HTTPDNS會將上一次解析到的結果儲存到本地持久層,App重啟後,每個網域名稱首次解析會優先從持久層擷取緩衝結果,以實現最快的解析效率。也正因如此,存在第一次使用的IP為到期IP的可能性,即該緩衝結果TTL已到期。但大多數情況下該IP依然可以正常使用,特別是對於解析記錄比較穩定的網域名稱。
為了避免App啟動後,複用了已經到期太久的緩衝(例如App上一次啟動是一個月前),本介面從3.1.2版本起,提供discardRecordsHasExpiredFor:(NSTimeInterval)duration參數。該參數決定App啟動後,從持久層載入緩衝到記憶體中時,丟棄已經到期超過duration時間長度的解析結果。建議設定為1天。
預設不開啟。
如果商務服務器IP變化比較頻繁,建議謹慎開啟該功能,以免對業務造成影響。
持久化緩衝僅影響第一次網域名稱解析結果,後續解析仍會請求HTTPDNS伺服器,並更新本機快取。
開啟此功能後,每次網路解析記錄,會更新到本機快取;App重啟後,首先載入本機快取到記憶體中。
在2.x.x版本及以前,本介面定義為
- (void)setCachedIPEnabled:(BOOL)enable;
介面定義
- (void)setPersistentCacheIPEnabled:(BOOL)enable;
- (void)setPersistentCacheIPEnabled:(BOOL)enable discardRecordsHasExpiredFor:(NSTimeInterval)duration; // (從3.1.2版本起提供)
所屬類
HttpDnsService
參數說明
參數 | 類型 | 是否必填 | 說明 |
enable | BOOL | 是 | 取值如下: YES:開啟 NO:關閉 |
duration | NSTimeInterval | 否 | 本參數僅在開啟了持久化緩衝的情況下有效。此時,啟動後,SDK從本地持久化緩衝中載入記錄到記憶體緩衝中時,將到期時間已經超過此 單位為秒值,預設是0秒。即,預設丟棄已經到期的記錄。 |
是否開啟網路變化自動解析
當裝置網路變化時(如從WIFI網路切換到蜂窩網路,或從移動網路切換到聯通網路),若HTTPDNS SDK繼續返回之前緩衝的解析IP,則可能導致業務網路請求發生跨網情況,影響請求效能和成功率。因此,SDK內部會監聽網路變化事件,智能決定是否清理全域解析緩衝。
此介面用於設定網路環境變化,SDK清理全域解析緩衝後,是否自動重新整理所有網域名稱的解析結果,若開啟,則保證切換網路後,業務網路請求也能立即拿到新的結果,降低網域名稱解析環節耗時,進而提升請求效能。
開啟此功能可能會輕微增加解析次數消耗。預設不開啟。
介面定義
- (void)setPreResolveAfterNetworkChanged:(BOOL)enable;
所屬類
HttpDnsService
參數說明
參數 | 類型 | 是否必填 | 說明 |
enable | BOOL | 是 | 取值如下: YES:開啟 NO:關閉 |