鸿蒙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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/30921.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Locker 是 Godot 的一个开源插件,它提供了一种快速且可扩展的方式来使用不同的策略保存和加载数据,并且具有开箱即用的 JSON 和加密功能。

一、软件介绍 文末提供下载 Locker 插件是在 Godot 4.3 中创建的框架&#xff0c;旨在简化在 Godot 项目中保存、加载和管理数据的过程。该插件的主要目标之一是对用户自定义开放&#xff0c;允许使用不同的用户定义策略来访问数据。并且具有开箱即用的 JSON 和加密功能。 二、…

(更新完)LPZero: Language Model Zero-cost Proxy Search from Zero

LPZero代码 摘要 神经架构搜索 (NAS) 有助于自动执行有效的神经网络搜索&#xff0c;同时需要大量的计算资源&#xff0c;尤其是对于语言模型。零样本 NAS 利用零成本 (ZC) 代理来估计模型性能&#xff0c;从而显着降低计算需求。然而&#xff0c;现有的 ZC 代理严重依赖于深…

Varlens(手机上的单反)Ver.1.9.3 高级版.apk

Varlens 是一款专业级手机摄影软件&#xff0c;旨在通过丰富的功能和高自由度参数调节&#xff0c;让手机拍摄效果媲美微单相机。以下是核心功能总结&#xff1a; 一、核心功能 专业拍摄模式 支持手动/自动/程序模式&#xff0c;可调节ISO、快门速度、EV、白平衡等参数27 提供…

Unity2017打包出来后的场景一片红

bug展示&#xff1a; 解决办法&#xff1a; Edit——Project Settings——Graphics——添加下面这俩Shader(用于UI展示)即可。

VS Code C++ 开发环境配置

VS Code 是当前非常流行的开发工具. 本文讲述如何配置 VS Code 作为 C开发环境. 本文将按照如下步骤来介绍如何配置 VS Code 作为 C开发环境. 安装编译器安装插件配置工作区 第一个步骤的具体操作会因为系统不同或者方案不同而有不同的选择. 环境要求 首先需要立即 VS Code…

html-表格标签

一、表格标签 1. 表格的主要作用 表格主要用于显示&#xff64;展示数据,因为它可以让数据显示的非常的规整,可读性非常好&#xff61;特别是后台展示数据 的时候,能够熟练运用表格就显得很重要&#xff61;一个清爽简约的表格能够把繁杂的数据表现得很有条理&#xff61; 总…

ROS2-话题学习

强烈推荐教程&#xff1a; 《ROS 2机器人开发从入门到实践》3.2.2订阅小说并合成语音_哔哩哔哩_bilibili 构建功能包 # create package demo_python_pkg ros2 pkg create --build-type ament_python --license Apache-2.0 demo_python_pkg 自己写的代码放在./demo_python_pkg/…

Java在小米SU7 Ultra汽车中的技术赋能

目录 一、智能驾驶“大脑”与实时数据 场景一&#xff1a;海量数据的分布式计算 场景二&#xff1a;实时决策的毫秒级响应 场景三&#xff1a;弹性扩展与容错机制 技术隐喻&#xff1a; 二、车载信息系统&#xff08;IVI&#xff09;的交互 场景一&#xff1a;Android Automo…

Oracle RAC配置原理详解:构建高可用与高性能的数据库集群

在现代企业级应用中&#xff0c;数据库的高可用性和高性能是至关重要的。Oracle Real Application Clusters&#xff08;RAC&#xff09;是Oracle数据库提供的一种集群解决方案&#xff0c;能够将多个数据库实例部署在不同的服务器上&#xff0c;实现负载均衡和故障切换&#x…

ESP8266TCP客户端(单连接TCP Client)

单连接TCP Client 电脑作为服务器&#xff0c;8266作为客户端 1.配置WiFi模式 ATCWMODE3 //softAPstation mode 相应&#xff1a;ok 2.连接路由器 ATCWJAP“SSID”&#xff0c;“password” //SSID就是wifi的名字&#xff0c; password WIFI密码 响应&#xff…

