更新记录

1.0.2(2026-11-03)

  • 更新示例工程。

1.0.1(2026-11-03)

  • 更新文档。

1.0.0(2026-11-03)

  • 支持 Android、iOS、HarmonyOS 通过 URL Scheme 打开外部应用。
  • 支持 Android 包名启动、指定应用打开链接。
  • 支持应用可用性检查和打开结果回调。
  • 示例页增加打开方式提示、包名启动示例。
查看更多

平台兼容性

uni-app(5.24)

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

uni-app x(5.24)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - √ √ √ -

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× × × √

umi-open-schema

跨平台 UTS 插件:通过 URL Scheme、DeepLink 或 Universal/App Link 打开外部 App、浏览器、地图和应用商店。

使用

import { openSchema, canOpenURL, canOpenSchema } from '@/uni_modules/umi-open-schema'

openSchema({
  // 参数直接写入 URL,按目标 App 的协议编码
  url: 'https://maps.google.com/?q=31.23,121.47',
  // 仅 Android 使用,其他平台忽略此参数
  packageName: 'com.google.android.apps.maps',
  success: (res) => console.log(`opened: ${res.opened}`),
  fail: (err) => console.error(`${err.errCode}: ${err.errMsg}`)
})

// 自定义 Scheme 可先判断是否有目标应用处理;https App Linking 无需判断,直接打开。
if (canOpenURL('weixin://')) {
  openSchema({ url: 'weixin://dl/business/?ticket=your-ticket' })
}

Android 仅通过包名启动

// 无需传 url,启动目标应用的默认入口。
openSchema({
  packageName: 'com.tencent.mm',
  success: (res) => console.log(res.opened),
  fail: (err) => console.error(err.errMsg)
})

// 检查与打开使用相同参数;同时支持 URL 和包名。
const available = canOpenSchema({ packageName: 'com.tencent.mm' })
const handlesLink = canOpenSchema({ url: 'weixin://', packageName: 'com.tencent.mm' })
参数 Android 行为
只传 url 由系统匹配应用打开链接
只传 packageName 启动应用默认入口
两者都传 使用指定应用打开链接
两者为空或仅空白字符 返回 9010001

url 现在可省略,参数会先去除首尾空白。仅包名启动成功时,返回结果中的 url 为空字符串。iOS、HarmonyOS 暂不支持仅包名启动,此时返回 9010004;有 URL 时仍通过链接打开,忽略包名。canOpenURL(url) 保留兼容,canOpenSchema(options) 可检查完整参数;检查失败返回 false。

Android 应用可见性

Android 11 及以上查询目标应用时受应用可见性限制。插件的 utssdk/app-android/AndroidManifest.xml 已声明示例微信包名和 HTTPS 查询;接入其他应用时,在 <queries> 中补充具体包名:

<package android:name="com.example.target" />

不要把 <package> 放在 <application> 内。修改原生配置后需重新构建。包名启动使用 getLaunchIntentForPackage,目标应用未安装、不可见或没有可启动入口时会失败。检查结果是查询时的状态,不能保证随后启动一定成功;始终处理 fail 回调。

参考:Android 应用可见性声明。

iOS 应用访问白名单

将目标应用的 Scheme 加入宿主应用的 LSApplicationQueriesSchemes 白名单,只填写协议名,不带 ://。

  • uni-app x:在 manifest.json 的“iOS App配置 → 应用访问白名单”中添加(HBuilderX 4.71 及以上支持);旧版本在项目的 Info.plist 中配置。
  • uni-app:在 manifest.json 的 app-plus.distribute.ios 下配置 "urlschemewhitelist": "weixin,alipays"。
  • 原生工程:在宿主 Info.plist 的 <dict> 内添加:
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>weixin</string>
    <string>alipays</string>
</array>

本插件在 iOS 打开前也会检查 URL;自定义 Scheme 未加入白名单时,检查返回 false,打开返回 9010003。配置后需重新打包,真机调试请使用重新制作的自定义基座。

参考:uni-app x iOS 配置、uni-app 应用访问白名单。

HarmonyOS 查询 Scheme 配置

在宿主鸿蒙工程的 entry/src/main/module.json5 中,将目标协议加入 module.querySchemes,只填写协议名,不带 ://,最多 50 个。

HBuilderX 项目先运行一次鸿蒙端,将生成的 unpackage/dist/dev/app-harmony/entry/src/main/module.json5 完整复制到项目根目录的 harmony-configs/entry/src/main/module.json5,再在现有 module 节点中补充:

{
  "module": {
    // 保留原有配置,在此添加或合并目标 Scheme
    "querySchemes": ["weixin", "alipays"]
  }
}

以上仅为配置片段,覆盖文件必须保留完整内容。协议名以目标应用的鸿蒙接入文档为准。修改后重新运行或打包,并检查最终产物中的配置。

canOpenURL / canOpenSchema 通过 canOpenLink 查询,未声明目标 Scheme 时可能返回 false;openSchema 通过 openLink 打开,目标应用需支持对应的 Deep Link / App Linking。packageName 在鸿蒙端不参与匹配。

参考:鸿蒙应用唤起配置。

url 支持 https://、自定义 scheme(如 weixin://、alipays://)、地图 URI 以及应用商店链接。调用方负责按目标应用协议对 query 参数进行 URL 编码。packageName 可在 Android 上限定目标包名;鸿蒙上使用 URI 对应的 Deep Link / App Linking 规则决定目标应用。未安装目标应用或系统没有匹配处理者时,会通过 fail 返回 9010003。

隐私、权限声明

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

无

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

插件不采集任何数据

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

无

暂无用户评论。