Skip to content
Back to skills

Hmos Appgallery Kit Store Update

ASecurity

检测应用新版本并显示更新对话框,支持Phone/Tablet/PC/2in1/TV/Wearable设备,适用于应用启动检查更新和用户主动检查更新场景

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 22, 2026
developmenttypescriptapiperformance

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 22, 2026

npx -y skills add IsKenKenYa/skills --skill hmos-appgallery-kit-store-update --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Hmos Appgallery Kit Store Update?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Hmos Appgallery Kit Store Update
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/iskenkenya-hmos-appgallery-kit-store-update/badge)](https://www.skillsdirectory.com/skills/iskenkenya-hmos-appgallery-kit-store-update)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: hmos-appgallery-kit-store-update
description: 检测应用新版本并显示更新对话框,支持Phone/Tablet/PC/2in1/TV/Wearable设备,适用于应用启动检查更新和用户主动检查更新场景
---

# 应用市场更新功能技能

## 功能描述

本技能提供HarmonyOS应用版本检测和更新提醒能力,帮助开发者实现应用内版本检查和更新提示功能。通过调用应用市场更新服务API,可以检测应用是否有可更新版本,并在有新版本时显示升级对话框提示用户更新。

**核心能力**:
- 检查应用是否有可更新版本
- 显示升级对话框提示用户更新
- 支持多种设备类型(Phone、Tablet、PC/2in1、TV、Wearable)
- 提供更新状态监听能力(元服务场景)

**版本要求**:
- 起始版本:5.0.0(12)
- 元服务支持:从6.0.0(20)版本开始

## 使用场景

### 触发词
- "检查应用更新"
- "检测新版本"
- "显示更新对话框"
- "应用版本更新"
- "应用市场更新"

### 能做
- 检查当前应用是否有可更新版本
- 显示升级对话框提示用户进行版本更新
- 获取新版本信息(版本名称、版本号)
- 监听元服务更新状态(仅元服务场景)

### 绝不做
- 不支持模拟器运行(必须使用真机调试)
- 不支持未上架应用市场的应用
- 不支持邀请测试和公开测试版本
- 不支持签名信息不一致的应用更新检测

### 补充
- 本地安装版本须低于应用市场在架版本才能检查到更新
- 本地安装版本须和应用市场在架版本签名信息保持一致
- 同一设备下元服务的调用次数不超过6次/天、每30分钟调用次数不超过1次(仅元服务场景)

## 调用规范和规则

### 输入约束
- 应用必须已上架应用市场
- 应用签名信息必须与应用市场版本一致
- 必须使用真机调试(不支持模拟器)
- Context参数必须为common.UIAbilityContext类型

### 执行约束
- 最大耗时:异步调用,超时时间20秒
- 调用频次限制:元服务场景下,同一设备调用次数不超过6次/天,每30分钟不超过1次
- 必须在前台调用(应用不在前台会返回错误码1009400004)

### 内容约束
- 禁止在模拟器环境调用
- 禁止对未上架应用调用更新检查
- 禁止绕过用户确认直接执行更新
- 禁止在后台静默调用更新检查

### 降级约束
- 网络失败:提示用户检查网络连接,稍后重试
- 服务不可用:记录错误日志,降级为手动检查更新
- 设备不支持:提示用户当前设备不支持应用内更新功能
- 应用未上架:提示用户应用暂未上架应用市场

## 调用流程和步骤

### 步骤1:准备阶段

**前置校验**:
1. 确认应用已上架应用市场
2. 确认使用真机调试环境
3. 确认应用在前台运行
4. 确认设备类型支持(Phone、Tablet、PC/2in1、TV、Wearable)

**参数准备**:
```typescript
import { updateManager } from '@kit.AppGalleryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import type { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
```

### 步骤2:检查应用更新

**示例代码**:
```typescript
async function checkAppUpdate(context: common.UIAbilityContext): Promise<void> {
  try {
    const checkResult: updateManager.CheckUpdateResult = await updateManager.checkAppUpdate(context);
    
    if (checkResult.updateAvailable === updateManager.UpdateAvailableCode.LATER_VERSION_EXIST) {
      hilog.info(0, 'TAG', '发现新版本');
      
      if (checkResult.versionName) {
        hilog.info(0, 'TAG', `新版本名称: ${checkResult.versionName}`);
      }
      if (checkResult.versionCode) {
        hilog.info(0, 'TAG', `新版本号: ${checkResult.versionCode}`);
      }
      
      await showUpdateDialog(context);
    } else {
      hilog.info(0, 'TAG', '当前已是最新版本');
    }
  } catch (error) {
    const err = error as BusinessError;
    handleUpdateError(err);
  }
}
```

### 步骤3:显示更新对话框

**示例代码**:
```typescript
async function showUpdateDialog(context: common.UIAbilityContext): Promise<void> {
  try {
    const resultCode: updateManager.ShowUpdateResultCode = await updateManager.showUpdateDialog(context);
    
    if (resultCode === updateManager.ShowUpdateResultCode.SHOW_DIALOG_SUCCESS) {
      hilog.info(0, 'TAG', '更新对话框显示成功');
    } else {
      hilog.error(0, 'TAG', '更新对话框显示失败');
    }
  } catch (error) {
    const err = error as BusinessError;
    handleUpdateError(err);
  }
}
```

### 步骤4:错误处理

**错误处理代码**:
```typescript
function handleUpdateError(error: BusinessError): void {
  switch (error.code) {
    case 401:
      hilog.error(0, 'TAG', '参数错误');
      break;
    case 1009400001:
      hilog.error(0, 'TAG', 'SA连接错误');
      break;
    case 1009400002:
      hilog.error(0, 'TAG', '服务请求错误');
      break;
    case 1009400003:
      hilog.error(0, 'TAG', '网络错误,请检查网络连接');
      break;
    case 1009400004:
      hilog.error(0, 'TAG', '应用不在前台,请在前台调用');
      break;
    case 1009400005:
      hilog.error(0, 'TAG', '未同意隐私协议');
      break;
    case 1009400006:
      hilog.error(0, 'TAG', '调用频率超限,请稍后重试');
      break;
    case 1009400007:
      hilog.error(0, 'TAG', '其他错误');
      break;
    default:
      hilog.error(0, 'TAG', `未知错误: ${error.code}, ${error.message}`);
  }
}
```

### 步骤5:降级处理

**降级处理代码**:
```typescript
async function checkUpdateWithFallback(context: common.UIAbilityContext): Promise<void> {
  try {
    await checkAppUpdate(context);
  } catch (error) {
    const err = error as BusinessError;
    
    if (err.code === 1009400003) {
      hilog.warn(0, 'TAG', '网络不可用,降级为手动检查');
      showManualUpdateTip();
    } else if (err.code === 1009400004) {
      hilog.warn(0, 'TAG', '应用不在前台,延迟检查');
      scheduleBackgroundCheck();
    } else {
      hilog.error(0, 'TAG', '更新检查失败,请稍后重试');
    }
  }
}

function showManualUpdateTip(): void {
  console.log('网络不可用,请手动检查更新或稍后重试');
}

function scheduleBackgroundCheck(): void {
  console.log('已安排稍后在应用前台时检查更新');
}
```

## 错误码说明

| 错误码 | 说明 | 解决方法 |
|-------|------|---------|
| 401 | 参数错误 | 检查context参数是否为common.UIAbilityContext类型 |
| 1009400001 | SA连接错误 | 重试或检查应用市场服务是否正常 |
| 1009400002 | 服务请求错误 | 检查应用是否已上架应用市场 |
| 1009400003 | 网络错误 | 检查网络连接,稍后重试 |
| 1009400004 | 应用不在前台 | 确保在前台调用API |
| 1009400005 | 未同意隐私协议 | 引导用户同意隐私协议 |
| 1009400006 | 调用频率超限 | 降低调用频率,元服务场景每天不超过6次 |
| 1009400007 | 其他错误 | 查看错误日志,联系技术支持 |

## 编译和修复问题

### 依赖声明
```json
{
  "dependencies": {
    "@kit.AppGalleryKit": "^5.0.0",
    "@kit.PerformanceAnalysisKit": "^5.0.0",
    "@kit.AbilityKit": "^5.0.0",
    "@kit.BasicServicesKit": "^5.0.0"
  }
}
```

### 环境要求
- HarmonyOS API:5.0.0(12)及以上
- DevEco Studio:3.1及以上
- 设备要求:真机调试(不支持模拟器)
- 支持设备:Phone、Tablet、PC/2in1(API 12+)、TV(API 19+)、Wearable(API 20+)

### 常见编译问题

**问题1:导入模块失败**
```
Error: Cannot find module '@kit.AppGalleryKit'
```
**解决方法**:确保项目API版本不低于5.0.0(12),并在oh-package.json5中添加依赖

**问题2:Context类型错误**
```
Error: Type 'UIAbilityContext' is not assignable to type 'common.UIAbilityContext'
```
**解决方法**:确保正确导入类型:`import type { common } from '@kit.AbilityKit'`

**问题3:权限配置缺失**
```
Error: Permission denied
```
**解决方法**:应用市场更新功能不需要额外权限配置,检查应用签名是否正确

## 常见问题与解决方法

### Q1:模拟器上提示"无法获取内容,请点击屏幕重试"
**原因**:应用市场更新功能不支持模拟器
**解决方法**:
- 使用真机调试
- 在模拟器上暂时禁用更新检查功能

### Q2:检查不到更新版本
**原因**:可能是版本、签名或测试状态问题
**解决方法**:
- 确认本地安装版本低于应用市场版本
- 确认本地版本与应用市场版本签名信息一致
- 确认应用不是邀请测试或公开测试版本

### Q3:调用接口返回错误码1009400004
**原因**:应用不在前台运行
**解决方法**:
- 确保应用在前台时调用API
- 在onPageShow或onClick事件中调用
- 避免在onCreate等生命周期过早调用

### Q4:元服务调用频率受限
**原因**:元服务更新检查有调用频率限制
**解决方法**:
- 同一设备每天调用不超过6次
- 每30分钟调用不超过1次
- 建议用户主动触发检查,避免自动频繁检查

### Q5:TV或Wearable设备无法正常使用
**原因**:不同API版本支持的设备类型不同
**解决方法**:
- API 19+支持TV设备
- API 20+支持Wearable设备
- 在不支持设备上返回固定值,需要做兼容处理

## 输出结果报告

执行完成后输出以下信息:

```json
{
  "status": "success",
  "updateAvailable": true,
  "versionName": "1.0.1",
  "versionCode": 1001,
  "dialogShown": true,
  "apiUsed": [
    "updateManager.checkAppUpdate",
    "updateManager.showUpdateDialog"
  ]
}
```

## 参考文档

- [应用市场更新功能开发指南](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/store-update)
- [updateManager API参考](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/store-updatemanager)

## 完整示例代码

- [ArkTS示例 - 检查更新](assets/check_update_example.ets)
- [ArkTS示例 - 完整流程](assets/complete_update_example.ets)

## 测试用例

### 正向测试用例
- [正常检查更新流程](tests/test_positive.py):应用已上架,有新版本,检查更新成功
- [显示更新对话框](tests/test_positive.py):有新版本时成功显示更新对话框

### 边界测试用例
- [当前已是最新版本](tests/test_boundary.py):检查更新返回无新版本
- [调用频率限制](tests/test_boundary.py):元服务场景下测试调用频率限制

### 异常测试用例
- [网络异常](tests/test_exception.py):网络不可用时的错误处理
- [应用未上架](tests/test_exception.py):应用未上架应用市场时的错误处理
- [模拟器环境](tests/test_exception.py):在模拟器上调用API的错误处理

Files in this skill

  • SUB_SKILL.md10.8 KB
  • assets/check_update_example.ets3.2 KB
  • assets/complete_update_example.ets4.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…