全部產品
Search
文件中心

HTTPDNS:配置介面

更新時間:Nov 06, 2025

配置介面是HTTPDNS Android SDK的基礎介面,負責SDK的初始化、參數配置和運行時調整。通過這些介面,您可以根據應用的具體需求定製SDK的行為,包括安全設定、緩衝策略、網路參數、效能最佳化等方面。

擷取服務執行個體

擷取HTTPDNS服務執行個體,HTTPDNS SDK支援多執行個體,不同的Account ID會返回不同的執行個體。

每個Account ID初始化的執行個體採用單例設計模式,一旦初始化完成,該執行個體將持續存在於整個App生命週期中,不會重複建立。

getService

介面定義

HttpDnsService getService(String accountID)

引入版本

2.6.3

所屬類

HttpDns

參數說明

參數

類型

是否必填

說明

accountID

String

系統分配的Account ID,當您開通HTTPDNS後,您可在EMAS控制台 > xx專案 > 平台服務 > HTTPDNS > 開發配置頁面擷取到您對應的Account ID資訊。

程式碼範例

val httpdns = HttpDns.getService(accountID)
HttpDnsService httpdns = HttpDns.getService(accountID);

設定Context

設定HTTPDNS解析過程中使用的應用程式環境資訊。

setContext

介面定義

InitConfig.Builder setContext(Context context)

引入版本

2.6.3

所屬類

InitConfig.Builder

參數說明

參數

類型

是否必填

說明

context

Context

設定當前app的applicationContext。

程式碼範例

InitConfig.Builder()
    .setContext(context)
new InitConfig.Builder()
    .setContext(context);

設定解析介面加簽密鑰

設定HTTPDNS解析過程中加簽時使用的密鑰。

設定密鑰後,SDK內部向服務端發起請求時,會對請求進行簽名,協助HTTPDNS服務端對解析請求進行身份認證和防篡改,進而提升SDK與服務端的互動安全性。

setSecretKey

介面定義

InitConfig.Builder setSecretKey(String secretKey)

說明
  • 該介面不會影響計費方式。

  • 為防止惡意反編譯擷取參數造成資訊泄露,建議您開啟混淆,並進行App加固後再發布上線。

引入版本

2.6.3

所屬類

InitConfig.Builder

參數說明

參數

類型

是否必填

說明

secretKey

String

加簽密鑰。

程式碼範例

InitConfig.Builder()
    .setSecretKey(secretKey)
new InitConfig.Builder()
    .setSecretKey(secretKey);

設定解析介面加密金鑰

設定HTTPDNS解析過程中加密時使用的密鑰。

設定加密金鑰後,SDK內部向服務端發起請求時,請求參數和響應結果將會使用AES演算法進行加密。使用加密能力可以獲得更高的安全性,但在計費邏輯上也存在差異。關於計費邏輯可參考產品計費

setAesSecretKey

介面定義

InitConfig.Builder setAesSecretKey(String aesSecretKey)

說明
  • 為防止惡意反編譯擷取參數造成資訊泄露,建議您開啟混淆,並進行App加固後再發布上線。

引入版本

2.6.3

所屬類

InitConfig.Builder

參數說明

參數

類型

是否必填

說明

aesSecretKey

String

加密金鑰。

程式碼範例

InitConfig.Builder()
    .setAesSecretKey(aesSecretKey)
new InitConfig.Builder()
    .setAesSecretKey(aesSecretKey);

是否使用HTTPS請求

HTTPDNS SDK進行網域名稱解析時,預設是通過HTTP協議發起解析請求,如果需要使用HTTPS協議發起解析請求,需要配置使用HTTPS協議進行網域名稱解析。

使用HTTPS請求將會獲得更高的安全性,但也要關注HTTP和HTTPS兩種方式在計費上的不同。關於計費邏輯可參考產品計費

setEnableHttps

介面定義

InitConfig.Builder setEnableHttps(boolean enableHttps)

說明
  • 使用HTTPS請求是否還需要加密:兩者工作在不同層次。HTTPS協議保障傳輸層安全,但通過抓包方式仍可以查看參數和響應細節。AES加密保障HTTPDNS業務層安全,即使抓包也無法看到明文內容。因此,可以按需求決定是否都啟用。

引入版本

2.2.2

所屬類

InitConfig.Builder

參數說明

參數

類型

是否必填

說明

enableHttps

boolean

設定是否使用https協議解析網域名稱。

  • true, 開啟https解析

  • false, 關閉https解析

程式碼範例

InitConfig.Builder()
    .setEnableHttps(true)
new InitConfig.Builder()
    .setEnableHttps(true);

