ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

指定设备发布:构建Deeplink下载链接(三)

指定设备发布:构建Deeplink下载链接(三) 前两篇分别讲了打包配置和编译流程本文进入指定设备发布的最后关键环节——如何通过Deeplink让团队成员下载安装应用。这部分涉及应用描述文件manifest.json5、服务器配置要求、Deeplink格式等。一、整体流程核心步骤将编译得到的各个HAP/HSP 包上传至公司的服务器或第三方云上获取 HAP/HSP 包下载 URL下载 URL 必须以https开头基于应用信息生成应用描述文件例如manifest.json5文件名可自定义将描述文件上传至服务器获取其下载 URL将描述文件 URL 构建成Deeplink用于下载应用二、应用描述文件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, 2in1, phone], packageUrl: HAP包下载链接, packageHash: HAP包sha256值 }, { name: module2, type: feature, deviceTypes: [tablet, 2in1, phone], packageUrl: HAP包下载链接, packageHash: HAP包sha256值 }, { name: module3, type: shared, deviceTypes: [tablet, 2in1, phone], packageUrl: HSP包下载链接, packageHash: HSP包sha256值 } ], sign: 描述文件签名 } }三、应用信息字段说明1. 应用基础信息属性数据类型必选/可选说明bundleName字符串M必选应用的 Bundle 名称bundleType字符串M应用的 Bundle 类型用于区分 HarmonyOS 应用或元服务。当前仅支持配置为app表示 HarmonyOS 应用versionCode数值M应用的版本号versionName字符串M应用版本号的文字描述label字符串M应用的名称建议与实际应用名称一致否则会出现下载与安装过程中应用名不一致的问题2. 部署与图标信息属性数据类型必选/可选说明deployDomain字符串M应用、图标及描述文件的部署域名需要与 icons、packageUrl 以及描述文件自身下载 URL 中的域名一致且不可包含协议头或端口号否则会导致下载失败icons字符串M应用的图标提供内部部署的图片下载地址必须以https开头minAPIVersion字符串M应用运行所需 SDK 的 API 最小版本用于判断是否与当前设备兼容targetAPIVersion字符串M应用运行所需的 API 目标版本用于判断是否与当前设备兼容3. modules 列表信息属性数据类型必选/可选说明modules列表M应用分包 module 信息列表以数组形态组织其中至少包括一个 entry module 信息name字符串Mmodule 的名称该名称在整个应用须唯一type字符串M应用 module 的类型取值范围•entry应用的主模块•feature应用的动态特性模块•shared动态共享包模块仅支持应用内共享包deviceTypes字符串M当前 module 可以运行在哪类设备上取值范围•phone手机•tablet平板原文表格在此处被截断PC/2in1 未在可识别文本中出现packageUrl字符串M当前 module 上传至服务器后生成的下载 URL必须以https开头packageHash字符串M当前 module 的 SHA256 值。• Windowscertutil -hashfile 包路径 SHA256• Macshasum -a 256 包路径说明“包路径”指应用 HAP/HSP 包在本地的存储路径sign字符串M描述文件签名。• Windows可使用验证工具生成签名• Mac可采用以下任意一种方法生成签名① 将 .bat 文件中的命令转换成在 iOS 上运行的命令使用② Windows 模拟器运行 .bat 文件四、Deeplink 构建与拉起条件1. Deeplink 格式store://enterprise/manifest?urlhttps://xxx.xxx/xxx.json5部分值Schemestore://HostenterprisePathmanifest参数应用描述文件上传至服务器后生成的下载 URL必须以https开头2. 拉起条件仅支持页面点击行为触发拉起不支持地址栏输入 DeepLink 拉起不支持HTML 头文件自动拉起仅支持华为浏览器拉起从华为浏览器拉起的所有行为均需判断是否有用户点击行为确认用户点击才允许拉起3. 特殊字符处理如果下载 URL 内包含特殊字符还需进行特殊字符编码declare function encodeURIComponent(uriComponent: string | number | boolean): string;五、服务器配置要求1. 基本要求服务器提供应用描述文件和安装包的 HTTPS 下载链接下载链接中的域名不支持 IP 地址应用描述文件和安装包的下载链接均需要支持通过 HEAD 方式请求返回文件大小2. 自签证书要求如使用如果服务器提供的 HTTPS 下载链接使用了自签证书还需满足用户设备需要安装服务器自签证书对应的 CA 证书自签证书有效期不超过 13 个月超期请及时更换3. 分片下载能力配置服务器支持分片下载能力建议验证方式构造下载请求头包含range字段返回码为 206表示支持分片下载反之则不支持4. 响应头配置需配置服务器返回的响应头使得应用描述文件和应用包可正确传输下载六、分发页面实现下载功能1. HTML 页面触发 Deeplinkhtml langen head meta charsetUTF-8 titleButton Open DeepLink Example/title script function openDeepLink() { let url store://enterprise/manifest?urlhttps://xxx.xxx/xxx.json5; window.open(url, _parent); } /script /head body button onclickopenDeepLink()下载/button /body /html2. 应用更新场景openlink 方式对于应用更新场景可以使用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.); }); }
返回列表