本文介绍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 *************
})
}
// 省略其它代码
}