鸿蒙Next-应用检测、安装以及企业内部商店的实现
一、企业内部应用检测和更新升级
A应用检测是否安装B应用
canOpenApp():boolean{ try { let link = 'schB://com.example.test/open'; // 替换成你目标应用的link串儿 let canOpen = bundleManager.canOpenLink(link); console.log("canOpen:"+canOpen) this.openDeepLink(link) return canOpen; } catch (err) { let message = (err as BusinessError).message; console.log('testTag', 'canOpenLink failed: %{public}s', message); } return false; }
link的构成
为了便于应用A判断设备上是否有安装应用B,从而决定是否引导用户去下载应用B,需要应用A、B做如下配置:
应用B配置,在entry模块的 module.json5文件中添加配置具体标签路径如下:module-> abilities -> skills-> 添加 uris
{ "abilities": [ { "skills": [ { "actions": [ "ohos.want.action.home", "ohos.want.action.viewData" ], "entities": [ "entity.system.home" ], "uris": [ { "scheme":"schB", "host":"com.example.test", "path":"open", } ], } ] } ] }
应用A配置,在entry模块的module.json5文件中添加配置具体标签路径如下:module-> querySchemes
"querySchemes": [ "schB"]
打开某个应用
this.openDeeplink("schB://com.example.test/open") /** * 打开或者下载安装应用 * @param deeplink */ private openDeepLink(deeplink: string): void { let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; context.openLink(deeplink).then(() => { console.info('openlink success.') }).catch((error: BusinessError) => { console.error('openlink failed.') }); }
应用升级
deeplink的构成结构(具体解释见第二章节《二、企业内部商店如何实现》):
let deeplink: string = "store://enterprise/manifest?url=https://xxx/xxx.json5";
/** * 打开或者下载安装应用 * @param deeplink */ private openDeepLink(deeplink: string): void { let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; context.openLink(deeplink).then(() => { console.info('openlink success.') }).catch((error: BusinessError) => { console.error('openlink failed.') }); }
二、企业内部商店如何实现
对于不适合或不希望在华为应用市场上公开发布的、面向企业内部或特定人群的HarmonyOS应用的分发,必须使用专用的组织内部发布证书和组织内部发布Profile来编译打包HarmonyOS应用,然后将应用包及应用描述文件上传到您的服务器或第三方云上,用户按指定方式直接下载安装即可。
上传应用包至服务器
将编译得到的各个HAP/HSP包上传至您的服务器或第三方云上,获取HAP/HSP包下载URL,下载URL必须以“https”开头。
生成应用描述文件并上传至服务器
基于应用信息生成应用描述文件(如“manifest.json5”,文件名可自定义),代码如下:
{ "app": { "bundleName": "com.example.demo.a", "bundleType": "app", "versionCode": 1000000, "versionName": "1.0.0", "label": "DemoA", "deployDomain": "应用、图标以及描述文件部署域名", "icons": { "normal": "标准图标下载链接", "large": "大图标下载链接" }, "minAPIVersion": "4.1.0(11)", "targetAPIVersion": "4.1.0(11)", "modules": [ { "name": "module1", "type": "entry", "deviceTypes": [ "tablet", "phone" ], "packageUrl": "hap包下载链接", "packageHash": "hap包sha256值" }, { "name": "module2", "type": "feature", "deviceTypes": [ "tablet", "phone" ], "packageUrl": "hap包下载链接", "packageHash": "hap包sha256值" } ] }}
需传入的应用信息如下表所示。
属性
数据类型
必选(M)/可选(O)
说明
bundleName
字符串
M
应用的Bundle名称。
bundleType
字符串
M
应用的Bundle类型,用于区分HarmonyOS应用或元服务。
当前仅支持配置为“app”,表示HarmonyOS应用。
versionCode
数值
M
应用的版本号。
versionName
字符串
M
应用版本号的文字描述。
label
字符串
M
应用的名称,建议与实际应用名称一致,否则会出现下载与安装过程中应用名不一致的问题。
deployDomain
字符串
M
应用、图标及描述文件的部署域名,需要与icons、packageUrl以及描述文件自身下载URL中的域名一致,否则会导致下载失败。
icons
字符串
M
应用的图标,提供企业内部部署的图片下载地址,必须以“https”开头。
minAPIVersion
字符串
M
应用运行所需SDK的API最小版本,用于判断是否与当前设备兼容。
targetAPIVersion
字符串
M
应用运行所需的API目标版本,用于判断是否与当前设备兼容。
modules
列表
M
应用分包module信息列表,以数组形态组织,其中至少包括一个entry module信息。
name
字符串
M
module的名称,该名称在整个应用须唯一。
type
字符串
M
应用module的类型,取值范围:
deviceTypes
字符串
M
当前module可以运行在哪类设备上,目前仅支持phone(手机)和tablet(平板)。
packageUrl
字符串
M
当前module上传至服务器后生成的下载URL,必须以“https”开头。
packageHash
字符串
M
当前module的SHA256值。例如,可通过certutil -hashfile 包路径 SHA256命令获取。
说明
“包路径”指应用HAP/HSP包在本地的存储路径。
entry:应用的主模块
feature:应用的动态特性模块
shared:动态共享包模块(仅支持应用内共享包)
将应用描述文件上传至您的服务器或第三方云上,获取该描述文件的下载URL。
构造DeepLink拉起应用下载安装
获取应用描述文件的下载URL后,您便可使用该URL构造DeepLink来拉起应用下载安装。DeepLink需满足如下条件:
仅支持页面点击行为触发拉起,不支持地址栏输入DeepLink拉起或HTML头文件自动拉起。
仅支持华为浏览器拉起,且从华为浏览器拉起的所有行为,均需判断是否有用户点击行为,确认用户点击才允许拉起。
DeepLink格式:store://enterprise/manifest?url=https://xxx.xxx/xxx.json5
Schema
store://
Host
enterprise
Path
manifest
参数
描述文件上传至服务器后生成的下载URL,必须以“https”开头。
示例:url=https://xxx.xxx/xxx.json5
说明
如描述文件下载URL内包含特殊字符,还需进行特殊字符编码:declare function encodeURIComponent(uriComponent: string | number | boolean): string;
同时,服务器配置需满足如下条件,请特别关注:
您需要配置服务器支持分片下载能力。建议您在配置后进行验证:构造下载请求头包含range字段,返回码为206(如下方示例图),表示服务器支持分片下载;反之则不支持。
您需要配置服务器返回的响应头(如下方示例图),使得应用描述文件和应用包可正确传输下载。
例如,用户在应用分发页面点击“下载”按钮后,华为浏览器将解析您构造的DeepLink,触发应用的下载安装流程。
<html lang="en"> <head> <meta charset="UTF-8"> <title>Button Open DeepLink Example</title> <script> function openDeepLink() { let url ='store://enterprise/manifest?url=https://xxx.xxx/xxx.json5' window.open(url, '_parent') } </script> </head> <body> <button onclick="openDeepLink()">下载</button> </body></html>
更新场景下,可以使用openlink方式直接拉起下载安装:
private openDeepLink(deeplink: string): void {// deeplink格式具体见开发者文档let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;context.openLink(deeplink).then(() => {console.info('openlink success.')}).catch((error: BusinessError) => {console.error('openlink failed.')});}
如果应用已安装成功,但被阻止运行,请在“设置 > 系统 > 企业设备和应用管理 > 企业应用管理”中找到您的企业内部应用,点击“允许”。
说明
系统软件版本(3.0.0.22)的路径为 “设置 > 通用 > 企业设备和应用管理”。
关注我获取更多知识或者投稿
相关文章:

鸿蒙Next-应用检测、安装以及企业内部商店的实现
一、企业内部应用检测和更新升级 A应用检测是否安装B应用 canOpenApp():boolean{ try { let link schB://com.example.test/open; // 替换成你目标应用的link串儿 let canOpen bundleManager.canOpenLink(link); console.log("canOpen:"canOpen…...
存量思维和增量思维
在网上看一篇文章,有两种典型的阅读方式。 一种,是挑刺式,眼里只有缺点。 比如,有人不厌其烦地告诉作者,哪段有错别字,哪段不够严谨。 闲得蛋疼。 有这工夫,多看会书,不香么&…...
golang将大接口传递给小接口以及场景
文章目录 golang将大接口传递给小接口背景什么是大接口传递给小接口使用场景 golang将大接口传递给小接口 背景 在 Go 语言中,接口是一种强大的工具,它允许我们定义对象的行为而不关心其具体实现。特别是在复杂的应用程序中,将一个实现了较…...
K8s 1.27.1 实战系列(七)Deployment
一、Deployment介绍 Deployment负责创建和更新应用程序的实例,使Pod拥有多副本,自愈,扩缩容等能力。创建Deployment后,Kubernetes Master 将应用程序实例调度到集群中的各个节点上。如果托管实例的节点关闭或被删除,Deployment控制器会将该实例替换为群集中另一个节点上的…...

Swift系列02-Swift 数据类型系统与内存模型
Swift 是一门现代的、安全的编程语言,其类型系统和内存模型设计对性能和安全性有着重要影响。本文将深入探讨 Swift 的数据类型系统与内存模型,帮助你更好地理解并利用这些特性来优化你的 iOS 应用。本文主要包含: 值类型和引用类型…...

MySQL中like模糊查询如何优化?
大家好,我是锋哥。今天分享关于【MySQL中like模糊查询如何优化?】面试题。希望对大家有帮助; MySQL中like模糊查询如何优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MySQL 中,LIKE 模糊查询虽然非常常见,…...

用低代码平台集成人工智能:无需专业开发也能实现智能化
引言:人工智能的普及与企业需求 随着人工智能(AI)技术的飞速发展,越来越多的企业开始意识到其在提升运营效率、优化客户体验和推动业务创新方面的巨大潜力。从智能客服到自动化决策支持,从数据分析到个性化推荐&#x…...

【使用hexo模板创建个人博客网站】
使用hexo模板创建个人博客网站 环境准备node安装hexo安装ssh配置 使用hexo命令搭建个人博客网站hexo命令 部署到github创建仓库修改_config.yml文件 编写博客主题扩展 环境准备 node安装 进入node官网安装node.js 使用node -v检查是否安装成功 安装成功后应该出现如上界面 …...

最简单圆形进度条实现CSS+javascript,两端带圆弧
两端是弧形的圆形进度条。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title…...

vuejs 模板语法、条件渲染、v-for、事件处理、表单输入绑定
创建vue项目之后我们就可以开始写代码了,我们的代码一般都会写在src目录-components目录-HelloWord.vue文件内。 我们之前写的HTML文件的结构是HTML代码可以集成或者连接外部的css/js文件。 我们通过vue建立的项目,它的结构是在一个vue文件内集成了HTML…...
论文阅读方法
文章目录 步骤一:对论文进行自我判断阅读题目和关键词。阅读摘要阅读总结要点 步骤二:阅读文章阅读图表和图表的注释阅读引言阅读实验部分阅读结果和作者对结果的讨论(创新点)要点 步骤三:精度论文回答问题1回答问题2回…...
问题解决:Kali Linux 中配置启用 Vim 复制粘贴功能
在 Kali Linux 系统中,使用 XShell 或其他类似终端时,Vim 编辑器的默认设置并不支持直接进行复制和粘贴操作,这对于日常的开发工作或渗透测试人员来说可能会造成不便。幸运的是,通过简单的配置调整,可以让 Vim 轻松支持…...
Linux hexdump命令
hexdump 是 Linux 中一个强大的二进制文件查看工具,可以用于查看文件的十六进制、ASCII 或其他格式的转储内容。以下是常见用法及示例: 1. 查看文件头部(前 N 个字节) 语法 hexdump -n <字节数> -C <文件名>示例&am…...

Stable Diffusion教程|快速入门SD绘画原理与安装
什么是Stable Diffusion,什么是炼丹师?根据市场研究机构预测,到2025年全球AI绘画市场规模将达到100亿美元,其中Stable Diffusion(简称SD)作为一种先进的图像生成技术之一,市场份额也在不断增长&…...

系统架构设计师—系统架构设计篇—微服务架构
文章目录 概述优势挑战 概述 微服务是一种架构风格,将单体应用划分成一组小的服务,服务之间相互协作,实现业务功能,每个服务运营在独立的进程中,服务间采用轻量级的通信机制协作(通常是HTTP/JSON࿰…...
Array and string offset access syntax with curly braces is deprecated
警告信息 “Array and string offset access syntax with curly braces is deprecated” 是 PHP 中的一个弃用警告(Deprecation Notice),表明在 PHP 中使用花括号 {} 来访问数组或字符串的偏移量已经被标记为过时。 背景 在 PHP 的早期版本…...

腾讯元宝:AI 时代的快速论文阅读助手
1. 背景与需求 在 AI 研究领域,每天都会涌现大量学术论文。如何高效阅读并提取关键信息成为研究者的一大难题。腾讯元宝是腾讯推出的一款大模型,结合了**大语言模型(LLM)和自然语言处理(NLP)**技术&#x…...
基于单片机的风速报警装置设计
标题:基于单片机的风速报警装置设计 内容:1.摘要 本设计聚焦于基于单片机的风速报警装置,旨在解决传统风速监测缺乏实时报警功能的问题。采用单片机作为核心控制单元,结合风速传感器采集风速数据。经实验测试,该装置能准确测量 0 - 60m/s 范…...

1998-2022年各地级市第一产业占GDP比重/地级市第一产业占比数据(市辖区)
1998-2022年各地级市第一产业占GDP比重/地级市第一产业占比数据(市辖区) 1、时间:1998-2022年 2、指标:地级市第一产业占GDP比重/地级市第一产业占比 3、来源:城市统计年鉴 4、范围:299个地级市 5、缺…...

IntersectionObserver接口介绍
IntersectionObserver API 是浏览器提供的一个用于异步观察目标元素与其祖先元素或视口(Viewport)交叉状态(即是否进入或离开视口)的接口。在 IntersectionObserver 出现之前,开发者通常需要通过监听 scroll 事件或使用…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...

nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...