HarmonyOS鸿蒙Next中非公开发布的应用如何实现版本更新检测及引导

HarmonyOS鸿蒙Next中非公开发布的应用如何实现版本更新检测及引导 我的应用是非公开发布的,然后想在app内检查到有新版本,然后引导去更新

4 回复

cke_226.png

https://developer.huawei.com/consumer/cn/doc/app/agc-help-non-public-release-0000002278016482

非公开发布的官方文档上有说明:仅通过分发链接被用户发现、下载和更新。开发者要是想在在app内检查到有新版本,然后引导去更新的话需要自己去建一个能够获取非公开发布的分发链接的一个接口,比如说app调用这个接口的时候,发现接口获取到的链接有更新就去引导用户去点击链接进行更新,非公开发布更新是需要用浏览器打开链接的,没法直接在app内下载

更多关于HarmonyOS鸿蒙Next中非公开发布的应用如何实现版本更新检测及引导的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


学习了

鸿蒙Next中非公开发布的应用可通过自建版本服务器实现更新检测:应用内发起HTTP请求获取最新版本号及安装包下载地址,本地比对后提示用户。通过ohos.bundle.bundleManager获取当前版本,使用requestAppInstall接口或install能力触发静默/引导安装。注意需申请ohos.permission.INSTALL_PACKAGE权限。

对于非公开发布的应用(企业内部应用或旁加载场景),可基于自有服务器实现版本检测与更新引导。

1. 版本检测
通过 bundleManager.getBundleInfoForSelf 获取当前应用的 versionName,与服务器返回的最新版本比对。示例:

import { bundleManager } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

async function getCurrentVersion(): Promise<string> {
  try {
    const bundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);
    return bundleInfo.versionName; // 如 "1.0.0"
  } catch (err) {
    let message = (err as BusinessError).message;
    console.error(`获取版本失败: ${message}`);
    return '';
  }
}

如需版本号数字比对,可使用 versionCode

2. 引导更新
非系统应用无法静默安装,通常让用户手动安装。检测到新版本后,将 HAP 包下载到公共目录(如 Documents),再通过 startAbility 打开文件,系统会拉起安装界面。

import { request } from '@kit.BasicServicesKit';
import { fileIo as fs } from '@kit.CoreFileKit';
import { Want } from '@kit.AbilityKit';
import { common } from '@kit.AbilityKit';

async function downloadAndOpenHap(url: string, context: common.UIAbilityContext) {
  // 下载 HAP 到沙箱缓存目录
  const cacheDir = context.cacheDir;
  const filePath = `${cacheDir}/update.hap`;
  await request.downloadFile(context, { url, filePath }).promise;

  // 移动或复制到公共目录(此处以 Documents 为例,需权限 ohos.permission.WRITE_IMAGEVIDEO?可改用临时授权方式)
  // 简单演示:直接使用缓存路径拉起(部分设备可能受限,建议使用公共路径并申请权限)
  let want: Want = {
    action: 'ohos.want.action.viewData',
    uri: 'file://' + filePath,
    type: 'application/vnd.hap',
  };
  await context.startAbility(want);
}

更稳健的做法是利用系统文件管理器导出文件,或引导用户通过浏览器下载企业站点发布的 HAP。

3. 注意事项

  • 非系统应用无法获取 ohos.permission.INSTALL_BUNDLE 权限,只能依赖用户手动确认安装。
  • 文件打开需要在 Want 中正确设置 uritype,且文件路径需有访问权限。
  • 建议搭配版本忽略或强制更新策略,避免反复提示。
回到顶部