更新记录

1.1.1(2026-09-07) 下载此版本

修改语法问题

1.1.0(2026-09-07) 下载此版本

  • openScheme 更名为 openDeepLink(接口类型同步更名)。
  • 新增 Android 平台:Intent.ACTION_VIEW + resolveActivity 预判 + UTSAndroid 上下文 startActivity
  • 新增 iOS 平台:OpenDeepLinkBridge.swiftUIApplication.canOpenURL / open)桥接。
  • 新增 H5 平台:window.location 尽力跳转 + 2 秒延时兜底。
  • 统一错误码 1001 / 1002 / 1003,失败不抛未捕获异常。

平台兼容性

uni-app(4.87)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(5.0)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × × × × ×

ux-toolkit

UX Toolkit:跨端工具 UTS 插件。提供 openDeepLink,用于通过 URL Scheme / DeepLink 拉起其他 App,覆盖鸿蒙 / Android / iOS / H5 四个环境,支持无应用可处理时的 http(s) 网页兜底。

平台支持

平台 支持 说明
App-HarmonyOS bundleManager.canOpenLink 预判 + startAbility 隐式拉起
Android Intent.ACTION_VIEW + resolveActivity 预判 + startActivity
iOS UIApplication.canOpenURL 预判 + open 拉起
H5 window.location 尽力跳转 + 延时兜底(结果无法 100% 精确判定)
小程序(mp-weixin 等) × UTS 插件不支持小程序平台,请由业务按下方示例提示不支持

快速使用

import { openDeepLink } from '@/uni_modules/ux-toolkit'

// 拉起微信
openDeepLink({ uri: 'weixin://' })
  .then((res) => {
    // res.errCode === 0,已拉起(res.openedByFallback 表示是否经由网页兜底)
    console.log('openDeepLink ok', res.errCode, res.openedByFallback)
  })
  .catch((err) => {
    // err 为 { errCode, errMsg, openedByFallback }
    console.log('openDeepLink fail', err.errCode, err.errMsg)
  })

// 拉起电商 App,未安装/不支持时用网页兜底
openDeepLink({
  uri: 'openapp.jdmobile://virtual?params=...',
  fallbackUrl: 'https://u.jd.com/xxxx'
}).catch((err) => {
  console.log(err.errCode, err.errMsg)
})

小程序环境调用示例

小程序没有 UTS 通道,调用方应自行处理"提示不支持"。建议在页面用条件编译包裹:

// #ifdef MP-WEIXIN
uni.showToast({ title: '当前环境不支持跳转外部 App', icon: 'none' })
// #endif

openDeepLink 的 import 语句同样建议放在 #ifdef APP-PLUS || APP-HARMONY || H5 条件编译内,避免小程序构建解析 UTS 模块。)

API

openDeepLink(options: OpenDeepLinkOptions): Promise<OpenDeepLinkResult>

字段 类型 说明
options.uri string 必填。完整 scheme/deeplink 链接,如 weixin://openapp.jdmobile://virtual?params=...
options.fallbackUrl string 可选。无应用可处理该 scheme 时使用的 http(s) 网页兜底地址

成功 resolve、失败 reject OpenDeepLinkResult(字段一致,仅 errCode 区分):

errCode 含义
0 已成功拉起(openedByFallback 表示是否经由网页兜底)
1001 无应用可处理该 scheme,且未提供 fallbackUrl(提示未安装/不支持)
1002 拉起调用失败(startActivity / startAbility / openURL 异常)
1003 参数错误(uri 为空)

类型定义见插件内 utssdk/interface.uts

宿主配置要求

鸿蒙

调用方需在 harmony-configs/entry/src/main/module.json5module.querySchemes 声明用到的 scheme(https 用于网页兜底,建议常驻),否则 canOpenLink / 隐式 startAbility 会被拦截:

{
  "module": {
    // ... 其他配置
    "querySchemes": [
      "https",
      "weixin"
      // 其余业务 scheme 按需追加
    ]
  }
}

iOS

canOpenURL 预判仅对宿主 Info.plistLSApplicationQueriesSchemes 白名单内 scheme 可靠。业务 scheme 需在 manifest.json 的 iOS 配置(urlschemewhitelist / LSApplicationQueriesSchemes)中声明;未声明的 scheme 会被视为"不支持"并走 fallbackUrl / 1001。

Android

resolveActivity 预判受 Android 11+(API 30+)包可见性影响可能不精确;插件已做异常兜底(try-startActivity),不会崩溃。如需精确可见性,宿主需在 AndroidManifest 增加 <queries> 声明(本项目以 HBuilderX 打包,如需要请另立需求处理)。

平台行为差异

  • H5:浏览器无法可靠获知 scheme 是否被系统/外部 App 接住。插件采用尽力策略:先跳 uri,监听 visibilitychange,若 2 秒内页面未被切走(scheme 未被接管)且有 fallbackUrl 则改跳兜底网页,否则 reject 1001。调用方不应把 H5 返回值当精确结果。
  • 能否拉起取决于目标 App 是否注册了对应 schemetbopen://openapp.jdmobile:// 等 Android/iOS 常见 scheme 在鸿蒙端需逐个真机验证。
  • 鸿蒙 getContext() 自 API 18 起被官方标记废弃,若真机运行发现无法取得 UIAbilityContext,需改用宿主 WindowStage 注入上下文方案。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。