当前位置: 首页 > news >正文

鸿蒙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”开头。

生成应用描述文件并上传至服务器

  1. 基于应用信息生成应用描述文件(如“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值"      }    ]  }}
  1. 需传入的应用信息如下表所示。

    属性

    数据类型

    必选(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(如下方示例图),表示服务器支持分片下载;反之则不支持。

    2814e29efec8b652dad1d193cc5291fc.png

  • 您需要配置服务器返回的响应头(如下方示例图),使得应用描述文件和应用包可正确传输下载。

    2021ad9191ed4fc7700b3ad9ca2d076a.png

例如,用户在应用分发页面点击“下载”按钮后,华为浏览器将解析您构造的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.')});}

2e1fcc2e1b1922f92ef9610ea98702e8.png

如果应用已安装成功,但被阻止运行,请在“设置 > 系统 > 企业设备和应用管理 > 企业应用管理”中找到您的企业内部应用,点击“允许”。

说明

系统软件版本(3.0.0.22)的路径为 “设置 > 通用 > 企业设备和应用管理”。

3fb89b7a8401793738c924b5f7465184.gif

关注我获取更多知识或者投稿

96bb6f19aed6a0b44cc891a1f4ce588b.jpeg

41e1a90c6e27b528ce616a93b6ece14f.jpeg

相关文章:

鸿蒙Next-应用检测、安装以及企业内部商店的实现

一、企业内部应用检测和更新升级 A应用检测是否安装B应用 canOpenApp():boolean{ try { let link schB://com.example.test/open; // 替换成你目标应用的link串儿 let canOpen bundleManager.canOpenLink(link); console.log("canOpen:"canOpen…...

存量思维和增量思维

在网上看一篇文章&#xff0c;有两种典型的阅读方式。 一种&#xff0c;是挑刺式&#xff0c;眼里只有缺点。 比如&#xff0c;有人不厌其烦地告诉作者&#xff0c;哪段有错别字&#xff0c;哪段不够严谨。 闲得蛋疼。 有这工夫&#xff0c;多看会书&#xff0c;不香么&…...

golang将大接口传递给小接口以及场景

文章目录 golang将大接口传递给小接口背景什么是大接口传递给小接口使用场景 golang将大接口传递给小接口 背景 在 Go 语言中&#xff0c;接口是一种强大的工具&#xff0c;它允许我们定义对象的行为而不关心其具体实现。特别是在复杂的应用程序中&#xff0c;将一个实现了较…...

K8s 1.27.1 实战系列(七)Deployment

一、Deployment介绍 Deployment负责创建和更新应用程序的实例,使Pod拥有多副本,自愈,扩缩容等能力。创建Deployment后,Kubernetes Master 将应用程序实例调度到集群中的各个节点上。如果托管实例的节点关闭或被删除,Deployment控制器会将该实例替换为群集中另一个节点上的…...

Swift系列02-Swift 数据类型系统与内存模型

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

MySQL中like模糊查询如何优化?

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

用低代码平台集成人工智能:无需专业开发也能实现智能化

引言&#xff1a;人工智能的普及与企业需求 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;越来越多的企业开始意识到其在提升运营效率、优化客户体验和推动业务创新方面的巨大潜力。从智能客服到自动化决策支持&#xff0c;从数据分析到个性化推荐&#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项目之后我们就可以开始写代码了&#xff0c;我们的代码一般都会写在src目录-components目录-HelloWord.vue文件内。 我们之前写的HTML文件的结构是HTML代码可以集成或者连接外部的css/js文件。 我们通过vue建立的项目&#xff0c;它的结构是在一个vue文件内集成了HTML…...

论文阅读方法

文章目录 步骤一&#xff1a;对论文进行自我判断阅读题目和关键词。阅读摘要阅读总结要点 步骤二&#xff1a;阅读文章阅读图表和图表的注释阅读引言阅读实验部分阅读结果和作者对结果的讨论&#xff08;创新点&#xff09;要点 步骤三&#xff1a;精度论文回答问题1回答问题2回…...

问题解决:Kali Linux 中配置启用 Vim 复制粘贴功能

在 Kali Linux 系统中&#xff0c;使用 XShell 或其他类似终端时&#xff0c;Vim 编辑器的默认设置并不支持直接进行复制和粘贴操作&#xff0c;这对于日常的开发工作或渗透测试人员来说可能会造成不便。幸运的是&#xff0c;通过简单的配置调整&#xff0c;可以让 Vim 轻松支持…...

Linux hexdump命令

hexdump 是 Linux 中一个强大的二进制文件查看工具&#xff0c;可以用于查看文件的十六进制、ASCII 或其他格式的转储内容。以下是常见用法及示例&#xff1a; 1. 查看文件头部&#xff08;前 N 个字节&#xff09; 语法 hexdump -n <字节数> -C <文件名>示例&am…...

Stable Diffusion教程|快速入门SD绘画原理与安装

什么是Stable Diffusion&#xff0c;什么是炼丹师&#xff1f;根据市场研究机构预测&#xff0c;到2025年全球AI绘画市场规模将达到100亿美元&#xff0c;其中Stable Diffusion&#xff08;简称SD&#xff09;作为一种先进的图像生成技术之一&#xff0c;市场份额也在不断增长&…...

系统架构设计师—系统架构设计篇—微服务架构

文章目录 概述优势挑战 概述 微服务是一种架构风格&#xff0c;将单体应用划分成一组小的服务&#xff0c;服务之间相互协作&#xff0c;实现业务功能&#xff0c;每个服务运营在独立的进程中&#xff0c;服务间采用轻量级的通信机制协作&#xff08;通常是HTTP/JSON&#xff0…...

Array and string offset access syntax with curly braces is deprecated

警告信息 “Array and string offset access syntax with curly braces is deprecated” 是 PHP 中的一个弃用警告&#xff08;Deprecation Notice&#xff09;&#xff0c;表明在 PHP 中使用花括号 {} 来访问数组或字符串的偏移量已经被标记为过时。 背景 在 PHP 的早期版本…...

腾讯元宝:AI 时代的快速论文阅读助手

1. 背景与需求 在 AI 研究领域&#xff0c;每天都会涌现大量学术论文。如何高效阅读并提取关键信息成为研究者的一大难题。腾讯元宝是腾讯推出的一款大模型&#xff0c;结合了**大语言模型&#xff08;LLM&#xff09;和自然语言处理&#xff08;NLP&#xff09;**技术&#x…...

基于单片机的风速报警装置设计

标题:基于单片机的风速报警装置设计 内容:1.摘要 本设计聚焦于基于单片机的风速报警装置&#xff0c;旨在解决传统风速监测缺乏实时报警功能的问题。采用单片机作为核心控制单元&#xff0c;结合风速传感器采集风速数据。经实验测试&#xff0c;该装置能准确测量 0 - 60m/s 范…...

1998-2022年各地级市第一产业占GDP比重/地级市第一产业占比数据(市辖区)

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

IntersectionObserver接口介绍

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

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...