HarmonyOS鸿蒙Next手机系统从5.0.2升级到6.0.0.115 App linking失效
HarmonyOS鸿蒙Next手机系统从5.0.2升级到6.0.0.115 App linking失效 【问题描述】:手机系统从 5.0.2升级到6.0,App linking失效,弹不出打开app的提示,也没有相关的报错提醒,没升级之前是可以正常拉起应用的,请问是什么原因导致的
【问题现象】:升级前

升级后:

【版本信息】:如上图
【复现代码】:不涉及
【尝试解决方案】:查找相关资料:https://developer.huawei.com/consumer/cn/blog/topic/03196515778414188有看到HarmonyOS 5.0搭载的是Chromium 114内核,6.0之后Chromium 114内核升级到了132,不知道是不是这个原因导致的,麻烦确认下,应该如何修呢
更多关于HarmonyOS鸿蒙Next手机系统从5.0.2升级到6.0.0.115 App linking失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
可能有多个原因导致,可以试试下面找到的办法,我还没有实测:
的OpenHarmony 5.0.2 升级到 6.0 后 App linking 失效问题,核心原因是两方面的变更叠加:一是 OpenHarmony 6.0 对深层链接(App linking)的配置要求升级,二是 Chromium 内核从 114 升级到 132 后,WebView 的自定义 Scheme 唤起策略更严格。以下是具体原因和修复步骤:
一、核心原因分析
-
OpenHarmony 6.0 对深层链接(App linking)的配置要求变更OpenHarmony 6.0 强化了 Ability 的
skills匹配规则,旧版本中松散的 scheme/host 配置,在 6.0 中需要更精确的声明(比如补充action/category),否则系统无法识别链接对应的应用。 -
Chromium 132 内核的安全策略收紧高版本 Chromium(132)对自定义 Scheme 唤起外部应用增加了 2 个关键限制:
- 必须通过用户主动交互(如点击按钮)触发(禁止自动跳转、定时器跳转);
- WebView 默认不允许直接唤起外部应用,需手动拦截 URL 并处理。
二、修复步骤(按优先级排序)
步骤 1:更新 Ability 的skills配置(解决应用配置不兼容)
OpenHarmony 6.0 要求深层链接对应的 Ability 必须在module.json5中精确配置action、category,补充后系统才能识别链接并唤起应用。
旧版本可能的配置(5.0.2):
{
"abilities": [
{
"name": ".MainAbility",
"type": "page",
"skills": [
{
"entities": [],
"actions": [],
"uris": [
{
"scheme": "myapp", // 你的App自定义Scheme
"host": "test"
}
]
}
]
}
]
}
6.0 需补充的配置:
{
"abilities": [
{
"name": ".MainAbility",
"type": "page",
"skills": [
{
"entities": [],
"actions": ["ohos.intent.action.VIEW"], // 必须补充:深层链接默认action
"categories": ["ohos.intent.category.BROWSABLE"], // 必须补充:标记为可被浏览器/ WebView唤起
"uris": [
{
"scheme": "myapp", // 保持原Scheme
"host": "test", // 保持原Host
"path": "/*" // 补充:匹配所有子路径
}
]
}
]
}
]
}
步骤 2:适配 WebView 的 URL 拦截(解决 Chromium 132 限制)
高版本 Chromium 的 WebView 默认不会自动唤起自定义 Scheme 的应用,需手动拦截 URL 并调用系统 Intent 唤起。
修复代码(ArkTS):
import webview from '@ohos.web.webview';
import featureAbility from '@ohos.ability.featureAbility';
import Want from '@ohos.app.ability.Want';
@Entry
@Component
struct WebViewPage {
private webController: webview.WebviewController = new webview.WebviewController();
build() {
Column() {
Web({
src: "你的Web页面URL", // 包含App linking链接的页面
controller: this.webController
})
.width('100%')
.height('100%')
.javaScriptAccess(true)
// 关键:拦截URL并手动处理自定义Scheme
.onUrlLoadingIntercept((event) => {
const url = event.url;
// 检测是否是你的App自定义Scheme(如myapp://)
if (url.startsWith("myapp://")) {
// 调用系统Intent唤起应用
this.launchAppByUrl(url);
// 阻止WebView默认处理
event.result = true;
}
})
}
}
// 手动唤起应用
private async launchAppByUrl(url: string) {
try {
const want: Want = {
action: "ohos.intent.action.VIEW",
uri: url, // 传入自定义Scheme链接
parameters: {}
};
// 唤起应用(如果已安装)
await featureAbility.startAbility({ want: want });
} catch (e) {
console.error("唤起应用失败:", e);
// 可选:唤起失败时跳转到应用市场
}
}
}
步骤 3:确保链接由用户主动交互触发(解决 Chromium 安全限制)
Chromium 132 禁止自动跳转(如页面加载后定时器跳转、JS 自动跳转)的自定义 Scheme 唤起,必须通过用户主动点击按钮触发。
Web 页面端修复示例:
<!-- 错误:自动跳转(6.0中会被拦截) -->
<script>
// 升级前可能的写法,6.0中失效
window.onload = () => {
window.location.href = "myapp://test/page1";
};
</script>
<!-- 正确:用户点击按钮触发(6.0中有效) -->
<button onclick="openApp()">打开我的应用</button>
<script>
function openApp() {
window.location.href = "myapp://test/page1";
}
</script>
步骤 4:验证系统唤起能力(排查是否是配置遗漏)
如果上述步骤后仍失效,可通过hdc命令行测试系统是否能识别你的 App 链接,判断是应用配置问题还是 WebView 问题:
# 在电脑端执行(设备已连接hdc)
hdc shell am start -a ohos.intent.action.VIEW -d "myapp://test/page1"
- 如果命令能成功唤起应用:说明应用配置已生效,问题出在 WebView 的处理;
- 如果命令无法唤起:说明
module.json5的skills配置仍有问题,需重新检查步骤 1。
三、总结
这次失效是OpenHarmony 6.0 的配置升级+Chromium 132 的安全收紧共同导致的,按以下顺序修复即可恢复:
- 补充 Ability 的
skills配置(action/category/path); - 在 WebView 中手动拦截自定义 Scheme 并调用 Intent 唤起;
- 确保 Web 页面中链接由用户主动点击触发。
完成后 App linking 即可恢复正常拉起应用的功能。
更多关于HarmonyOS鸿蒙Next手机系统从5.0.2升级到6.0.0.115 App linking失效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
怀疑是系统升级后useragent判断是否为鸿蒙系统的逻辑需要修改。 applink跳转应该没有问题,重新改了判断逻辑就可以了
我记得当时我也遇到这种情况了,你可以先排查一下签名的问题。然后在真机中执行命令看看
# 查询本设备所有能使用的 App Linking
hdc shell hidumper -s AppDomainVerifyManager
鸿蒙Next 6.0.0.115版本中App linking失效,主要原因是系统升级后应用沙箱和权限模型变更。应用需适配新的Want参数传递机制,并检查ohos.permission.APP_LINKING权限声明。部分旧版应用需重新签名并更新app.json5中的uriPermission配置。
根据您描述的现象和提供的版本信息,问题很可能与您推测的原因一致:HarmonyOS 6.0.0.115版本将系统Web内核从Chromium 114升级到了Chromium 132。
这是一个已知的、由系统WebView内核重大版本升级引起的兼容性变化。在Chromium 88及以后的版本中,为了增强用户隐私和安全性,对Intent URI的处理方式进行了更严格的限制。具体来说:
-
核心原因:Chromium内核升级后,对通过网页(或WebView)跳转到原生App的
intent://协议链接的验证机制变得更加严格。如果链接的格式、签名验证或关联配置不完全符合新内核的要求,浏览器可能会直接阻止跳转,而不显示任何提示,这与您遇到的“弹不出打开app的提示,也没有相关的报错提醒”的现象完全吻合。 -
问题定位:您提供的华为开发者博客链接中提到的内核升级是关键线索。从HarmonyOS 5.0(Chromium 114)到6.0(Chromium 132),中间跨越了多个Chrome/Chromium大版本,其中包含了对Intent URI处理策略的多次收紧。
解决方案(需应用侧适配):
问题的修复需要在App开发侧进行,主要涉及确保App Linking(Deep Link)的配置符合新内核的规范。无法通过手机系统设置解决。请按以下步骤检查并修改您的应用配置:
-
1. 验证Digital Asset Links文件:
- 这是最关键的一步。Chromium新内核要求通过
https协议关联的域名下,必须正确部署一个名为assetlinks.json的Digital Asset Links文件。 - 该文件用于验证网站域名和App之间的归属关系,确保跳转安全。
- 检查点:确保您的
assetlinks.json文件可通过https://您的域名/.well-known/assetlinks.json地址被正确访问,且文件内容中的package_name(应用包名)和sha256_cert_fingerprints(应用签名证书SHA256指纹)完全准确。
- 这是最关键的一步。Chromium新内核要求通过
-
2. 检查Android App Links配置:
- 在应用的
AndroidManifest.xml文件中,检查包含<intent-filter>和<data>标签的Activity配置。 - 确保
<data>标签中正确声明了scheme(如https)、host(您的域名)和pathPrefix等属性。 - 确保该Intent Filter包含了
<action android:name="android.intent.action.VIEW" />和<category android:name="android.intent.category.BROWSABLE" />以及<category android:name="android.intent.category.DEFAULT" />。
- 在应用的
-
3. 使用标准的Intent URI格式:
- 确保网页中生成的
intent://链接格式符合最新规范。一个标准的格式示例:intent://host/path#Intent;scheme=https;package=com.example.app;S.browser_fallback_url=https://fallback.example.com;end - 特别注意
package参数必须准确,并且建议提供有效的browser_fallback_url作为降级方案。
- 确保网页中生成的
-
4. 在HarmonyOS 6.0+真机上进行测试:
- 完成上述配置修改后,必须在搭载HarmonyOS 6.0或更高版本的设备上进行完整的端到端测试,以验证App Linking功能是否恢复。
总结:此问题是由于系统Web内核升级导致对App跳转的安全校验规则变化所致,并非系统Bug。解决方法需要应用开发者根据HarmonyOS 6.0(Chromium 132)的新要求,核对并更新应用的Digital Asset Links关联文件及Intent Filter配置。请根据上述要点检查您的应用配置。

