このトピックでは、iOS 向け HTTPDNS SDK の高度な構成操作について説明します。
HTTPDNS によるログ表示を許可するかどうかを指定する
HTTPDNS のローカルログ機能を有効にするかどうかを指定できます。 この機能を有効にすると、解決に関する問題のトラブルシューティングに役立ちます。 HTTPDNS と統合されたアプリを公開する場合は、ローカルログ機能を無効にすることをお勧めします。
操作定義
- (void)setLogEnabled:(BOOL)enable;
クラス
HttpDnsService
パラメーターの説明
パラメーター | タイプ | パラメーターが必要かどうかを示します | 説明 |
enable | BOOL | はい | ログスイッチ |
SDK ログを受信するために使用するコールバッククラスを構成する
ローカルログ機能を有効にした後、この操作を呼び出して、カスタムの場所にログを表示できます。 ログファイルを使用して解決ログを収集する場合は、この操作を呼び出して、ログを関連ファイルに書き込むことができます。
操作定義
- (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);
}
@endIP アドレスランキングを構成する
ドメイン名に対応するサービスのポート番号を指定します。 この操作を構成すると、対応するドメイン名が解決された場合、SDK は解決によって返された IP アドレスリストに対して TCP 接続速度テストを実行します。 テスト結果に基づいて、SDK は IP アドレスリストを動的にソートし、最初の IP アドレスの可用性が最も高くなるようにします。
この機能は SDK V3.2.0 以降でサポートされています。 IP アドレスリストに IPv4 アドレスと IPv6 アドレスの両方が含まれている場合、それらは個別にテストおよびソートされます。
ネットワーク速度テストには一定の時間がかかります。 ドメイン名を解決するために初めて操作を呼び出すと、すぐに取得された IP アドレスリストがソートされない場合があります。
複数のサービス IP エントリポイント間でパフォーマンスまたはネットワーク環境に大きな違いがある場合、すべてのクライアントの速度テスト結果は類似している可能性があります。 これにより、すべてのクライアントが同じサービス IP アドレスにビジネスリクエストを送信する可能性があり、負荷の不均衡が発生し、安定性に影響を与える可能性があります。 したがって、IP アドレスランキングを有効にするかどうかを慎重に評価する必要があります。
操作定義
- (void)setIPRankingDatasource:(NSDictionary<NSString *, NSNumber *> *)IPRankingDatasource;
パラメーターの説明
パラメーター | タイプ | パラメーターが必要かどうかを示します | 説明 |
IPRankingDatasource | NSDictionary<NSString *, NSNumber *> | はい | 対応するドメイン名のポート番号を設定します。 @{host: port} |
サンプルコード
HttpDnsService *httpdns = [[HttpDnsService alloc] initWithAccountID:xxxx secretKey:@"xxxxx"]; // アカウント ID xxxx、シークレットキー xxxxx
NSDictionary *IPRankingDatasource = @{
@"www.aliyun.com" : @443,
@"www.taobao.com" : @443,
@"www.exmaple.com" : @443
};
[httpdns setIPRankingDatasource:IPRankingDatasource];アプリの署名時間を調整する
この操作を実行した後、時間のずれがある場合、ネットワークリクエストごとにデバイス時間が調整されます。 これにより、認証モードでデバイス時間の期限切れによる認証エラーを防ぎます。 この操作を実行しない場合、デバイス時間が標準として使用されます。
この機能は、SDK v3.0.0 以降にのみ適用されます。
シナリオ:携帯電話の時間が正しくありません。
調整は 1 つのアプリ [ライフサイクル] で有効です。アプリの再起動後に、この操作を再度呼び出す必要があります。
タイムサービスが必要です。 タイムサービスは、単純なタイムスタンプ操作をサポートする自己管理型タイムサービスにすることができます。 アプリを起動した後、タイムサービスを使用して正確な時間を取得し、調整操作で時間を指定します。 これにより、SDK は正確な時間とデバイス時間の差を取得できます。
バージョン 2.x.x 以前では、この操作は
- (void)setAuthCurrentTime:(NSTimeInterval)currentTime;として定義されていました。
操作定義
- (void)setInternalAuthTimeBaseBySpecifyingCurrentTime:(NSTimeInterval)currentTime;
カテゴリ
HttpDnsService
パラメーターの説明
パラメーター | タイプ | パラメーターが必要かどうかを示します | 説明 |
currentTime | NSTimeInterval | はい | 調整に使用される正確なタイムスタンプ(秒単位)。 |
リージョンを指定する
中国以外での解析効率を高めるために、SDK の初期 [サービス] [ノード] を設定できます。設定すると、SDK はこの [ノード] を使用してドメイン名解決を行い、スケジューリング [ノード] リストを更新します。
デフォルトでは、構成は不要です。 アプリが中国本土以外のリージョンで起動した場合でも、SDK は自動的に最寄りの海外ノードにスケジュールされるため、効率への影響はそれほど大きくありません。
この機能は、SDK v3.1.0 以降にのみ適用されます。
操作の定義
- (void)setRegion:(NSString *)region;
クラス
HttpDnsService
パラメーターの説明
パラメーター | タイプ | パラメーターが必要かどうかを示します | 説明 |
region | NSString * | はい | [ノード] 名。現在アクティブな [ノード] は、中国本土 [ノード] 、香港(中国) [ノード] 、シンガポール [ノード] 、ドイツ [ノード] 、米国 [ノード] で、次のマクロに対応しています。
|
解析結果の TTL をカスタマイズする
アプリ内でドメイン名の 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 {
// 必要なアカウント ID を指定します。
HttpDnsService *httpdns = [[HttpDnsService alloc] initWithAccountID:xxxx secretKey:@"xxxx"]; // アカウント ID xxxx、シークレットキー 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 ドメインの解決レコードは安定しており、長期間ローカルにキャッシュできます。
// ホストが www.aliyun.com の場合、TTL を 600 秒に設定します。
return 600;
}
// 特殊な構成がない場合は、元の TTL が返されます。
return ttl;
}
@end