是否允許使用到期IP

遵循DNS協議,按照TTL緩衝網域名稱解析結果,從而提升App在發起網路請求時擷取IP的效率。當緩衝到期後,若App調用解析介面擷取IP,此時會有不同情況:

  1. 如果App調用的是同步非阻塞介面,因為緩衝已到期,但SDK又無法立即從服務端獲得新的解析結果,為了不阻塞線程,該介面將返回空結果,需要調用方做降級到LocalDNS解析的處理。

  2. 如果App調用的是同步介面或非同步介面,則SDK會發起解析請求從服務端擷取新的解析,這個過程需要一定時間,則同步介面會阻塞線程直到獲得新的解析結果,非同步介面將在獲得新的解析結果後才回調。

SDK提供設定選項,允許複用到期IP,設定為true後,則上述兩種情況,雖然緩衝的IP到期了,但介面仍然可以立即返回這個到期的IP,從而減少DNS環節處理時間,提升網路請求效能。同時,SDK發現該IP到期,返回後,也會立即啟動非同步線程對這個網域名稱進行解析,從而擷取新的解析結果。

因此,開啟這個選項的副作用非常小,特別是在,所解析網域名稱本身的解析配置不會頻繁變動時(如主站網域名稱、靜態網關網域名稱等)。若網域名稱確實發生解析變更,則開啟該選項也只會影響該網域名稱緩衝到期後的第一個請求,因為SDK在被調用時發現IP到期,總是會立即發起對這個網域名稱的解析更新

預設允許。

重要

當設定為true時,SDK在即時返回到期IP的同時依然會進行非同步更新以擷取最新的IP資訊。

setEnableExpiredIp

介面定義

InitConfig.Builder setEnableExpiredIp(boolean enableExpiredIp)

引入版本

2.2.2

所屬類

InitConfig.Builder

參數說明

參數

類型

是否必填

說明

enableExpiredIp

boolean

設定是否允許返回超過ttl 的ip。

  • true, 允許返回到期IP

  • false, 不返回到期IP

程式碼範例

InitConfig.Builder()
    .setEnableExpiredIp(true)
new InitConfig.Builder()
    .setEnableExpiredIp(true);

是否開啟本機快取

持久化緩衝功能旨在最佳化啟動後的網域名稱解析環節耗時,進而提升首屏載入速度。

開啟後,HTTPDNS會將上一次解析到的結果儲存到本地持久層,App重啟後,每個網域名稱首次解析會優先從持久層擷取緩衝結果,以實現最快的解析效率。也正因如此,存在第一次使用的IP為到期IP的可能性,即該緩衝結果TTL已到期。但大多數情況下該IP依然可以正常使用,特別是對於解析記錄比較穩定的網域名稱。

為了避免App啟動後,複用了已經到期太久的緩衝(例如App上一次啟動是一個月前),該介面提供了expiredThresholdMillis參數,該參數決定App啟動後,從持久層載入緩衝到記憶體中時,丟棄已經到期超過expiredThresholdMillis時間長度的解析結果。建議設定為1天。

預設不開啟。

setEnableCacheIp

介面定義

InitConfig.Builder setEnableCacheIp(boolean enableCacheIp, long expiredThresholdMillis)

說明
  • 開啟本機快取時,支援指定清除到期一段時間後的本機快取結果。

  • 如果商務服務器IP變化比較頻繁,建議謹慎開啟該功能,以免對業務造成影響。

  • 持久化緩衝僅影響第一次網域名稱解析結果,後續解析仍會請求HTTPDNS伺服器,並更新本機快取。

  • 開啟此功能後,每次網路解析記錄,會更新到本機快取;App重啟後,首先載入本機快取到記憶體中。

引入版本

2.4.3

所屬類

InitConfig.Builder

參數說明

參數

類型

是否必填

說明

enableCacheIp

boolean

控制是否啟用本機快取。

  • true, 開啟本機快取

  • false, 關閉本機快取

expiredThresholdMillis

long

調用本介面時,SDK從本機快取中載入記錄到記憶體緩衝中時,將到期時間已經超過此expiredThresholdMillis的本機快取記錄清除。

單位為毫秒,預設是0毫秒。即,預設丟棄已經到期的記錄。最大是1年。

程式碼範例

InitConfig.Builder()
    .setEnableCacheIp(true, DateUtils.YEAR_IN_MILLIS)
new InitConfig.Builder()
    .setEnableCacheIp(true, DateUtils.YEAR_IN_MILLIS);

setEnableCacheIp

介面定義

InitConfig.Builder setEnableCacheIp(boolean enableCacheIp)

說明

