設定インターフェイスは、HTTPDNS Android SDK のコアインターフェイスです。SDK の初期化、パラメーター設定、およびランタイム調整を処理します。これらのインターフェイスを使用すると、セキュリティ設定、キャッシュポリシー、ネットワークパラメーター、パフォーマンスの最適化など、SDK の動作をカスタマイズして、アプリケーションの特定のニーズを満たすことができます。
サービスインスタンスの取得
HTTPDNS サービスインスタンスを取得できます。HTTPDNS SDK は複数のインスタンスをサポートしており、異なる Account ID は異なるインスタンスを返します。
Account ID で初期化された各インスタンスは、シングルトンデザインパターンを使用します。初期化後、インスタンスはアプリケーションのライフサイクル全体で永続化され、再度作成されることはありません。
getService
インターフェイス定義
HttpDnsService getService(String accountID)
導入バージョン
2.6.3
クラス
HttpDns
パラメーター
パラメーター | タイプ | 必須 | 説明 |
accountID | String | はい | システムによって割り当てられた Account ID。HTTPDNS を有効化した後、EMAS コンソール > [プロジェクト名] > プラットフォームサービス > HTTPDNS > 開発設定ページで Account ID を確認できます。 |
コード例
val httpdns = HttpDns.getService(accountID)HttpDnsService httpdns = HttpDns.getService(accountID);コンテキストの設定
HTTPDNS 名前解決に使用されるアプリケーション環境コンテキストを設定します。
setContext
インターフェイス定義
InitConfig.Builder setContext(Context context)
導入バージョン
2.6.3
クラス
InitConfig.Builder
パラメーター
パラメーター | タイプ | 必須 | 説明 |
context | Context | はい | 現在のアプリの applicationContext を設定します。 |
コード例
InitConfig.Builder()
.setContext(context)new InitConfig.Builder()
.setContext(context);名前解決インターフェイスの署名キーの設定
HTTPDNS 名前解決のリクエストに署名するために使用されるキーを設定します。
キーを設定すると、SDK はサーバーに送信されるリクエストに署名します。これにより、HTTPDNS サーバーは名前解決リクエストに対して身分認証と改ざん防止を実行でき、SDK とサーバー間のインタラクションのセキュリティが向上します。
setSecretKey
インターフェイス定義
InitConfig.Builder setSecretKey(String secretKey)
このインターフェイスは課金方法に影響しません。
悪意のある逆コンパイルによる情報漏洩を防ぐため、アプリケーションを公開する前に難読化を有効にし、アプリケーションを強化してください。
導入バージョン
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)
悪意のある逆コンパイルによる情報漏洩を防ぐため、アプリケーションを公開する前に難読化を有効にし、アプリケーションを強化してください。
導入バージョン
2.6.3
クラス
InitConfig.Builder
パラメーター
パラメーター | タイプ | 必須 | 説明 |
aesSecretKey | String | はい | 暗号鍵。 |
コード例
InitConfig.Builder()
.setAesSecretKey(aesSecretKey)new InitConfig.Builder()
.setAesSecretKey(aesSecretKey);HTTPS リクエストの使用
デフォルトでは、HTTPDNS SDK は HTTP プロトコルを使用して名前解決リクエストを送信します。代わりに HTTPS プロトコルを使用するには、ドメイン名の名前解決に HTTPS を使用するように SDK を設定する必要があります。
HTTPS リクエストを使用するとセキュリティは向上しますが、HTTP リクエストと HTTPS リクエストの課金は異なります。課金の詳細については、「製品の課金」をご参照ください。
setEnableHttps
インターフェイス定義
InitConfig.Builder setEnableHttps(boolean enableHttps)
HTTPS と AES 暗号化は異なるレイヤーで動作します。HTTPS プロトコルはトランスポート層セキュリティを保証します。ただし、パケットをキャプチャすることで、パラメーターと応答の詳細を表示できます。AES 暗号化は HTTPDNS サービスレイヤーを保護し、パケットがキャプチャされてもプレーンテキストコンテンツが表示されないようにします。したがって、必要に応じて両方の機能を有効にすることができます。
導入バージョン
2.2.2
クラス
InitConfig.Builder
パラメーター
パラメーター | タイプ | 必須 | 説明 |
enableHttps | boolean | はい | ドメイン名の名前解決に HTTPS プロトコルを使用するかどうかを指定します。
|
コード例
InitConfig.Builder()
.setEnableHttps(true)new InitConfig.Builder()
.setEnableHttps(true);期限切れ IP アドレスの使用許可
SDK は DNS プロトコルに従い、Time to Live (TTL) に基づいてドメイン名の名前解決結果をキャッシュします。これにより、アプリケーションがネットワークリクエストを開始したときに IP アドレスを取得する効率が向上します。キャッシュの有効期限が切れると、アプリケーションが名前解決インターフェイスを呼び出して IP アドレスを取得する場合、さまざまなシナリオが発生します。
アプリケーションがキャッシュの有効期限が切れたときに同期非ブロッキングインターフェイスを呼び出す場合、SDK はサーバーから新しい名前解決結果をすぐに取得できません。スレッドのブロッキングを避けるため、インターフェイスは空の結果を返します。その後、呼び出し元はローカル DNS 名前解決にフォールバックする必要があります。
アプリケーションが同期または非同期インターフェイスを呼び出す場合、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 アドレスの返却を許可するかどうかを指定します。
|
コード例
InitConfig.Builder()
.setEnableExpiredIp(true)new InitConfig.Builder()
.setEnableExpiredIp(true);ローカルキャッシュの有効化
永続化キャッシュ機能は、起動後のドメイン名の名前解決にかかる時間を最適化し、最初の画面の読み込み速度を向上させるように設計されています。
有効にすると、HTTPDNS は最後の名前解決結果をローカルの永続化レイヤーに保存します。アプリケーションの再起動後、各ドメイン名の最初の名前解決は、永続化レイヤーからキャッシュされた結果を優先的に取得します。これにより、最速の名前解決効率が実現されます。このため、最初に使用される IP アドレスは、キャッシュされた TTL の有効期限が切れた期限切れの IP アドレスである可能性があります。ただし、ほとんどの場合、特に DNS レコードが安定しているドメイン名では、この IP アドレスは引き続き使用できます。
アプリケーションの起動後に長期間有効期限が切れているキャッシュの再利用を避けるため (たとえば、アプリケーションが最後に起動されたのが 1 か月前の場合)、このインターフェイスは expiredThresholdMillis パラメーターを提供します。アプリケーションが起動して永続化レイヤーからキャッシュをメモリにロードするとき、このパラメーターは expiredThresholdMillis の期間を超えて有効期限が切れている名前解決結果を破棄するかどうかを決定します。この値は 1 日に設定することをお勧めします。
この機能はデフォルトで無効になっています。
setEnableCacheIp
インターフェイス定義
InitConfig.Builder setEnableCacheIp(boolean enableCacheIp, long expiredThresholdMillis)
ローカルキャッシュを有効にすると、ローカルにキャッシュされた結果が一定期間有効期限切れになった後にパージされるように指定できます。
ビジネスサーバーの IP アドレスが頻繁に変更される場合は、ビジネス運用に影響を与えないように、この機能を慎重に使用してください。
永続化キャッシュは、最初のドメイン名の名前解決結果にのみ影響します。後続の名前解決は、引き続き HTTPDNS サーバーにリクエストし、ローカルキャッシュを更新します。
この機能を有効にすると、各ネットワーク名前解決レコードがローカルキャッシュで更新されます。アプリケーションの再起動後、ローカルキャッシュが最初にメモリにロードされます。
導入バージョン
2.4.3
クラス
InitConfig.Builder
パラメーター
パラメーター | タイプ | 必須 | 説明 |
enableCacheIp | boolean | はい | ローカルキャッシュを有効にするかどうかを制御します。
|
expiredThresholdMillis | long | はい | このインターフェイスが呼び出されると、SDK はローカルキャッシュからメモリキャッシュにレコードをロードします。指定された 単位はミリ秒です。デフォルト値は 0 ms で、これは期限切れのレコードがデフォルトで破棄されることを意味します。最大値は 1 年です。 |
コード例
InitConfig.Builder()
.setEnableCacheIp(true, DateUtils.YEAR_IN_MILLIS)new InitConfig.Builder()
.setEnableCacheIp(true, DateUtils.YEAR_IN_MILLIS);setEnableCacheIp
インターフェイス定義
InitConfig.Builder setEnableCacheIp(boolean enableCacheIp)
このメソッドを呼び出すと、SDK はローカルの永続化キャッシュからメモリキャッシュにレコードをロードします。すでに有効期限が切れているローカルキャッシュレコードはすべてパージされます。
導入バージョン
2.2.2
クラス
InitConfig.Builder
パラメーター
パラメーター | タイプ | 必須 | 説明 |
enableCacheIp | boolean | はい | ローカルキャッシュを有効にするかどうかを制御します。
|
コード例
InitConfig.Builder()
.setEnableCacheIp(true)new InitConfig.Builder()
.setEnableCacheIp(true);ネットワーク変更時の自動名前解決の有効化
デバイスのネットワークが変更されると (たとえば、Wi-Fi ネットワークからセルラーネットワークへの切り替え、またはあるモバイルキャリアから別のキャリアへの切り替え)、HTTPDNS SDK によって以前にキャッシュされた IP アドレスが、クロスネットワークのビジネスリクエストを引き起こす可能性があります。これは、リクエストのパフォーマンスと成功率に影響を与える可能性があります。したがって、SDK は内部でネットワーク変更イベントをリッスンし、グローバルな名前解決キャッシュをパージするかどうかをインテリジェントに決定します。
このインターフェイスは、ネットワーク環境が変更され、グローバルな名前解決キャッシュがパージされた後、SDK がすべてのドメイン名の名前解決結果を自動的にリフレッシュするかどうかを設定するために使用されます。有効にすると、ビジネスネットワークリクエストはネットワーク切り替え後にすぐに新しい結果を取得できます。これにより、ドメイン名の名前解決にかかる時間が短縮され、リクエストのパフォーマンスが向上します。
この機能を有効にすると、名前解決リクエストの数がわずかに増加する可能性があります。この機能はデフォルトで無効になっています。
Wi-Fi、セルラー、およびネットワークなしの間の切り替えは、ネットワークトランジションと見なされます。
4G と 3G の間の切り替えは、ネットワークトランジションとは見なされません。
SIM カードの切り替えは別途処理されません。
setPreResolveAfterNetworkChanged
インターフェイス定義
InitConfig.Builder setPreResolveAfterNetworkChanged(boolean enable)
導入バージョン
2.4.0
クラス
InitConfig.Builder
パラメーター
パラメーター | タイプ | 必須 | 説明 |
enable | boolean | はい | ネットワークが変更されたときにキャッシュ内のすべてのドメイン名を再解決するかどうかを指定します。
|
コード例
InitConfig.Builder()
.setPreResolveAfterNetworkChanged(true)new InitConfig.Builder()
.setPreResolveAfterNetworkChanged(true);タイムアウト設定
ドメイン名の名前解決のタイムアウト期間を設定します。デフォルトは 2000 ms です。
setTimeoutMillis
インターフェイス定義
InitConfig.Builder setTimeoutMillis(int timeoutInterval)
導入バージョン
2.4.0
クラス
InitConfig.Builder
パラメーター
パラメーター | タイプ | 必須 | 説明 |
timeoutInterval | int | はい | ドメイン名の名前解決のタイムアウト期間をミリ秒単位で設定します。 デフォルトは 2000 ms です。最大は 5000 ms です。 |
コード例
InitConfig.Builder()
setTimeoutMillis.(2 * 1000)new InitConfig.Builder()
.setTimeoutMillis(2 * 1000);アプリ署名時間の修正
この操作を実行した後、時間のずれが発生した場合、各ネットワークリクエストでデバイスの時間が修正されます。この操作を実行しない場合、デバイスの時間が使用されます。
シナリオ: モバイルデバイスの時間が不正確な場合があります。
この修正は、アプリケーションの 1 つのライフサイクルに対して有効です。アプリケーションの再起動後、有効にするには再度設定する必要があります。繰り返し設定できます。
時間サービスが必要です。これは自分で構築できます。単純なタイムスタンプインターフェイスで十分です。この時間サービスから正しい時間をリクエストし、その時間をこのインターフェイスに渡します。そうすると、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());リージョンノードの設定
アプリケーションが中国国外の環境で HTTPDNS を使用する必要がある場合、この SDK の起動サービスノードを設定して、名前解決の効率を向上させることができます。ノードを設定すると、SDK はそのノードをドメイン名の名前解決およびスケジューリングノードリストの後続の更新に使用します。
setRegion
初期化中にサービスリージョンを設定します。
インターフェイス定義
InitConfig.Builder setRegion(Region region)
導入バージョン
2.4.2
クラス
InitConfig.Builder
パラメーター
パラメーター | タイプ | 必須 | 説明 |
region | はい | リージョンノード。中国国外のリージョンを設定して、中国国外のサービスエリアを選択します。 |
setRegion
サービスリージョンを更新します。
インターフェイス定義
void setRegion(Region region)
導入バージョン
2.4.2
クラス
HttpDnsService
パラメーター
パラメーター | タイプ | 必須 | 説明 |
region | はい | リージョンノード。中国国外のリージョンを設定して、中国国外のサービスエリアを選択します。 |
setRegion
サービスリージョンを更新します。
インターフェイス定義
void setRegion(String region)
導入バージョン
1.3.2
クラス
HttpDnsService
パラメーター
パラメーター | タイプ | 必須 | 説明 |
region | String | はい | リージョンノード。中国国外のリージョンを設定して、中国国外のサービスエリアを選択します。現在、`hk` (中国 (香港) ノード)、`sg` (シンガポールノード)、`de` (ドイツノード)、および `us` (米国ノード) のみがサポートされています。リージョンを指定すると、ローカルサービスノードが返されます。 重要 アプリが中国国外の環境で HTTPDNS を使用する場合は、中国国外の適切なサービスノードを設定して、名前解決の効率を向上させてください。 |
名前解決結果の TTL のカスタマイズ
デフォルトでは、サーバーから提供される TTL を使用して、各名前解決結果の有効期限が切れているかどうかを判断します。名前解決結果の TTL を変更するには、次のインターフェイスを使用して設定できます。
configCacheTtlChanger
インターフェイス定義
InitConfig.Builder configCacheTtlChanger(CacheTtlChanger changer)
導入バージョン
2.3.0
クラス
InitConfig.Builder
パラメーター定義
パラメーター | タイプ | 必須 | 説明 |
changer | はい | 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 を使用して解決されないようにするには、このインターフェイスを使用してそれらをフィルターで除外できます。フィルターで除外されたドメイン名は、空の名前解決結果を返します。その後、ドメイン名の名前解決のためにローカル DNS にフォールバックする必要があります。
setNotUseHttpDnsFilter
インターフェイス定義
InitConfig.Builder setNotUseHttpDnsFilter(NotUseHttpDnsFilter filter)
導入バージョン
2.4.0
クラス
InitConfig.Builder
パラメーター
パラメーター | タイプ | 必須 | 説明 |
filter | はい | ブラックリストポリシーを設定します。 |
コード例
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 アドレスに対して速度テストを実行し、それらをソートして可用性が最も高いものを最初に配置します。 |
コード例
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);