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

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

一、场景

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

二、版本支持

限制项 说明
设备支持 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
        });
    }
}
相关推荐
resh_people1 天前
开源鸿蒙平台 KMP_CMP 三方库「Kermit」适配全流程
华为·开源·harmonyos
李游Leo1 天前
HarmonyOS 7 EasyGo + ArkUI Navigation:平行视界主副页筛选事务与跨栏撤销一致性【鸿蒙心迹】
华为·harmonyos
HwJack201 天前
【共创稿事节】HarmonyOS 7空间应用的可用性测试和体验评估小方法分享
华为·harmonyos·可用性测试
m0_738185821 天前
Flutter 鸿蒙化实战:flutter_scankit 适配 OpenHarmony,华为 ScanKit 扫码
flutter·华为·harmonyos·鸿蒙
用户117910488331 天前
别让AI随便启动你的LSP:hmharness给语言服务器加SHA256门禁 GitHub:swsgbl/hmharness
ai编程·harmonyos
李游Leo2 天前
HarmonyOS 7 + Share Kit-Window Kit:精准碰一碰屏幕坐标的窗口换算与落点拒绝【鸿蒙心迹】
华为·harmonyos
翼辉cto2 天前
Compose Multiplatform KV 存储库 multiplatform-settings 的 OpenHarmony 鸿蒙化适配实战
华为·harmonyos
事圆则缓2 天前
Flutter 开发鸿蒙实战:从 OpenHarmony 适配版到 HAP 构建与插件接入
flutter·华为·harmonyos
传奇开心果编程2 天前
【ArkUI进阶练中学】第9课:分布式能力与多设备协同
学习·ui·华为·harmonyos
李游Leo2 天前
HarmonyOS 7 + Spatial Recon Kit-C++:3DGS 输入帧内参与位姿的版本一致性门禁【鸿蒙心迹】
c++·3d·harmonyos