このトピックでは、HarmonyOS SDK の基本構成について説明します。
コンテキスト構成
SDK は、データストレージに HarmonyOS API を使用し、Context パラメーターが必要です。Context パラメーターは、構成時に設定する必要があります。
次のコードは例を示しています。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { httpdns } from '@aliyun/httpdns';
const ACCOUNT_ID = 'Replace this with the Account ID from the Alibaba Cloud HTTPDNS console'
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// ************* 初期化構成の開始 *************
httpdns.configService(ACCOUNT_ID, {
// Harmony コンテキストを構成します。
context: this.context,
});
// ************* 初期化構成の終了 *************
}
// その他のコードは省略されています。
}コンテキストは必須です。構成しないと、HTTPDNS サービスノードを保存できず、HTTPDNS の可用性が低下します。
HTTPS リクエストの使用
SDK がサーバーへの名前解決リクエストの送信に HTTPS を使用するかどうかを指定できます。デフォルトでは、SDK は HTTP を使用します。
HTTPS リクエストはセキュリティが高くなりますが、HTTP リクエストとは課金方法が異なります。詳細については、「製品の課金」をご参照ください。
次のコードは、HTTPS を使用するように SDK を構成する方法を示しています。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';
const ACCOUNT_ID = 'Replace this with the Account ID from the Alibaba Cloud HTTPDNS console'
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
httpdns.configService(ACCOUNT_ID, {
context: this.context,
// ************* 開始:HTTPS リクエストを使用するかどうかを構成する *************
useHttps: true,
// ************* 終了:HTTPS リクエストを使用するかどうかを構成する *************
});
}
// その他のコードは省略されています。
}期限切れの IP アドレスの使用を許可する
SDK は DNS プロトコルに従い、生存時間(TTL)に基づいて名前解決の結果をキャッシュします。これにより、アプリケーションネットワークリクエストの IP アドレス取得効率が向上します。キャッシュの有効期限が切れ、アプリケーションが名前解決操作を呼び出して IP アドレスを取得する場合、次の状況が発生する可能性があります。
アプリケーションが同期非ブロッキング API 操作を呼び出すと、空の結果が返されます。これは、キャッシュの有効期限が切れ、SDK がサーバーから新しい結果をすぐに取得できないために発生します。スレッドのブロックを回避するには、ローカル DNS を使用した名前解決にフォールバックします。
アプリが非同期 API を呼び出すと、SDK はサーバーに新しい名前解決結果をリクエストします。このプロセスには時間がかかるため、同期 API 呼び出しは、新しい結果が返されるまでスレッドをブロックします。
SDK は、期限切れの IP アドレスを再利用するための設定を提供します。このオプションが YES に設定されている場合、API は有効期限が切れていてもキャッシュされた IP アドレスをすぐに返します。これにより、DNS 名前解決時間が短縮され、ネットワークリクエストのパフォーマンスが向上します。期限切れの IP アドレスを返した後、SDK は非同期スレッドを開始してドメイン名を解決し、新しい名前解決結果を取得します。
このオプションの副作用は最小限です。これは、プライマリサイトや静的ゲートウェイドメイン名など、名前解決の構成が頻繁に変更されない場合に特に当てはまります。ドメイン名の名前解決が変更された場合、このオプションはキャッシュの有効期限が切れた後の最初のリクエストにのみ影響します。SDK は、呼び出されて期限切れの IP アドレスが見つかると、すぐに名前解決の更新を開始します。
次のコードは、期限切れの IP アドレスの使用を許可しない方法を示しています。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';
const ACCOUNT_ID = 'Replace this with the Account ID from the Alibaba Cloud HTTPDNS console'
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// HTTPDNS を構成する
httpdns.configService(ACCOUNT_ID, {
context: this.context,
// ************* 開始:期限切れの IP アドレスの使用を許可するかどうかを構成する *************
enableExpiredIp: false,
// ************* 終了:期限切れの IP アドレスの使用を許可するかどうかを構成する *************
})
}
// その他のコードは省略されています。
}ローカルキャッシュを有効にする
enableDiskCache パラメーターは、名前解決の結果をローカルキャッシュに保存するかどうかを制御します。デフォルトでは、この機能は無効になっています(false)。
この機能を有効にすると、各名前解決の結果がローカルにキャッシュされます。次回アプリケーションが起動すると、キャッシュされた名前解決の結果がローカルストレージからロードされます。これにより、アプリケーション起動時の名前解決結果の取得プロセスが高速化されます。
ローカルキャッシュを有効にした後、expiredThresholdMillis を使用してキャッシュの有効期限を構成できます。アプリケーションが起動すると、永続レイヤーからメモリにキャッシュがロードされます。このパラメーターにより、アプリケーションは expiredThresholdMillis の期間よりも長く期限切れになっている名前解決の結果を破棄します。デフォルト値は 0 ミリ秒です。
次のコードは、ローカルキャッシュを有効にする方法を示しています。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';
const ACCOUNT_ID = 'Replace this with the Account ID from the Alibaba Cloud HTTPDNS console'
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// HTTPDNS を構成する
httpdns.configService(ACCOUNT_ID, {
context: this.context,
// ************* 開始:ローカルキャッシュを有効にするかどうかを構成する *************
enableDiskCache: true,
expiredThresholdMillis: 3600000,
// ************* 終了:ローカルキャッシュを有効にするかどうかを構成する *************
})
}
// その他のコードは省略されています。
}ネットワーク変更時の自動名前解決を有効にする
ネットワークの変更時に、以前に解決されたドメイン名を自動的に再解決するかどうかを構成できます。デフォルトでは、この機能は有効になっています(true)。
ネットワークが変更されると、キャッシュされた名前解決の結果が無効になる可能性があります。正しい結果を得るには、再解決が必要です。
次のコードは、ネットワーク変更時の自動名前解決を無効にする方法を示しています。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';
const ACCOUNT_ID = 'Replace this with the Account ID from the Alibaba Cloud HTTPDNS console'
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// HTTPDNS を構成する
httpdns.configService(ACCOUNT_ID, {
context: this.context,
// ************* 開始:ネットワーク変更時の自動名前解決を有効にするかどうかを構成する *************
reResolveCachedHostsAfterNetworkChanged: false,
// ************* 終了:ネットワーク変更時の自動名前解決を有効にするかどうかを構成する *************
})
}
// その他のコードは省略されています。
}Wi-Fi、モバイルネットワーク、ネットワークなしの切り替えは、ネットワークの変更と見なされます。
3G、4G、5G 間の切り替えは、ネットワークの変更と見なされません。
タイムアウト構成
ドメイン名解決リクエストのタイムアウトを構成できます。デフォルトのタイムアウトは 2000 ミリ秒です。
次のコードは構成を示しています。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';
const ACCOUNT_ID = 'Replace this with the Account ID from the Alibaba Cloud HTTPDNS console'
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// HTTPDNS を構成する
httpdns.configService(ACCOUNT_ID, {
context: this.context,
// ************* 開始:タイムアウト期間を構成する *************
timeoutInMs: 3000
// ************* 終了:タイムアウト期間を構成する *************
})
}
// その他のコードは省略されています。
}名前解決パラメーターの暗号化
ドメイン名解決インターフェースのパラメーターの暗号鍵を構成できます。暗号化を有効にすると、SDK はドメイン名、クライアント IP アドレス、カスタムビジネスパラメーター、および名前解決タイプを暗号化してから、サービスにリクエストを送信します。データは暗号文としてサーバーに送信されるため、セキュリティが向上します。デフォルトでは、暗号化は無効になっています。
次のコードは構成を示しています。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';
const ACCOUNT_ID = 'Replace this with the Account ID from the Alibaba Cloud HTTPDNS console'
const AES_SECRET_KEY = 'Replace this with the AES encryption key from the Alibaba Cloud HTTPDNS console'
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// HTTPDNS を構成する
httpdns.configService(ACCOUNT_ID, {
context: this.context,
// ************* 開始:インターフェース暗号鍵を構成する *************
aesSecretKey: AES_SECRET_KEY,
// ************* 終了:インターフェース暗号鍵を構成する *************
})
}
// その他のコードは省略されています。
}