鸿蒙开发中,如何支持deeplink?

鸿蒙开发中,如何支持deeplink?

阅读 1.2k
avatarAI BotBETA

在鸿蒙(HarmonyOS)开发中,支持Deep Link(深度链接)主要涉及在你的应用中定义URI Scheme,以便其他应用可以通过特定的URI来启动你的应用或应用中的特定页面。以下是在鸿蒙系统中实现Deep Link的基本步骤:

1. 定义URI Scheme

首先,你需要在应用的config.json文件中定义你的URI Scheme。这允许系统识别并响应符合该Scheme的URI。

config.jsonabilities节点下,找到或添加一个intent-filter节点,并在其中定义你的dataaction。例如:

{
  "app": {
    "bundleName": "com.example.myapp",
    "vendor": "example",
    "version": {
      "code": 1,
      "name": "1.0"
    },
    "abilities": [
      {
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "action.system.home"
            ]
          }
        ],
        "name": "com.example.myapp.MainAbility",
        "icon": "$media:icon",
        "label": "$string:mainability_name",
        "description": "$string:mainability_description",
        "visible": true,
        "defaultAbility": true,
        "type": "page",
        "orientation": "portrait",
        "intentFilters": [
          {
            "actions": [
              "action.view"
            ],
            "categories": [
              "android.intent.category.DEFAULT",
              "android.intent.category.BROWSABLE"
            ],
            "data": [
              {
                "scheme": "yourapp",
                "host": "example.com",
                "path": "/main",
                "mimeType": "text/plain"
              }
            ]
          }
        ]
      }
    ]
  }
}

在上述配置中,scheme是"yourapp",这是URI的开头部分,用于唯一标识你的应用。其他属性如hostpathmimeType可以根据需要设置。

2. 处理Deep Link

在你的Ability(页面)代码中,你需要覆盖onNewIntent方法来处理新的Intent,特别是包含Deep Link的Intent。鸿蒙系统没有直接名为onNewIntent的方法,但你可以通过监听Ability的生命周期事件或使用其他方式来检查Intent。

例如,你可以在onStart方法中检查启动你的Ability的Intent是否包含Deep Link的URI,并据此执行相应的操作。

3. 测试

为了测试Deep Link是否按预期工作,你可以使用鸿蒙系统的开发者工具或第三方工具(如浏览器或另一个应用)来尝试使用你的URI Scheme打开你的应用。

注意

  • 确保你的应用已经正确安装并注册了URI Scheme。
  • 鸿蒙系统可能与Android在Intent和URI处理上有所不同,具体实现时请参考最新的官方文档。
  • 对于复杂的URI结构和参数,你可能需要在应用内部解析这些URI,并根据解析结果导航到相应的页面或执行相应的操作。
1 个回答

可以参考下面代码,在应用里面调转到浏览器打开对应的链接

let context = getContext(this) as common.UIAbilityContext; 
let wantInfo: Want = { 
  'action': 'ohos.want.action.viewData', 
  // entities can be omitted. 
  'entities': ['entity.system.browsable'], 
  abilityName: 'MainAbility',//没加这个,html结尾的链接 拉起的不是浏览器,而且手机的预览器,mainabilty是浏览器的入口 
  'uri': url 
} 
context.startAbility(wantInfo).then(() => { 
}).catch((err: BusinessError) => { 
  console.log( "jump error " + err.message) 
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进