HarmonyOS 鸿蒙Next应用未上架 ,如何调试检测应用更新功能是否正常?
HarmonyOS 鸿蒙Next应用未上架 ,如何调试检测应用更新功能是否正常? 鸿蒙的checkAppUpdate这个API未上架时能否是否可以生效调用?
未上架应用可以生效调用checkAppUpdate这个API。
【背景知识】
应用市场更新功能为开发者提供版本检测、显示更新提醒功能。开发者使用应用市场更新功能可以提醒用户及时更新到最新版本。
当应用启动完成或用户在应用中主动检查应用新版本时,开发者可以通过本服务,来查询应用是否有可更新的版本。如果存在可更新版本,您可以通过本服务为用户显示更新提醒。
【解决方案】
接口说明:
checkAppUpdate(context: common.UIAbilityContext): Promise<CheckUpdateResult>。
检查更新接口,用于检测当前是否有新版本。
showUpdateDialog(context:common.UIAbilityContext): Promise<ShowUpdateResultCode>。
显示升级对话框接口,用于提示用户进行升级。
参考链接:应用市场更新接口API
开发步骤:
开发者可以在应用启动或者设置内手动触发检查版本更新,并显示升级弹窗,点击升级跳转应用市场进行升级。
注意:假设某应用在应用市场的版本是100001,开发者可以将本地调试代码中app.json5文件里的versionCode改为100000,然后可以调试版本更新检查业务。
检测新版本和升级弹窗代码如下:
import { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { updateManager } from '@kit.AppGalleryKit';
const TAG = 'checkAppUpdate';
@Entry
@Component
struct Index {
@State message: string = 'check';
@State @Watch('showUpdateDialog') updateAvailableResult: number = 0; // 默认为0,1表示存在新版本
context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
checkAppUpdate() {
try {
updateManager.checkAppUpdate(this.context).then((checkResult: updateManager.CheckUpdateResult) => {
this.updateAvailableResult = checkResult.updateAvailable.valueOf();
hilog.info(0, TAG, `Succeeded in checking Result updateAvailable: ${checkResult.updateAvailable}`);
}).catch((error: BusinessError) => {
hilog.error(0, TAG, `checkAppUpdate onError.code is ${error.code}, message is ${error.message}`);
});
} catch (error) {
hilog.error(0, TAG, `checkAppUpdate onError.code is ${error.code}, message is ${error.message}`);
}
}
showUpdateDialog() {
try {
updateManager.showUpdateDialog(this.context).then((resultCode: updateManager.ShowUpdateResultCode) => {
hilog.info(0, TAG, `Succeeded in showing UpdateDialog resultCode: ${resultCode}`);
}).catch((error: BusinessError) => {
hilog.error(0, TAG, `showUpdateDialog onError.code is ${error.code}, message is ${error.message}`);
});
} catch (error) {
hilog.error(0, TAG, `showUpdateDialog onError.code is ${error.code}, message is ${error.message}`);
}
}
build() {
Column() {
Text(this.message)
.fontSize($r('app.float.page_text_font_size'))
.fontWeight(FontWeight.Bold)
.margin(50)
.onClick(() => {
this.checkAppUpdate();
})
}
.height('100%')
.width('100%')
}
}
【常见FAQ】
Q:设备已安装低版本应用,发布高版本邀请测试是否能测试验证应用内更新功能。
A:不行,应用市场更新API只能检测到正式在架的高版本,未正式上架应用市场的应用使用该API抛1009400001异常。
Q:是否支持强制升级(不升级无法进入应用)?
A:目前不支持强制更新应用,但是开发者可以自行实现,通过checkAppUpdate判断用户版本是否需要更新,根据返回的CheckUpdateResult的值来判断是否有新版本,从而可弹窗拉起应用市场的应用详情页更新。
Q:升级弹窗是否能自定义?
A:不可以,检测到有新版本需要更新后,弹出系统弹窗去应用市场的应用详情页更新,跳转应用详情页参考应用详情页展示。
Q:是否可以下载安装历史版本的App?
A:历史版本已下架,当前不支持。
Q:上架时未更新版本号,应用市场是否会对用户有更新提示?
A:不会有提示,用户自行搜索可以更新下载,或者伙伴升级版本号重新提交审核。
Q:判断版本升级的接口checkAppUpdate是根据versionName还是versionCode来判断的?
A:通过versionCode来判断的。
Q:有旧版本应用时,打开应用市场,为何不提示更新?
A:
- 版本号是在上传的软件包中自动解析的,对应工程中的app.json5配置文件中的versionCode和versionName字段。打包升级前需要手动修改工程的versionCode,必须大于在架版本的versionCode,应用市场显示的是versionName。
- 新版本未完成上架审核流程或存在同步延迟,导致市场端未检测到更新。
更多关于HarmonyOS 鸿蒙Next应用未上架 ,如何调试检测应用更新功能是否正常?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我记得华为应用市场有一个内测分发功能上传测试包,生成内测链接后安装测试包,然后可以通过checkAppUpdate接口正常检测更新。
如果只是测试自己升级代码可用,可以找一个上架的应用,使用他们的包名,将包名替换成你的app.json5中的bundleName,然后IDE签名,启动,versionCode设置小些,就可以验证升级功能了
AppGellary里面有个邀请测试,可以自己上传软件包之后,发起邀请测试,别人也看不到,自己也可以测试
可以尝试提交应用尝鲜,或者上一个版本以后,进行升级逻辑的调试
针对鸿蒙Next未上架应用调试检测更新功能:
-
使用本地模拟更新服务:在工程目录创建mock更新接口,返回测试用版本信息,通过DevEco Studio运行调试。
-
配置测试用AppGallery Connect:在AGC控制台创建未上架应用配置,使用测试HAP包签名信息,通过真机调试获取真实响应。
-
使用华为提供的更新SDK测试接口:调用ohos.update API时启用测试模式,直接指定测试版本号进行验证。
-
通过ADB命令强制触发更新检查:
adb shell am broadcast -a ohos.update.test.UPDATE_CHECK
注意确保测试环境与正式环境签名一致。
对于HarmonyOS Next应用未上架时调试应用更新功能的问题:
- checkAppUpdate API在开发阶段可以正常调用,但需要配置正确的测试环境:
- 使用华为AGC的测试版本功能
- 配置测试设备列表
- 调试建议:
- 通过DevEco Studio的模拟器或真机调试
- 使用测试版AppGallery Connect配置测试更新包
- 查看API返回的response数据验证逻辑
- 注意事项:
- 确保应用签名和配置正确
- 测试时需要联网并登录测试账号
- 更新包版本号需高于当前安装版本
未上架状态下的调试结果与实际上架后的行为基本一致,可以准确验证更新功能。