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的提示,也没有相关的报错提醒,没升级之前是可以正常拉起应用的,请问是什么原因导致的

【问题现象】:升级前

cke_10500.png

升级后:

cke_9835.png

【版本信息】:如上图

【复现代码】:不涉及

【尝试解决方案】:查找相关资料: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

5 回复

可能有多个原因导致,可以试试下面找到的办法,我还没有实测:

OpenHarmony 5.0.2 升级到 6.0 后 App linking 失效问题,核心原因是两方面的变更叠加:一是 OpenHarmony 6.0 对深层链接(App linking)的配置要求升级,二是 Chromium 内核从 114 升级到 132 后,WebView 的自定义 Scheme 唤起策略更严格。以下是具体原因和修复步骤:

一、核心原因分析

  1. OpenHarmony 6.0 对深层链接(App linking)的配置要求变更OpenHarmony 6.0 强化了 Ability 的skills匹配规则,旧版本中松散的 scheme/host 配置,在 6.0 中需要更精确的声明(比如补充action/category),否则系统无法识别链接对应的应用。

  2. Chromium 132 内核的安全策略收紧高版本 Chromium(132)对自定义 Scheme 唤起外部应用增加了 2 个关键限制:

    • 必须通过用户主动交互(如点击按钮)触发(禁止自动跳转、定时器跳转);
    • WebView 默认不允许直接唤起外部应用,需手动拦截 URL 并处理。

二、修复步骤(按优先级排序)

步骤 1:更新 Ability 的skills配置(解决应用配置不兼容)

OpenHarmony 6.0 要求深层链接对应的 Ability 必须在module.json5中精确配置actioncategory,补充后系统才能识别链接并唤起应用。

旧版本可能的配置(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.json5skills配置仍有问题,需重新检查步骤 1。

三、总结

这次失效是OpenHarmony 6.0 的配置升级+Chromium 132 的安全收紧共同导致的,按以下顺序修复即可恢复:

  1. 补充 Ability 的skills配置(action/category/path);
  2. 在 WebView 中手动拦截自定义 Scheme 并调用 Intent 唤起;
  3. 确保 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的处理方式进行了更严格的限制。具体来说:

  1. 核心原因:Chromium内核升级后,对通过网页(或WebView)跳转到原生App的intent://协议链接的验证机制变得更加严格。如果链接的格式、签名验证或关联配置不完全符合新内核的要求,浏览器可能会直接阻止跳转,而不显示任何提示,这与您遇到的“弹不出打开app的提示,也没有相关的报错提醒”的现象完全吻合。

  2. 问题定位:您提供的华为开发者博客链接中提到的内核升级是关键线索。从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指纹)完全准确。
  • 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配置。请根据上述要点检查您的应用配置。

回到顶部