調用本方法,從本地持久化緩衝中載入記錄到記憶體緩衝中時,會將已經到期的本機快取記錄清除。

引入版本

2.2.2

所屬類

InitConfig.Builder

參數說明

參數

類型

是否必填

說明

enableCacheIp

boolean

控制是否啟用本機快取。

  • true, 開啟本機快取

  • false, 關閉本機快取

程式碼範例

InitConfig.Builder()
    .setEnableCacheIp(true)
new InitConfig.Builder()
    .setEnableCacheIp(true);

是否開啟網路變化自動解析

當裝置網路變化時(如從WIFI網路切換到蜂窩網路,或從移動網路切換到聯通網路),若HTTPDNS SDK繼續返回之前緩衝的解析IP,則可能導致業務網路請求發生跨網情況,影響請求效能和成功率。因此,SDK內部會監聽網路變化事件,智能決定是否清理全域解析緩衝。

此介面用於設定網路環境變化,SDK清理全域解析緩衝後,是否自動重新整理所有網域名稱的解析結果,若開啟,則保證切換網路後,業務網路請求也能立即拿到新的結果,降低網域名稱解析環節耗時,進而提升請求效能。

開啟此功能可能會輕微增加解析次數消耗。預設不開啟。

重要
  • WiFi、蜂窩、無網這三個狀態的切換算網路切換。

  • 4G與3G切換不算網路切換。

  • SIM卡切換也不會單獨處理。

setPreResolveAfterNetworkChanged

介面定義

InitConfig.Builder setPreResolveAfterNetworkChanged(boolean enable)

引入版本

2.4.0

所屬類

InitConfig.Builder

參數說明

參數

類型

是否必填

說明

enable

boolean

設定是否在網路切換時,重新解析緩衝中的所有網域名稱。

  • 如果設定為true,那麼網路切換時就會解析重新整理緩衝中的所有網域名稱

  • 如果設定為false或不設定,那麼網路切換時SDK僅僅會刪除所有網域名稱的緩衝,只有當下次訪問網域名稱時,才會去重新解析

程式碼範例

InitConfig.Builder()
    .setPreResolveAfterNetworkChanged(true)
new InitConfig.Builder()
    .setPreResolveAfterNetworkChanged(true);

逾時配置

設定網域名稱解析逾時時間,預設為2000ms。

setTimeoutMillis

介面定義

InitConfig.Builder setTimeoutMillis(int timeoutInterval)

引入版本

2.4.0

所屬類

InitConfig.Builder

參數說明

參數

類型

是否必填

說明

timeoutInterval

int

設定網域名稱解析逾時時間,時間單位為毫秒。 預設2000ms,最大5000ms。

程式碼範例

InitConfig.Builder()
    setTimeoutMillis.(2 * 1000)
new InitConfig.Builder()
    .setTimeoutMillis(2 * 1000);

校正App簽章時間

進行該操作後,如果有偏差,每次網路請求都會對裝置進行時間校正;不進行該操作的話將以裝置時間為準。

重要
  • 使用情境:有可能手機上的時間不太準確。

  • 校正操作在App的一個生命週期內生效,App重啟後需要重新設定才能重新生效,可以重複設定。

  • 您需要一個時間服務,可以自建,簡單的時間戳記介面就可以,請求這個時間服務返回正確的時間,然後將時間填入本介面,SDK就能知道和正確時間差了多少。

setAuthCurrentTime

介面定義

void setAuthCurrentTime(long time)

引入版本

1.3.2

所屬類

HttpDnsService

參數說明

參數

類型

是否必填

說明

time

long

目前時間的時間戳記

程式碼範例

val httpdns = HttpDns.getService(accountID)
httpdns?.setAuthCurrentTime(System.currentTimeMillis())
HttpDnsService httpdns = HttpDns.getService(accountID);
httpdns.setAuthCurrentTime(System.currentTimeMillis());

設定region節點

如果APP需要在海外環境使用HTTPDNS,為了提升解析效率,可以主動設定本SDK的啟動服務節點。設定節點後,SDK會使用該節點進行網域名稱解析和進行隨後的調度節點列表更新。

setRegion

初始化設定region節點。

介面定義

InitConfig.Builder setRegion(Region region)

引入版本

2.4.2

所屬類

InitConfig.Builder

參數說明

參數

類型

是否必填

說明

region

Region

region為節點,設定海外region,用于海外服務地區選取項目。

setRegion

更新region節點。

介面定義

void setRegion(Region region)

引入版本

2.4.2

所屬類

HttpDnsService

參數說明

參數

類型

是否必填

說明

region

Region

region為節點,設定海外region,用于海外服務地區選取項目。

