HarmonyOS鸿蒙Next中自带浏览器无法使用schema+host(deep link)方式直接拉起app,在IOS是可以的,需要分享链接给其他人,可以直接点击链接拉起app,当前无法做到

HarmonyOS鸿蒙Next中华为自带浏览器无法使用schema+host(deep link)方式直接拉起app,在IOS是可以的,需要分享链接给其他人,可以直接点击链接拉起app,当前无法做到

5 回复

【背景知识】

应用间跳转可以通过DeepLink方式达成,包括使用Web组件或者默认浏览器实现应用间的跳转。

【解决方案】

  1. 为了能够支持被其他应用访问,目标应用需要在module.json5配置文件中配置skills标签。其中,uri字段的scheme的取值支持自定义,可以定义为任意不包含特殊字符、非ohos开头的字符串。

    "uris": [
       {
         // scheme尽量做到唯一 ,仅设置此协议头就可以跳转
         "scheme": "deeplinkdemo",
         // host不与其他应用相同,这样可以减少冲突
         "host": "www.minetest.com"
       }
    ]
    
  2. Web组件需要跳转DeepLink链接应用时,可通过拦截回调onLoadIntercept中对定义的事件进行处理,实现应用跳转。

    import web_webview from '@ohos.web.webview';
    import { common } from '@kit.AbilityKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    
    @Entry
    @Component
    struct WebPage {
      controller: web_webview.WebviewController = new web_webview.WebviewController()
    
      build() {
        Column() {
          Web({ src: $rawfile('local.html'), controller: this.controller })
            .onLoadIntercept((event) => {
              const url: string = event.data.getRequestUrl();
              if (url === 'deeplinkdemo://www.minetest.com') {
                (getContext() as common.UIAbilityContext).openLink(url)
                  .then(() => {
                    console.log('openLink success');
                  }).catch((err: BusinessError) => {
                    console.error('openLink failed, err:' + JSON.stringify(err));
                  });
                return true;
              }
              // 返回true表示阻止此次加载,否则允许此次加载
              return false;
            })
        }
      }
    }
    
  3. 浏览器或Web组件实现应用间的跳转,可加载前端页面代码如下:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>测试跳转页面</title>
        <script>
            function goToLink() { window.open('deeplinkdemo://www.minetest.com') }
        </script>
      </head>
      <body>
        <div align="center">
          <button type="button" id="btn_navi" onclick="goToLink()" style="width:400px; height:300px">跳转我的测试app</button>
        </div>
      </body>
    </html>
    

【总结】

应用想要响应Deeplink拉起,需要在module.json5配置文件中配置skills标签,这样才能匹配到。如果未匹配到应用,可以通过如下几个方面排查:

  1. Deeplink链接的scheme协议头必须与对应应用配置的scheme保持一致;
  2. 浏览器实现应用间跳转需要注意scheme协议头的大小写;
  3. 检查应用actions标签是否配置了"ohos.want.action.viewData"。

更多关于HarmonyOS鸿蒙Next中自带浏览器无法使用schema+host(deep link)方式直接拉起app,在IOS是可以的,需要分享链接给其他人,可以直接点击链接拉起app,当前无法做到的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


参考一下AppLink,

App Linking Kit简介-App Linking Kit(应用链接服务)-应用服务 - 华为HarmonyOS开发者

重点是在AGC上配置这个,还可以结合二维码直达。游览器链接是能使用的。

cke_1498.png

是可以拉起的,看看这篇帖子:

[https://developer.huawei.com/consumer/cn/forum/topic/0201182989214909157?fid=0109140870620153026](https://developer.huawei.com/consumer/cn/forum/topic/0201182989214909157?fid=0109140870620153026)

鸿蒙Next中浏览器不支持直接通过schema+host方式拉起App,这是系统安全策略限制。鸿蒙采用更严格的URI校验机制,需要配置正式的关联域(Associated Domains)并通过系统认证。目前可行的替代方案是使用鸿蒙官方推荐的AppLink方式,需要在config.json中声明"uriFilter"字段并配置HTTPS域名验证。Web跳转需满足:1)目标App已安装;2)域名已通过华为验证;3)使用https协议。

在HarmonyOS Next中,deep link的实现方式与Android和iOS确实存在差异。针对您提到的问题,以下是关键点说明:

  1. HarmonyOS Next目前不支持传统的schema+host方式的deep link直接拉起应用,这是系统层面的设计差异。

  2. 推荐使用HarmonyOS的"App Linking"方案替代:

  • 需要在AppGallery Connect配置关联域名
  • 使用华为提供的专用格式链接(以https开头)
  • 需要集成HMS Core的App Linking SDK
  1. 临时解决方案: 可以尝试在链接中增加intent参数,格式示例:
https://example.com/path?intent=scheme://host/path#Intent;package=your.package.name;end
  1. 注意事项:
  • 需要确保目标应用已安装
  • 浏览器版本需要较新
  • 应用需要声明相关权限

建议检查应用是否按照HarmonyOS的最新规范进行了配置,同时确认使用的浏览器版本是否支持相关功能。

回到顶部