【Linux】软硬连接与动静态库

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;linux笔记仓 目录 01.软硬连接02.动静态库静态库&#xff08;Static Library&#xff09;动态库&#xff08;Dynamic Library&#xff09; 03.动态库加载 01.软硬连接 我们先看一下它的用法 这个是…

关于Springboot 应配置外移和Maven个性化打包一些做法

期望达到的效果是每次更新服务器端应用只需要更新主程序jar 依赖jar单独分离。配置文件独立存放于文件夹内&#xff0c;更新程序并不会覆盖已有的配置信息。 一、配置外移 1、开发环境外移 做法&#xff1a;在项目同级或者上级创建config文件夹放置配置文件&#xff0c;具体m…

阿里云操作系统控制台——解决服务器磁盘I/O故障

目录 引言 需求介绍 操作系统使用实例 获得的帮助与提升 建议 引言 你的云服务器是否遇到过系统响应变慢、服务超时&#xff0c;或者进程卡顿、磁盘空间不足、系统日志频繁告警的问题&#xff1f;这些情况在日常运维中并不少见&#xff0c;尤其是在 高负载或资源紧张时&a…

【英伟达AI论文】多模态大型语言模型的高效长视频理解

摘要&#xff1a;近年来&#xff0c;基于视频的多模态大型语言模型&#xff08;Video-LLMs&#xff09;通过将视频处理为图像帧序列&#xff0c;显著提升了视频理解能力。然而&#xff0c;许多现有方法在视觉主干网络中独立处理各帧&#xff0c;缺乏显式的时序建模&#xff0c;…

蓝桥杯备考:图论初解

1&#xff1a;图的定义 我们学了线性表和树的结构&#xff0c;那什么是图呢&#xff1f; 线性表是一个串一个是一对一的结构 树是一对多的&#xff0c;每个结点可以有多个孩子&#xff0c;但只能有一个父亲 而我们今天学的图&#xff01;就是多对多的结构了 V表示的是图的顶点集…

记录小白使用 Cursor 开发第一个微信小程序(一):注册账号及下载工具(250308)

文章目录 记录小白使用 Cursor 开发第一个微信小程序&#xff08;一&#xff09;&#xff1a;注册账号及下载工具&#xff08;250308&#xff09;一、微信小程序注册摘要1.1 注册流程要点 二、小程序发布流程三、下载工具 记录小白使用 Cursor 开发第一个微信小程序&#xff08…

【Linux学习笔记】Linux基本指令分析和权限的概念

【Linux学习笔记】Linux基本指令分析和权限的概念 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;Linux学习笔记 文章目录 【Linux学习笔记】Linux基本指令分析和权限的概念前言一. 指令的分析1.1 alias 指令1.2 grep 指令1.3 zip/unzip 指…

【消息队列】数据库的数据管理

1. 数据库的选择 对于当前实现消息队列这样的一个中间件来说&#xff0c;具体要使用哪个数据库&#xff0c;是需要稍作考虑的&#xff0c;如果直接使用 MySQL 数据库也是能实现正常的功能&#xff0c;但是 MySQL 也是一个客户端服务器程序&#xff0c;也就意味着如果想在其他服…

【HarmonyOS Next】鸿蒙加固方案调研和分析

【HarmonyOS Next】鸿蒙加固方案调研和分析 一、前言 根据鸿蒙应用的上架流程&#xff0c;本地构建app文件后&#xff0c;上架到AGC平台&#xff0c;平台会进行解析。根据鸿蒙系统的特殊设置&#xff0c;仿照IOS的生态闭环方案。只能从AGC应用市场下载app进行安装。这样的流程…

nuxt2 打包优化使用“compression-webpack-plugin”插件

在使用 Nuxt.js 构建项目时&#xff0c;为了提高性能&#xff0c;通常会考虑对静态资源进行压缩。compression-webpack-plugin 是一个常用的 Webpack 插件&#xff0c;用于在生产环境中对文件进行 Gzip 压缩。这对于减少网络传输时间和提高页面加载速度非常有帮助。下面是如何在…