鸿蒙 应用市场更新功能:版本检测与更新提醒

在应用开发中,版本更新是一个常见需求。应用市场更新功能为已上架应用提供版本检测、显示更新提醒能力,可以在应用内提醒用户及时更新到最新版本。

一、场景

当应用启动完成或用户在应用中主动检查应用新版本时,可以通过本服务来查询应用是否有可更新的版本。如果存在可更新版本,可以通过本服务为用户显示更新提醒。

二、版本支持

限制项 说明
设备支持 Phone、Tablet、PC/2in1、TV(19+)、Wearable(20+)
模拟器 不支持(请使用真机调试,模拟器会提示"无法获取内容,请点击屏幕重试")
应用上架 应用必须在应用市场已上架

三、核心接口

接口 描述
checkAppUpdate(context) 检查更新接口,用于检测当前是否有新版本,返回Promise<CheckUpdateResult>
showUpdateDialog(context) 显示升级对话框接口,用于提示用户进行升级,返回Promise<ShowUpdateResultCode>

四、开发步骤

4.1 检测应用新版本

步骤1:导入模块
复制代码
import { updateManager } from '@kit.AppGalleryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import type { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
步骤2:构造Context参数
复制代码
let context: common.UIAbilityContext = 
    this.getUIContext().getHostContext() as common.UIAbilityContext;
步骤3:调用checkAppUpdate检查更新
复制代码
try {
    updateManager.checkAppUpdate(context)
        .then((checkResult: updateManager.CheckUpdateResult) => {
            hilog.info(0, 'TAG', "Succeeded in checking Result updateAvailable:" + checkResult.updateAvailable);
        })
        .catch((error: BusinessError) => {
            hilog.error(0, 'TAG', `checkAppUpdate error: ${error.code}, message: ${error.message}`);
        });
} catch (error) {
    hilog.error(0, 'TAG', `checkAppUpdate error: ${error.code}, message: ${error.message}`);
}

检测条件说明

条件 要求
版本要求 本地安装版本须低于应用市场在架版本
签名要求 本地安装版本须和应用市场在架版本签名信息保持一致
测试类型 暂不支持邀请测试和公开测试

4.2 显示升级对话框

步骤1:导入模块
复制代码
import { updateManager } from '@kit.AppGalleryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import type { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
步骤2:构造Context参数
复制代码
let context: common.UIAbilityContext = 
    this.getUIContext().getHostContext() as common.UIAbilityContext;
步骤3:调用showUpdateDialog显示升级对话框
复制代码
try {
    updateManager.showUpdateDialog(context)
        .then((resultCode: updateManager.ShowUpdateResultCode) => {
            hilog.info(0, 'TAG', "Succeeded in showing UpdateDialog resultCode:" + resultCode);
        })
        .catch((error: BusinessError) => {
            hilog.error(0, 'TAG', `showUpdateDialog error: ${error.code}, message: ${error.message}`);
        });
} catch (error) {
    hilog.error(0, 'TAG', `showUpdateDialog error: ${error.code}, message: ${error.message}`);
}

五、完整代码

复制代码
import { updateManager } from '@kit.AppGalleryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import type { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct Index {
    private context: common.UIAbilityContext = 
        this.getUIContext().getHostContext() as common.UIAbilityContext;

    build() {
        Column() {
            Button('检查更新')
                .onClick(() => {
                    this.checkUpdate();
                })
                .margin(10)
            
            Button('显示升级对话框')
                .onClick(() => {
                    this.showUpdateDialog();
                })
                .margin(10)
        }
        .width('100%')
        .height('100%')
        .justifyContent(FlexAlign.Center)
    }

    // 检查应用新版本
    private checkUpdate(): void {
        try {
            updateManager.checkAppUpdate(this.context)
                .then((checkResult: updateManager.CheckUpdateResult) => {
                    if (checkResult.updateAvailable) {
                        hilog.info(0, 'TAG', '有新版本可用');
                        // 有新版本,可以调用showUpdateDialog显示更新提醒
                        this.showUpdateDialog();
                    } else {
                        hilog.info(0, 'TAG', '当前已是最新版本');
                        this.showToast('当前已是最新版本');
                    }
                })
                .catch((error: BusinessError) => {
                    hilog.error(0, 'TAG', `checkAppUpdate error: ${error.code}, ${error.message}`);
                    this.showToast('检查更新失败');
                });
        } catch (error) {
            hilog.error(0, 'TAG', `checkAppUpdate error: ${error.code}, ${error.message}`);
            this.showToast('检查更新失败');
        }
    }

    // 显示升级对话框
    private showUpdateDialog(): void {
        try {
            updateManager.showUpdateDialog(this.context)
                .then((resultCode: updateManager.ShowUpdateResultCode) => {
                    hilog.info(0, 'TAG', `showUpdateDialog resultCode: ${resultCode}`);
                })
                .catch((error: BusinessError) => {
                    hilog.error(0, 'TAG', `showUpdateDialog error: ${error.code}, ${error.message}`);
                    this.showToast('显示更新提醒失败');
                });
        } catch (error) {
            hilog.error(0, 'TAG', `showUpdateDialog error: ${error.code}, ${error.message}`);
            this.showToast('显示更新提醒失败');
        }
    }

    private showToast(msg: string) {
        this.getUIContext().getPromptAction().showToast({
            message: msg,
            duration: 2000
        });
    }
}
相关推荐
小雨青年7 小时前
【HarmonyOS 7 平行视界深度实战】06 页面路由、返回栈与多层跳转怎么处理
华为·harmonyos
2501_9197490312 小时前
华为鸿蒙免费刷题软件—小羊免费刷题
华为·harmonyos·鸿蒙
游戏智眼13 小时前
HarmonyOS 7 适配升级:NIM SDK 释放端侧 AI 与网络能力
人工智能·harmonyos
程序猿追14 小时前
react-native-elements 三方库鸿蒙版本适配与使用(MatePad Edge 双模式真机验证)
华为·harmonyos
lqj_本人15 小时前
白泽上手:给小鸿 SE 写一个温控风扇工程
harmonyos
贾伟康15 小时前
【口算王|12】HarmonyOS ArkTS 启动页实战:处理 Splash 到训练首页的稳定切换
harmonyos·arkts·启动优化·uiability·windowstage
万物智能信息科技16 小时前
RK3568 的多路显示移植—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
linux·开发语言·华为·开源·harmonyos
万物智能信息科技17 小时前
MIPI DSI屏幕输出—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
嵌入式硬件·华为·开源·harmonyos·鸿蒙
贾伟康18 小时前
【口算王|13】HarmonyOS ArkTS 应用启动链路实战:从 EntryAbility 到首屏加载保持窗口与路由稳定
harmonyos·arkts·arkui·应用启动·entryability
万物智能信息科技20 小时前
LVDS屏幕输出桌面—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
人工智能·华为·开源·harmonyos·鸿蒙