HarmonyOS鸿蒙Next中Flutter uni_links插件适配

HarmonyOS鸿蒙Next中Flutter uni_links插件适配 问题描述: Flutter插件uni_links: 一个 Flutter 插件项目,用于帮助实现 App/Deep Links(Android)、通用链接和自定义 URL 方案                其他端适配正常, 鸿蒙端缺少适配

问题现象: Flutter插件uni_links: 一个 Flutter 插件项目,用于帮助实现 App/Deep Links(Android)、通用链接和自定义 URL 方案                鸿蒙端缺少适配

版本信息: Flutter ohos分支

插件链接: https://pub.dev/packages/uni_links

cke_2163.png


更多关于HarmonyOS鸿蒙Next中Flutter uni_links插件适配的实战教程也可以访问 https://www.itying.com/category-92-b0.html

3 回复

开发者您好,

Flutter的Pub仓库已明确说明使用app_links代提uni_links,不再维护uni_links。请使用已经适配HarmonyOS的app_links_ohos库。 使用方案:

  1. 导入依赖。
dependencies:
  app_links: ^6.4.0
  app_links_ohos: ^0.2.0
  1. 添加uris配置到OpenHarmony项目的module.json文件中。 “uris"列表中必须包含"scheme"为"https"且"host"为域名地址的元素,可选属性包含"path”、“pathStartWith"和"pathRegex”,具体请参见uris标签说明

  2. 在Flutter中的使用方法和app_links一致。 参考app_links

更多关于HarmonyOS鸿蒙Next中Flutter uni_links插件适配的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在HarmonyOS Next中适配Flutter uni_links插件,需针对鸿蒙原生能力进行改造。由于uni_links依赖的Android/iOS平台通道在鸿蒙上不可用,必须使用鸿蒙的Want或URIScheme机制实现深度链接。开发者需创建鸿蒙原生插件,通过FFI或平台通道将鸿蒙的URI启动参数传递到Flutter层。需重写插件中平台相关的dart代码,使其能解析鸿蒙特有的URI格式。

在HarmonyOS Next中,Flutter插件uni_links目前确实缺少原生平台的适配实现。这是因为该插件主要针对Android/iOS平台,其源码中未包含HarmonyOS的FFI(Foreign Function Interface)或Channel层代码。

要使其在HarmonyOS Next上运行,需要进行平台适配。核心是创建HarmonyOS侧的ArkTS/ArkUI实现,并通过Flutter的Platform Channel(MethodChannel/EventChannel)与Dart层通信。

主要适配步骤包括:

  1. 创建HarmonyOS插件模块:在Flutter项目的ohos目录下,为uni_links创建对应的ArkTS/ArkUI模块。这通常需要创建一个HarmonyOS Library模块。

  2. 实现平台通道

    • 在Dart侧(lib/uni_links.dart)的调用会通过MethodChannel(用于一次性调用,如获取初始链接)和EventChannel(用于监听链接流)传递到平台侧。
    • 在HarmonyOS侧,你需要创建对应的AbilityExtensionAbility(特别是FormExtensionAbilityServiceExtensionAbility可能更合适用于处理URI启动)来接收并处理这些通道调用。
  3. 处理URI/Deep Links

    • 配置Scheme:在HarmonyOS项目的module.json5配置文件中,为你的Ability声明支持的uritype。例如:
      "abilities": [
        {
          "name": ".EntryAbility",
          "srcEntry": "./ets/entryability/EntryAbility.ets",
          "skills": [
            {
              "entities": ["entity.system.home"],
              "actions": ["action.system.home"],
              "uris": [
                {
                  "scheme": "yourapp", // 你的应用自定义scheme
                  "host": "example.com",
                  "port": "8080",
                  // ... 其他可选参数
                }
              ]
            }
          ]
        }
      ]
      
    • 在Ability中接收URI:在相应的Ability(如EntryAbility)生命周期回调(例如onCreateonNewWant)中,通过want.uriwant.parameters获取启动的URI数据。
    • 实现通道处理器:在HarmonyOS侧编写MethodChannelEventChannel的处理逻辑。当Ability被URI启动时,将URI数据通过EventChannel发送给Flutter Dart层,或者通过MethodChannel在Dart查询时返回。
  4. 处理App Links(HTTP/HTTPS链接)

    • 这需要更复杂的配置,可能涉及在华为应用市场配置关联域名,并在module.json5中声明skillsurishttps类型。处理逻辑与自定义Scheme类似,但验证机制需遵循HarmonyOS的应用关联规范。
  5. 插件代码集成:将编写好的HarmonyOS原生代码与Flutter插件项目结构整合。可能需要修改插件的pubspec.yaml或创建特定的ohos插件包。

由于uni_links插件社区版未提供HarmonyOS实现,你需要自行实现上述平台层代码。这要求你同时熟悉Flutter插件开发流程和HarmonyOS应用开发,特别是Ability生命周期与URI处理机制。

当前,可以考虑的临时方案是,在Flutter层通过其他方式(如共享存储、本地数据库)结合HarmonyOS原生代码手动传递链接数据,但这并非标准做法。长远来看,为uni_links提交HarmonyOS平台的适配代码是更彻底的解决方案。

回到顶部