本文介紹HarmonyOS SDK的一些基礎配置。
Context配置
由於SDK內部需要使用HarmonyOS的API進行資料存放區,需要Context參數,所以在配置時,需要設定Context參數。
範例程式碼如下:
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { httpdns } from '@aliyun/httpdns';
const ACCOUNT_ID = '這裡需要替換為阿里雲HTTPDNS控制台的Account ID'
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// ************* 初始化配置 begin *************
httpdns.configService(ACCOUNT_ID, {
// 請務必配置harmony上下文
context: this.context,
});
// ************* 初始化配置 end *************
}
// 省略其它代碼
}context是必選配置。如果不配置會導致HTTPDNS的服務節點無法儲存,降低HTTPDNS服務的可用性。
是否使用HTTPS請求
設定SDK內部向服務端發起解析請求時,是否使用HTTPS協議。若不調用該介面,預設使用HTTP協議。
使用HTTPS請求將會獲得更高的安全性,但也要關注HTTP和HTTPS兩種方式在計費上的不同。關於計費邏輯可參考產品計費。
使用HTTPS協議的配置如下:
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';
const ACCOUNT_ID = '這裡需要替換為阿里雲HTTPDNS控制台的Account ID'
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
httpdns.configService(ACCOUNT_ID, {
context: this.context,
// ************* 初始化配置是否使用HTTPS請求 begin *************
useHttps: true,
// ************* 初始化配置是否使用HTTPS請求 end *************
});
}
// 省略其它代碼
}是否允許使用到期IP
SDK遵循DNS協議,按照TTL緩衝網域名稱解析結果,從而提升App在發起網路請求時擷取IP的效率。當緩衝到期後,若App調用解析介面擷取IP,此時會有不同情況:
如果App調用的是同步非阻塞介面,因為緩衝已到期,但SDK又無法立即從服務端獲得新的解析結果,為了不阻塞線程,該介面將返回空結果,需要調用方做降級到LocalDNS解析的處理。
如果App調用的是非同步介面,則SDK會發起解析請求從服務端擷取新的解析,這個過程需要一定時間,則同步介面會阻塞線程直到獲得新的解析結果。
SDK提供設定選項,允許複用到期IP,設定為YES後,則上述兩種情況,雖然緩衝的IP到期了,但介面仍然可以立即返回這個到期的IP,從而減少DNS環節處理時間,提升網路請求效能。同時,SDK發現該IP到期,返回後,也會立即啟動非同步線程對這個網域名稱進行解析,從而擷取新的解析結果。
因此,開啟這個選項的副作用非常小,特別是在,所解析網域名稱本身的解析配置不會頻繁變動時(如主站網域名稱、靜態網關網域名稱等)。若網域名稱確實發生解析變更,則開啟該選項也只會影響該網域名稱緩衝到期後的第一個請求,因為SDK在被調用時發現IP到期,總是會立即發起對這個網域名稱的解析更新。
不允許使用到期IP的配置如下:
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';
const ACCOUNT_ID = '這裡需要替換為阿里雲HTTPDNS控制台的Account ID'
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// 配置HTTPDNS
httpdns.configService(ACCOUNT_ID, {
context: this.context,
// ************* 初始化配置是否允許使用到期IP begin *************
enableExpiredIp: false,
// ************* 初始化配置是否允許使用到期IP end *************
})
}
// 省略其它代碼
}是否開啟本機快取
通過enableDiskCache配置項控制是否將解析結果儲存在本機快取中,預設為false,不開啟。
當開啟後,每次解析會把結果緩衝到本地,當下次應用啟動時,會從本地載入緩衝解析結果,提高應用啟動時擷取解析結果的速度。
當開啟本機快取後,可以通過expiredThresholdMillis配置本機快取到期時間。該參數決定App啟動後,從持久層載入緩衝到記憶體中時,丟棄已經到期超過expiredThresholdMillis時間長度的解析結果,預設為0毫秒。
開啟本機快取的配置如下:
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';
const ACCOUNT_ID = '這裡需要替換為阿里雲HTTPDNS控制台的Account ID'
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// 配置HTTPDNS
httpdns.configService(ACCOUNT_ID, {
context: this.context,
// ************* 初始化配置是否開啟本機快取 begin *************
enableDiskCache: true,
expiredThresholdMillis: 3600000,
// ************* 初始化配置是否開啟本機快取 end *************
})
}
// 省略其它代碼
}是否開啟網路變化自動解析
配置當網路變化時,是否自動重新解析已解析的網域名稱,預設為true,開啟。
當網路變化時,已緩衝的解析結果很有可能已經失效了,此時需要重新解析才能擷取正確的結果。
關閉網路變化自動解析的配置如下:
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';
const ACCOUNT_ID = '這裡需要替換為阿里雲HTTPDNS控制台的Account ID'
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// 配置HTTPDNS
httpdns.configService(ACCOUNT_ID, {
context: this.context,
// ************* 初始化配置是否開啟網路變化自動解析 begin *************
reResolveCachedHostsAfterNetworkChanged: false,
// ************* 初始化配置是否開啟網路變化自動解析 end *************
})
}
// 省略其它代碼
}WiFi、蜂窩、無網路這三個狀態之間的切換算網路變化。
3G、4G、5G之間的切換不算網路變化。
逾時配置
佈建網域名解析請求時的逾時時間長度,預設為2000毫秒。
配置代碼如下:
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';
const ACCOUNT_ID = '這裡需要替換為阿里雲HTTPDNS控制台的Account ID'
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// 配置HTTPDNS
httpdns.configService(ACCOUNT_ID, {
context: this.context,
// ************* 初始化配置逾時時間長度 begin *************
timeoutInMs: 3000
// ************* 初始化配置逾時時間長度 end *************
})
}
// 省略其它代碼
}解析參數加密配置
佈建網域名解析介面參數加密Key,開啟加密之後,SDK請求服務時,會對網域名稱、用戶端IP、自訂解析業務參數、解析類型進行加密,以密文的形式傳輸到服務端,提高資料安全性,不配置預設不加密。
配置代碼如下:
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { httpdns } from '@aliyun/httpdns';
const ACCOUNT_ID = '這裡需要替換為阿里雲HTTPDNS控制台的Account ID'
const AES_SECRET_KEY = '這裡需要替換為阿里雲HTTPDNS控制台的AES加密Key'
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// 配置HTTPDNS
httpdns.configService(ACCOUNT_ID, {
context: this.context,
// ************* 初始化配置介面加密key begin *************
aesSecretKey: AES_SECRET_KEY,
// ************* 初始化配置介面加密key end *************
})
}
// 省略其它代碼
}