使用DevEco Studio开发唤起应用功能,在浏览器输入链接没反应

使用DevEco Studio开发唤起应用功能,在浏览器输入链接没反应 在module配置文件里面加了配置

“uris”:[

{
    "scheme":"abc",
    "host":"open"
}

]

浏览器输入链接 abc://open/home 没反应,封装工具类已在entryAbility onCreate()里面做了调用

11 回复

在module.json5的Ability配置中同时声明actions和uris字段:

"skills": [{
  "actions": ["ohos.want.action.viewData"], // 必须包含此标准action
  "uris": [{
    "scheme": "abc",
    "host": "open",
    "path": "/home"  // 根据实际路径补充(可选)
  }]
}]

在拉起方的module.json5中添加:

"module": {
  "querySchemes": ["abc"]  // 声明支持此scheme
}

楼主,在HarmonyOS中通过Deep Linking实现应用唤起时,若浏览器输入链接无响应,通常由以下原因导致:

原因分析与解决方案

1、浏览器输入方式不符合触发条件

  • 现象:直接在浏览器地址栏输入Deep Linking链接(如 appScheme://test.com/home)无法触发应用拉起。
  • 原因:
    • Deep Linking的触发需要通过用户主动点击网页中的元素(如 <a> 标签或 window.open 调用),直接在地址栏输入会被视为非用户操作而拦截。
    • 根据华为官方规范,目前仅支持通过华为浏览器中嵌入的跳转代码触发应用拉起。

修改建议:

在HTML页面中嵌入触发代码,例如使用 <a> 标签:

<a href="appScheme://test.com/home">打开应用</a>

2.、目标应用未正确配置Deep Linking

  • 现象:点击链接后无响应,或提示“应用未安装”。
  • 原因:
    • 被拉起的应用未在 module.json5 中注册对应的URL skill(如 scheme、host、path 配置错误)。
    • 链接地址与配置的URL skill不匹配。
  • 验证步骤:

1.检查被拉起方的 module.json5 配置:

{
  "module": {
    "skills": [
      {
        "actions": ["ohos.want.action.viewData"],
        "uris": [
          {
            "scheme": "appScheme",   // 必须与链接中一致
            "host": "test.com",
            "path": "/home"
          }
        ]
      }
    ]
  }
}

2.确保链接地址格式为 scheme://host:port/path(如 appScheme://test.com/home)。

3、 未正确处理ArkWeb组件的拦截逻辑

  • 现象:应用内嵌的ArkWeb页面无法拉起目标应用。
  • 原因:
    • 未通过 onLoadIntercept 回调拦截并处理链接请求。
    • 未调用 bundleManager.canOpenLink 验证目标应用是否安装。
  • 修改建议:

在ArkWeb组件的 onLoadIntercept 回调中添加逻辑:

Web({ controller: this.controller })
  .onLoadIntercept((event) => {
    const url = event.data.getRequestUrl();
    if (url.startsWith('appScheme://')) {
      const link = 'appScheme://test.com/home';
      bundleManager.canOpenLink(link).then((canOpen) => {
        if (canOpen) {
          this.context.openLink(link).catch((err) => {
            console.error(`拉起失败: ${err.code}, ${err.message}`);
          });
        } else {
          console.error('目标应用未安装');
        }
      });
      return true; // 拦截请求,阻止默认网页加载
    }
    return false;
  })

4、 签名或域名校验失败

  • 现象:已正确配置链接和代码,仍无法拉起应用。
  • 原因:
    • 使用自动签名导致域名校验失败。
    • 链接未通过HTTPS协议访问(仅App Linking要求HTTPS,Deep Linking无此限制)。
  • 解决步骤:

1.在AGC平台配置应用的手动签名证书。

2.若使用App Linking,确保链接为HTTPS格式且域名已通过校验。

只有applink可以吧

应用链接分类

按照应用链接的scheme以及校验机制的不同,可以分为Deep Linking与App Linking两种方式。

  • Deep Linking:是一种通过链接跳转至应用特定页面的技术,其特点是支持开发者定义任意形式的scheme。由于缺乏域名校验机制,容易被其他应用所仿冒。

    实现原理: Deep Linking基于隐式Want匹配机制中的uri匹配来查询、拉起目标应用。

  • App Linking(推荐):其限定了scheme必须为https,同时通过增加域名校验机制,可以从已匹配到的应用中筛选过滤出目标应用,消除应用查询和定位中产生的歧义,直达受信的目标应用。

相较于Deep Linking,App Linking有如下优势

  • 安全性:通过端云安全鉴权和域名校验,确保只有合法应用被拉起。
  • 直达体验:无需二次确认,直接跳转到应用内指定页面。
  • 直达应用市场:未安装应用时可跳转至应用市场应用详情页。
  • 延迟链接:支持应用安装后恢复之前的跳转意图。

判断applink是否配置成功:

1.把applink的配置放到备忘录里点击看是否跳转

2.使用代码编写 openlink测试

3.执行命令:hdc shell hidumper -s AppDomainVerifyManager 运行hidumper命令后,即可在控制台上看到success消息。

自带浏览器的确不行 你可以试试手动写个html用web组件加载 通过拦截去测试

HarmonyOS的分布式文件系统让我在多设备间共享文件变得更加方便。

actions 配了没

action没配,我加一个试试,

加了还是不行,

在DevEco Studio中开发唤起应用功能时,浏览器输入链接无响应通常是由于配置问题导致。请检查以下方面:

  1. 确认在config.json中正确配置了uriScheme,格式应为"uriScheme": “your_scheme”

  2. 验证AndroidManifest.xml中intent-filter的data scheme配置是否与uriScheme一致

  3. 检查设备上是否已安装调试版本的应用

  4. 确保浏览器中输入的是完整格式:your_scheme://开头

这些配置问题会导致链接无法正确唤起应用。

检查配置和调用逻辑是否完整。确认module.json中uris配置正确,并确保在entryAbility的onCreate()中已调用router处理scheme链接。需要检查链接格式是否正确,以及浏览器是否支持自定义scheme。建议使用真机调试,部分模拟器可能不支持此类功能。

回到顶部