このトピックでは、Flutter アプリケーションで HTTPDNS を統合して使用する方法について説明します。
Flutter は Google が提供するオープンソースのアプリケーション開発フレームワークです。単一のコードベースから、美しく、ネイティブにコンパイルされた、マルチプラットフォームのアプリケーションを構築できます。
Flutter フレームワーク用の HTTPDNS プラグインを提供し、一般的な Flutter ネットワークフレームワークとの統合方法について説明します。このプラグインは GitHub および pub.dev で入手できます。
以下のセクションでは、プラグインを使用するための手順とベストプラクティスについて説明します。
1. クイックスタート
1.1. サービスの有効化
HTTPDNS を有効化するには、「クイックスタート」をご参照ください。
1.2. 設定の取得
EMAS コンソールで開発設定から AccountId、SecretKey、および AESSecretKey を取得します。この情報は、ソフトウェア開発キット (SDK) を初期化するために必要です。詳細については、「開発設定」をご参照ください。
2. インストールと設定
2.1. Flutter 依存関係の追加
Flutter プロジェクトの pubspec.yaml ファイルに、次の依存関係を追加します。
dependencies:
flutter:
sdk: flutter
aliyun_httpdns: ^1.0.2 # pub.dev から最新のバージョン番号を取得
dio: ^5.9.0 # Dio ネットワークライブラリ
http: ^1.2.0 # http パッケージ
http2: ^2.3.1 # 任意、HTTP/2 サポート用依存関係を追加した後、flutter pub get を実行します。
2.2. ネイティブ SDK バージョンガイド
2.2.1. ネイティブ SDK バージョンの確認
このプラグインは、各プラットフォーム用のネイティブ HTTPDNS SDK を統合しています。現在のバージョンは次のとおりです。
Android:
com.aliyun.ams:alicloud-android-httpdns:2.6.7iOS:
AlicloudHTTPDNS:3.4.0
SDK のバージョンを更新するには、以下の更新手順をご参照ください。
ネイティブ SDK のバージョンを更新するには、GitHub フォークまたはローカルソースコードを使用してプラグインをインポートします。これにより、プラグインの内部にある build.gradle または podspec ファイルを変更できます。
2.2.2. Android SDK バージョンの更新
packages/aliyun_httpdns/android/build.gradle ファイルを編集し、依存関係のバージョンを変更します:
dependencies {
implementation 'androidx.annotation:annotation:1.8.0'
// 必要なバージョンに更新
implementation 'com.aliyun.ams:alicloud-android-httpdns:2.6.7'
}利用可能なバージョンについては、「Android SDK リリースノート」をご参照ください。
2.2.3. iOS SDK バージョンの更新
packages/aliyun_httpdns/ios/aliyun_httpdns.podspec ファイルを編集し、依存関係のバージョンを変更します。
Pod::Spec.new do |s|
# ... その他の設定 ...
s.dependency 'Flutter'
# 必要なバージョンに更新
s.dependency 'AlicloudHTTPDNS', '3.4.0'
# ... その他の設定 ...
end利用可能なバージョンについては、「iOS SDK リリースノート」をご参照ください。
2.2.4. プロジェクトの再ビルド
バージョンを更新した後、プロジェクトを再ビルドします。
Android:
flutter clean
flutter pub get
flutter build apk # または他のビルドコマンドiOS:
flutter clean
flutter pub get
cd ios
pod install
cd ..
flutter build ios3. 設定と使用方法
3.1. 初期化設定
アプリケーションの起動後、HTTPDNS の機能を使用する前にプラグインを初期化する必要があります。初期化プロセスでは、AccountId、SecretKey、その他の設定の構成、および機能の有効化を行います。次のコードは一例です。
// HTTPDNS の初期化
await AliyunHttpdns.init(
accountId: 'Your AccountId',
secretKey: 'Your SecretKey',
);
// 機能オプションの設定
await AliyunHttpdns.setHttpsRequestEnabled(true);
await AliyunHttpdns.setLogEnabled(true);
await AliyunHttpdns.setPersistentCacheIPEnabled(true);
await AliyunHttpdns.setReuseExpiredIPEnabled(true);
await AliyunHttpdns.setPreResolveAfterNetworkChanged(true);
await AliyunHttpdns.setIPRankingList({
'www.aliyun.com': 443,
});
// サービスのビルド
await AliyunHttpdns.build();
// 事前解決ホストの設定
await AliyunHttpdns.setPreResolveHosts(['www.aliyun.com'], ipType: 'both');
print("init success");setHttpsRequestEnabled パラメーターを true に設定すると、課金額が増加します。詳細については、「製品の課金」をご参照ください。
ドメイン名情報または SDNS パラメーターに対して高いセキュリティ要件がある場合は、aesSecretKey パラメーターを設定して、解決リクエストのコンテンツレイヤー暗号化を有効にすることができます。コンテンツ暗号化を使用すると、課金額が増加します。詳細については、「製品の課金」をご参照ください。
3.1.1. ログ設定
アプリケーション開発中に HTTPDNS ログを出力するには、ログ出力制御メソッドを呼び出してロギングを有効にします。次のコードは一例です。
await AliyunHttpdns.setLogEnabled(true);
print("enableLog success");3.1.2. SessionId の記録
アプリケーションの実行中に、メソッドを呼び出して sessionId を取得し、アプリケーションのデータ収集システムに記録できます。sessionId は、アプリケーションの単一の実行を識別します。オンラインでのトラブルシューティング中に、特定の実行の解決ログをクエリするために使用できます。次のコードは一例です。
final sessionId = await AliyunHttpdns.getSessionId();
print("SessionId = $sessionId");3.2. ドメイン名解決
3.2.1. 事前解決
事前にドメイン名を解決する必要がある場合は、事前解決メソッドを呼び出すことができます。次のコードは一例です。
await AliyunHttpdns.setPreResolveHosts(["www.aliyun.com", "www.example.com"], ipType: 'both');
print("preResolveHosts success");呼び出し後、プラグインはドメイン名解決を開始し、結果をメモリにキャッシュします。後続のリクエストは、キャッシュされた結果を直接使用できます。
3.2.2. ドメイン名解決
ドメイン名を解決する必要がある場合は、ドメイン名解決メソッドを呼び出して IP アドレスを取得できます。次のコードは一例です。
Future<void> _resolve() async {
final res = await AliyunHttpdns.resolveHostSyncNonBlocking('www.aliyun.com', ipType: 'both');
final ipv4List = res['ipv4'] ?? [];
final ipv6List = res['ipv6'] ?? [];
print('IPv4: $ipv4List');
print('IPv6: $ipv6List');
}4. Flutter のベストプラクティス
4.1. 仕組み
この例では、カスタム HTTP クライアントアダプターを実装することで、HTTPDNS をより直接的に統合する方法を示します。
カスタム HTTP クライアントアダプターを作成して、ネットワークリクエストをインターセプトします。
アダプター内で HTTPDNS プラグインを呼び出し、ドメイン名を IP アドレスに解決します。
解決された IP アドレスを使用して、直接ソケット接続を作成します。
HTTPS 接続の場合、サーバ名表示 (SNI) が元のドメイン名に正しく設定されていることを確認します。
この方法では、HTTPDNS の機能を HTTP クライアントレベルで直接統合することにより、ローカルプロキシサービスを作成する複雑さを回避できます。
4.2. 例
この例では、HTTPDNS 機能を統合する方法を示す完全な Flutter アプリケーションを提供します。
4.2.1. カスタム HTTP クライアントアダプターの実装
カスタムアダプターの実装については、lib/net/httpdns_http_client_adapter.dart ファイルをご参照ください。このソリューションは EMAS チームによって設計および実装されました。このソリューションを参照する場合は、出典を明記してください。アダプターは HTTP リクエストをインターセプトし、ドメイン名解決のために HTTPDNS を呼び出し、解決された IP アドレスを使用してソケット接続を作成します。
この例では、Dio、HttpClient、および http パッケージの 3 つのネットワークライブラリをサポートしています。コードは次のとおりです。
import 'dart:io';
import 'package:dio/io.dart';
import 'package:http/http.dart' as http;
import 'package:http/io_client.dart';
import 'package:flutter/foundation.dart';
import 'package:aliyun_httpdns/aliyun_httpdns.dart';
// Dio アダプター
IOHttpClientAdapter buildHttpdnsHttpClientAdapter() {
final HttpClient client = HttpClient();
_configureHttpClient(client);
_configureConnectionFactory(client);
final IOHttpClientAdapter adapter = IOHttpClientAdapter(createHttpClient: () => client)
..validateCertificate = (cert, host, port) => true;
return adapter;
}
// ネイティブ HttpClient
HttpClient buildHttpdnsNativeHttpClient() {
final HttpClient client = HttpClient();
_configureHttpClient(client);
_configureConnectionFactory(client);
return client;
}
// http パッケージアダプター
http.Client buildHttpdnsHttpPackageClient() {
final HttpClient httpClient = buildHttpdnsNativeHttpClient();
return IOClient(httpClient);
}
// HttpClient の基本設定
void _configureHttpClient(HttpClient client) {
client.findProxy = (Uri _) => 'DIRECT';
client.idleTimeout = const Duration(seconds: 90);
client.maxConnectionsPerHost = 8;
}
// HTTPDNS に基づく接続ファクトリの設定
// このソリューションは EMAS チームによって設計および実装されました。参照する場合は出典を明記してください。
void _configureConnectionFactory(HttpClient client) {
client.connectionFactory = (Uri uri, String? proxyHost, int? proxyPort) async {
final String domain = uri.host;
final bool https = uri.scheme.toLowerCase() == 'https';
final int port = uri.port == 0 ? (https ? 443 : 80) : uri.port;
final List<InternetAddress> targets = await _resolveTargets(domain);
final Object target = targets.isNotEmpty ? targets.first : domain;
if (!https) {
return Socket.startConnect(target, port);
}
// HTTPS: 最初に TCP、次に TLS (SNI=ドメイン名)、キャンセル可能に保つ
bool cancelled = false;
final Future<ConnectionTask<Socket>> rawStart = Socket.startConnect(target, port);
final Future<Socket> upgraded = rawStart.then((task) async {
final Socket raw = await task.socket;
if (cancelled) {
raw.destroy();
throw const SocketException('Connection cancelled');
}
final SecureSocket secure = await SecureSocket.secure(
raw,
host: domain, // 重要: SNI として元のドメイン名を使用する
);
if (cancelled) {
secure.destroy();
throw const SocketException('Connection cancelled');
}
return secure;
});
return ConnectionTask.fromSocket(
upgraded,
() {
cancelled = true;
try {
rawStart.then((t) => t.cancel());
} catch (_) {}
},
);
};
}
// HTTPDNS を介してターゲット IP リストを解決する
Future<List<InternetAddress>> _resolveTargets(String domain) async {
try {
final res = await AliyunHttpdns.resolveHostSyncNonBlocking(domain, ipType: 'both');
final List<String> ipv4 = res['ipv4'] ?? [];
final List<String> ipv6 = res['ipv6'] ?? [];
final List<InternetAddress> targets = [
...ipv4.map(InternetAddress.tryParse).whereType<InternetAddress>(),
...ipv6.map(InternetAddress.tryParse).whereType<InternetAddress>(),
];
if (targets.isEmpty) {
debugPrint('[dio] HTTPDNS no result for $domain, fallback to system DNS');
} else {
debugPrint('[dio] HTTPDNS resolved $domain -> ${targets.first.address}');
}
return targets;
} catch (e) {
debugPrint('[dio] HTTPDNS resolve failed: $e, fallback to system DNS');
return const <InternetAddress>[];
}
}4.2.2. アダプターの統合と使用方法
アダプターの統合については、lib/main.dart ファイルをご参照ください。まず、HTTPDNS を初期化します。次に、カスタムアダプターを使用するようにネットワークライブラリを設定します。次のコードは一例です。
class _MyHomePageState extends State<MyHomePage> {
late final Dio _dio;
late final HttpClient _httpClient;
late final http.Client _httpPackageClient;
@override
void initState() {
super.initState();
// HTTPDNS の初期化
_initHttpDnsOnce();
// HTTPDNS アダプターを使用するようにネットワークライブラリを設定
_dio = Dio();
_dio.httpClientAdapter = buildHttpdnsHttpClientAdapter();
_dio.options.headers['Connection'] = 'keep-alive';
_httpClient = buildHttpdnsNativeHttpClient();
_httpPackageClient = buildHttpdnsHttpPackageClient();
}
Future<void> _initHttpDnsOnce() async {
try {
await AliyunHttpdns.init(
accountId: 139450,
secretKey: 'Your SecretKey',
);
await AliyunHttpdns.setHttpsRequestEnabled(true);
await AliyunHttpdns.setLogEnabled(true);
await AliyunHttpdns.setPersistentCacheIPEnabled(true);
await AliyunHttpdns.setReuseExpiredIPEnabled(true);
await AliyunHttpdns.build();
// 事前解決ホストの設定
await AliyunHttpdns.setPreResolveHosts(['www.aliyun.com'], ipType: 'both');
} catch (e) {
debugPrint('[httpdns] init failed: $e');
}
}
}設定済みのネットワークライブラリを使用してリクエストを行うと、自動的に HTTPDNS を使用してドメイン名解決が行われます。
// Dio を使用
final response = await _dio.get('https://www.aliyun.com');
// HttpClient を使用
final request = await _httpClient.getUrl(Uri.parse('https://www.aliyun.com'));
final response = await request.close();
// http パッケージを使用
final response = await _httpPackageClient.get(Uri.parse('https://www.aliyun.com'));4.2.3. リソースのクリーンアップ
コンポーネントが破棄される際には、関連するリソースをクリーンアップする必要があります。
@override
void dispose() {
_urlController.dispose();
_httpClient.close();
_httpPackageClient.close();
super.dispose();
}5. API
5.1. ログ出力制御
ログをコンソールに出力するかどうかを制御します。
await AliyunHttpdns.setLogEnabled(true);
print("enableLog success");5.2. 初期化
SDK を初期化します。アプリケーションの起動時にこのメソッドを呼び出す必要があります。
// 基本的な初期化
await AliyunHttpdns.init(
accountId: 139450,
secretKey: 'your_secret_key',
aesSecretKey: 'your_aes_secret_key', // オプション
);
// 機能オプションの構成
await AliyunHttpdns.setHttpsRequestEnabled(true);
await AliyunHttpdns.setLogEnabled(true);
await AliyunHttpdns.setPersistentCacheIPEnabled(true);
await AliyunHttpdns.setReuseExpiredIPEnabled(true);
await AliyunHttpdns.setPreResolveAfterNetworkChanged(true);
await AliyunHttpdns.setIPRankingList({
'www.aliyun.com': 443,
});
// サービスインスタンスのビルド
await AliyunHttpdns.build();
print("init success");初期化パラメーター:
パラメーター | タイプ | 必須 | 機能 | サポート対象プラットフォーム |
accountId | int | 必須パラメーター | アカウント ID | Android/iOS |
secretKey | String | オプションパラメーター | 署名キー | Android/iOS |
aesSecretKey | String | オプションパラメーター | 暗号化キー | Android/iOS |
設定メソッド:
setHttpsRequestEnabled(bool)- HTTPS 名前解決リンクを使用するかどうかを設定します。setLogEnabled(bool)- ログを有効にするかどうかを設定します。setPersistentCacheIPEnabled(bool)- 永続キャッシュを有効にするかどうかを設定します。setReuseExpiredIPEnabled(bool)- 期限切れの IP アドレスの再利用を許可するかどうかを設定します。setPreResolveAfterNetworkChanged(bool)- ネットワークが変更されたときに名前解決を自動的に更新するかどうかを設定します。setIPRankingList(hostPortMap)- IP 順位付けのためのドメイン名のリストを設定します。
setHttpsRequestEnabled パラメーターを true に設定すると、課金額が増加します。詳細については、「製品の課金」をご参照ください。
ドメイン名情報または SDNS パラメーターに対して高いセキュリティ要件がある場合は、aesSecretKey パラメーターを設定して、解決リクエストのコンテンツレイヤー暗号化を有効にすることができます。コンテンツ暗号化を使用すると、課金額が増加します。詳細については、「製品の課金」をご参照ください。
5.3. ドメイン名解決
指定されたドメイン名を解決します。
Future<void> _resolve() async {
final res = await AliyunHttpdns.resolveHostSyncNonBlocking(
'www.aliyun.com',
ipType: 'both', // 'auto'、'ipv4'、'ipv6'、'both'
);
final ipv4List = res['ipv4'] ?? [];
final ipv6List = res['ipv6'] ?? [];
print('IPv4: $ipv4List');
print('IPv6: $ipv6List');
}パラメーター:
パラメーター | タイプ | 必須 | 機能 |
hostname | String | 必須パラメーター | 解決するドメイン名。 |
ipType | String | オプションパラメーター | 要求される IP タイプ:「auto」、「ipv4」、「ipv6」、または「both」。 |
返されるデータ構造:
フィールド | タイプ | 機能 |
ipv4 | List | IPv4 アドレスのリスト。例: ["1.1.1.1", "2.2.2.2"]。 |
ipv6 | List | IPv6 アドレスのリスト。例: ["::1", "::2"]。 |
5.4. ドメイン名の事前解決
1 つ以上のドメイン名を事前解決し、結果を SDK にキャッシュします。これらのドメインに対する後続の解決リクエストは、キャッシュから直接結果を取得できるため、解決速度が向上します。
await AliyunHttpdns.setPreResolveHosts(
["www.aliyun.com"],
ipType: 'both'
);
print("preResolveHosts success");パラメーター:
パラメーター | タイプ | 必須 | 機能 |
hosts | List | 必須パラメーター | 事前解決するドメイン名のリスト。 |
ipType | String | オプションパラメーター | 要求される IP タイプ:「auto」、「ipv4」、「ipv6」、または「both」。 |
5.5. SessionId の取得
トラブルシューティングや問題の追跡に使用される SessionId を取得します。
final sessionId = await AliyunHttpdns.getSessionId();
print("SessionId = $sessionId");パラメーターは不要です。現在のセッション ID を返します。
5.6. キャッシュのクリア
すべての DNS 名前解決キャッシュをクリアします。
await AliyunHttpdns.cleanAllHostCache();
print("Cache cleared successfully");5.7. ネットワーク変更時の事前解決済みドメインの自動更新
ネットワーク環境が変更されたときに、事前解決されたドメイン名のキャッシュを自動的に更新するかどうかを設定します。
await AliyunHttpdns.setPreResolveAfterNetworkChanged(true);
print("Auto-refresh on network change enabled");5.8. 永続キャッシュの設定
永続キャッシュ機能を有効にするかどうかを設定します。有効にすると、SDK は解決結果をローカルデバイスに保存します。アプリの再起動後、ローカルデバイスからキャッシュされた結果を読み込むことができます。
await AliyunHttpdns.setPersistentCacheIPEnabled(true);
await AliyunHttpdns.setPersistentCacheIPEnabled(
true,
discardExpiredAfterSeconds: 86400 // オプションパラメーター
);
print("Persistent cache enabled");パラメーター:
パラメーター | タイプ | 必須 | 機能 |
enabled | bool | 必須パラメーター | 永続キャッシュを有効にするかどうかを指定します。 |
discardExpiredAfterSeconds | int | オプションパラメーター | 有効期限のしきい値 (秒)。アプリの起動時に、この期間を超えて期限切れになっているキャッシュされたレコードを破棄します。 |
5.9. IP 優先順位付け
IP 優先順位付けを実行するドメイン名のリストを指定します。有効にすると、SDK は解決された IP アドレスに対して TCP 速度テストを実行し、リストの最初の IP アドレスが最高の可用性を持つように並べ替えます。
await AliyunHttpdns.setIPRankingList({
'www.aliyun.com': 443,
});
print("IP ranking configured successfully");パラメーター:
パラメーター | タイプ | 必須 | 機能 |
hostPortMap | Map<String, int> | 必須パラメーター | ドメイン名とポートのマップ。例:{'www.aliyun.com': 443}。 |
6. 旧 SDK からバージョン 1.0.0 以降へのアップグレードガイド
バージョン 1.0.0 では、包括的なアーキテクチャのリファクタリングと API の最適化が導入されています。このアップグレードの目的は次のとおりです。
設定パターンの統一:分散したランタイム設定から、2 段階の初期化パターン (init + build) に移行します。これにより、設定のタイミングの問題が解決され、SDK の安定性が向上します。
解決 API の標準化:解決 API アーキテクチャを再設計し、統一された
resolveHostSyncNonBlockingメソッドを提供します。このメソッドは、JSON 文字列の代わりに構造化データを返します。静的メソッドによる設計:シングルトンパターンから静的メソッドの呼び出しに切り替えます。これにより、使用が簡素化され、インスタンスを作成する必要がなくなります。
パフォーマンスの最適化:API の最適化と内部実装の強化により、解決パフォーマンスとリソース使用効率が向上します。
これは、下位互換性のないメジャーな変更です。変更は大きいですが、アプリケーションが使用している API を変更するだけで済みます。以下のアップグレード手順と新旧 API マッピングテーブルは、この重要なアップグレードを体系的に完了するのに役立ちます。
詳細なアップグレード手順
1. 依存関係のバージョンの更新
pubspec.yaml
dependencies:aliyun_httpdns: ^1.0.0更新を実行します。
flutter pub upgrade aliyun_httpdns2. 初期化コードのリファクタリング
アップグレード前
// 旧バージョン: シングルトンパターン + 1 ステップ初期化
final _aliyunHttpDns = AliyunHttpDns();
await _aliyunHttpDns.init(
"YOUR_ACCOUNT_ID", // String 型
secretKey: "your_secret_key",
aesSecretKey: "your_aes_key",
region: "",
timeout: 2000,
enableHttps: true,
enableExpireIp: true,
enableCacheIp: true,
enableDegradationLocalDns: true,
preResolveAfterNetworkChanged: true,
ipRankingMap: {"www.aliyun.com": 80},
sdnsGlobalParam: {"aa": "bb"},
bizTags: ["tag1", "tag2"]
);アップグレード後
// 新バージョン: 静的メソッド + 2 段階初期化
// ステージ 1: 基本構成の初期化
await AliyunHttpdns.init(
accountId: your_account_id, // int 型、必須
secretKey: "your_secret_key", // オプション
aesSecretKey: "your_aes_key", // オプション
);
// ステージ 2: 機能オプションの設定
await AliyunHttpdns.setHttpsRequestEnabled(true); // enableHttps を置き換えます
await AliyunHttpdns.setLogEnabled(true); // enableLog を置き換えます
await AliyunHttpdns.setPersistentCacheIPEnabled(true); // enableCacheIp を置き換えます
await AliyunHttpdns.setReuseExpiredIPEnabled(true); // enableExpireIp を置き換えます
await AliyunHttpdns.setPreResolveAfterNetworkChanged(true); // preResolveAfterNetworkChanged を置き換えます
// ステージ 3: サービスのビルド (呼び出し必須)
await AliyunHttpdns.build();注:
region、timeout、enableDegradationLocalDns、ipRankingMap、sdnsGlobalParam、およびbizTagsパラメーターは削除されました。新しい
build()メソッドが追加されました。設定完了後に呼び出す必要があります。すべてのメソッドは静的になりました。インスタンスを作成する必要はありません。
3. 解決 API の更新
アップグレード前
// 同期非ブロッキング、JSON 文字列を返す
String result = await _aliyunHttpDns.resolve(
"YOUR_ACCOUNT_ID", // accountId
"www.aliyun.com", // host
kRequestIpv4AndIpv6, // requestIpType
);
// 手動での JSON 解析が必要
Map<String, dynamic> map = json.decode(result);
List<String> ipv4s = List<String>.from(map['ipv4'] ?? []);
List<String> ipv6s = List<String>.from(map['ipv6'] ?? []);
// 最初の IP を使用
String ip = ipv4s.isNotEmpty ? ipv4s.first : '';アップグレード後
// 同期非ブロッキング、構造化データを返す
Map<String, List<String>> result = await AliyunHttpdns.resolveHostSyncNonBlocking(
'www.aliyun.com', // hostname (accountId は不要)
ipType: 'both', // kRequestIpv4AndIpv6 の代替
);
// IP リストを直接取得
List<String> ipv4s = result['ipv4'] ?? [];
List<String> ipv6s = result['ipv6'] ?? [];
// 最初の IP を使用
String ip = ipv4s.isNotEmpty ? ipv4s.first : '';カスタム解決パラメーター:
// アップグレード前
String result = await _aliyunHttpDns.resolve(
"YOUR_ACCOUNT_ID",
"www.aliyun.com",
kRequestIpv4AndIpv6,
params: {"key": "value"},
cacheKey: "custom_key"
);
// アップグレード後
Map<String, List<String>> result = await AliyunHttpdns.resolveHostSyncNonBlocking(
'www.aliyun.com',
ipType: 'both',
sdnsParams: {"key": "value"}, // パラメーター名が変更されました
cacheKey: "custom_key"
);4. 事前解決 API の更新
アップグレード前
await _aliyunHttpDns.setPreResolveHosts(
"YOUR_ACCOUNT_ID", // accountId
["www.aliyun.com"],
kRequestIpv4AndIpv6 // requestIpType
);スペックアップ後
await AliyunHttpdns.setPreResolveHosts(
["www.aliyun.com"], // accountId は不要
ipType: 'both' // kRequestIpv4AndIpv6 の代替
);5. ログ設定の更新
アップグレード前
await _aliyunHttpDns.enableLog(true);スペックアップ後
await AliyunHttpdns.setLogEnabled(true);6. SessionId 取得の更新
アップグレード前
String sessionId = await _aliyunHttpDns.getSessionId("YOUR_ACCOUNT_ID");スペックアップ後
String? sessionId = await AliyunHttpdns.getSessionId();7. 新機能の使用
キャッシュのクリア
await AliyunHttpdns.cleanAllHostCache();永続化キャッシュ構成
await AliyunHttpdns.setPersistentCacheIPEnabled(true);アプリケーションが互換性のない API を使用していない場合は、何もする必要はありません。
API アップグレードマッピングテーブル
API カテゴリ | アップグレード前 | アップグレード後 |
インスタンスの作成 |
| 不要。静的メソッドを直接使用します。 |
初期化 |
|
|
サービスのビルド | なし |
|
HTTPS リクエストの有効化 |
|
|
期限切れ IP の有効化 |
|
|
ローカルキャッシュの有効化 |
|
|
ネットワーク変更時の事前解決 |
|
|
ログ出力の制御 |
|
|
同期非ブロッキング解決 |
|
|
IPv4 解決 |
|
|
IPv6 解決 |
|
|
IPv4 および IPv6 解決 |
|
|
自動選択 | なし |
|
カスタム解決パラメーター |
|
|
事前解決ホストの設定 |
|
|
SessionId の取得 |
|
|
キャッシュのクリア | なし |
|
署名時間の修正 |
| 削除済み |