XuqmGroup-HarmonySDK/xuqm-sdk/src/main/ets/update/UpdateSDK.ets

84 行
2.6 KiB
Plaintext

2026-04-21 22:07:29 +08:00
import bundleManager from '@ohos.bundle.bundleManager'
import common from '@ohos.app.ability.common'
import request from '@ohos.request'
import type { BusinessError } from '@ohos.base'
2026-04-21 22:07:29 +08:00
import { HttpClient } from '../core/HttpClient'
import type { AppVersionInfo, RnBundleInfo } from '../core/Types'
import { SDKContext } from '../core/SDKContext'
export interface AppUpdateResult {
hasUpdate: boolean
info?: AppVersionInfo
}
export interface RnUpdateResult {
hasUpdate: boolean
info?: RnBundleInfo
}
export class UpdateSDK {
static async checkAppUpdate(appKey: string): Promise<AppUpdateResult> {
const bundleInfo = bundleManager.getBundleInfoForSelfSync(
bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT
)
const currentVersionCode = bundleInfo.versionCode
const data = await HttpClient.get<AppVersionInfo>(
`/api/v1/updates/app/check?appKey=${appKey}&versionCode=${currentVersionCode}&platform=HARMONY`
2026-04-21 22:07:29 +08:00
)
if (data.latestVersionCode <= currentVersionCode) {
return { hasUpdate: false }
}
return { hasUpdate: true, info: data }
}
static async openAppMarket(context: common.UIAbilityContext, url?: string): Promise<void> {
if (!url) {
return
}
await context.openLink(url, { appLinkingOnly: false })
}
2026-04-21 22:07:29 +08:00
static async checkRnUpdate(
appKey: string,
bundleName: string,
currentBundleVersion: number,
packageName?: string
2026-04-21 22:07:29 +08:00
): Promise<RnUpdateResult> {
const data = await HttpClient.get<RnBundleInfo>(
`/api/v1/rn/update/check?appKey=${appKey}&bundleName=${bundleName}&bundleVersion=${currentBundleVersion}${packageName ? `&packageName=${encodeURIComponent(packageName)}` : ''}`
2026-04-21 22:07:29 +08:00
)
if (data.bundleVersion <= currentBundleVersion) {
return { hasUpdate: false }
}
if (packageName && data.packageMatched === false) {
return { hasUpdate: false, info: data }
}
2026-04-21 22:07:29 +08:00
return { hasUpdate: true, info: data }
}
static async downloadRnBundle(
context: common.UIAbilityContext,
downloadUrl: string,
destFilename: string
): Promise<string> {
const destPath = context.cacheDir + '/' + destFilename
await new Promise<void>((resolve, reject) => {
request.downloadFile(context, {
url: downloadUrl,
filePath: destPath,
}, (err: BusinessError | null, task: request.DownloadTask) => {
2026-04-21 22:07:29 +08:00
if (err) { reject(err); return }
task.on('complete', resolve)
task.on('fail', (error: number) => reject(new Error(`Download failed: ${error}`)))
})
})
if (SDKContext.getConfig().debug) {
console.log('[UpdateSDK] RN bundle downloaded to', destPath)
}
return destPath
}
}