setRegion

更新region節點。

介面定義

void setRegion(String region)

引入版本

1.3.2

所屬類

HttpDnsService

參數說明

參數

類型

是否必填

說明

region

String

region為節點,設定海外region,用于海外服務地區選取項目,當前僅支援hk(中國香港節點)、sg(新加坡節點)、de(德國節點)和us(美國節點),填寫後返回當地的服務節點。

重要

如果APP在海外環境使用HTTPDNS,為了提升解析效率,請設定合適的海外服務節點。

自訂解析結果TTL

每條解析結果,預設是使用服務端下發的TTL來判斷是否到期。如果您需要修改解析結果的TTL,可以通過下面的介面進行配置。

configCacheTtlChanger

介面定義

InitConfig.Builder configCacheTtlChanger(CacheTtlChanger changer)

引入版本

2.3.0

所屬類

InitConfig.Builder

參數定義

參數

類型

是否必填

說明

changer

CacheTtlChanger

自訂TTL

程式碼範例

InitConfig.Builder().configCacheTtlChanger { host, requestIpType, ttl ->
    if (TextUtils.equals(host, "www.aliyun.com")) {
        // 這邊以www.aliyun.com作為樣本
        ttl * 10
    } else ttl
}
new InitConfig.Builder().configCacheTtlChanger(new CacheTtlChanger() {
    @Override
    public int changeCacheTtl(String host, RequestIpType requestIpType, int ttl) {
        // 這邊以www.aliyun.com作為樣本
        if (TextUtils.equals(host, "www.aliyun.com")) {
            return ttl * 10;
        }

        return ttl;
    }
});

設定HTTPDNS的網域名稱黑名單

如果您需要對特定網域名稱限制不使用HTTPDNS去進行網域名稱解析,可以在這個介面裡過濾掉這些網域名稱,被過濾的網域名稱會返回空的解析結果,您需要降級到local dns進行網域名稱解析。

setNotUseHttpDnsFilter

介面定義

InitConfig.Builder setNotUseHttpDnsFilter(NotUseHttpDnsFilter filter)

引入版本

2.4.0

所屬類

InitConfig.Builder

參數說明

參數

類型

是否必填

說明

filter

NotUseHttpDnsFilter

配置黑名單策略

程式碼範例

InitConfig.Builder().setNotUseHttpDnsFilter { hostName ->
    TextUtils.equals(
        hostName,
        "www.aliyun.com"
    )
}
new InitConfig.Builder().setNotUseHttpDnsFilter(new NotUseHttpDnsFilter() {
    @Override
    public boolean notUseHttpDns(String hostName) {
        return TextUtils.equals(hostName, "www.aliyun.com");
    }
});

啟用IP優選

設定IP優選列表,設定該介面後,如果解析了相應的網域名稱,則SDK會對返回的IP進行IP測速,對返回的列表進行動態排序,以保證第一個IP是可用性較好的IP。

說明

僅支援IPv4地址的優選。

setIPRankingList

介面定義

InitConfig.Builder setIPRankingList(List<IPRankingBean> ipRankingList)

引入版本

2.3.2

所屬類

InitConfig.Builder

參數說明

參數

類型

是否必填

說明

ipRankingList

List<IPRankingBean>

設定IP優選列表,設定該介面後,如果解析了相應的網域名稱,則SDK會對返回的IP進行IP測速,對返回的列表進行動態排序,以保證第一個IP是可用性較好的IP。

程式碼範例

val list = ArrayList<IPRankingBean>()
list.add(IPRankingBean("www.aliyun.com", 8080))
InitConfig.Builder().setIPRankingList(list)
ArrayList<IPRankingBean> list = new ArrayList<IPRankingBean>();
list.add(new IPRankingBean("www.aliyun.com", 8080));
new InitConfig.Builder().setIPRankingList(list);

設定自訂解析全域參數

該全域參數不影響自訂解析介面的額外參數設定,會和自訂解析介面的額外參數合并。

setSdnsGlobalParams

介面定義

InitConfig.Builder setSdnsGlobalParams(Map<String, String> params)

引入版本

2.4.0

所屬類

InitConfig.Builder

參數說明

參數

類型

是否必填

說明

params

Map<String, String>

用於自訂解析,全域參數,每個自訂解析請求都會帶上這些全域參數。

程式碼範例

val params: MutableMap<String, String> = HashMap()
params["level"] = "1"
InitConfig.Builder()
    .setSdnsGlobalParams(params)
Map<String, String> params = new HashMap<>();
params.put("level", "1");
new InitConfig.Builder()
        .setSdnsGlobalParams(params);