跳转到主内容
极星编程网:以代码为星,赴技术山海!

uni-app怎么实现App端的桌面快捷方式创建 uni-app原生接口调用

uni.createShortcut在App端(iOS/Android)默认不生效,需通过原生插件实现:Android需用ShortcutManager动态添加并处理权限与图标路径;iOS仅支持静态配置Home Screen Quick Actions,无法运行时创建桌面图标。 App端创建桌面快捷方式需要原生插件支持 uni-app 的
uni.createShortcut
在 App 端(iOS/Android)默认不生效,因为该 API 仅在微信小程序、快应用等平台有基础实现,而原生 App 环境下需调用系统级接口(如 Android 的
ShortcutManager
、iOS 的
UIApplication.shortcutItems
),uni-app 框架本身未封装这部分能力。 你看到的「调用成功但无反应」或「控制台报错
not supported
」,基本都源于此 —— 不是写法错,而是能力缺失。 Android 端必须用自定义原生插件实现 要让 Android App 支持桌面快捷方式(即长按图标出现的「+」菜单项,或通过代码动态添加到桌面),必须在
nativePlugins
中集成原生插件,并手动处理以下环节: Android 8.0+ 要求使用
ShortcutManager
创建静态/动态快捷方式,且需在
AndroidManifest.xml
中声明
动态快捷方式需调用
shortcutManager.addDynamicShortcuts(...)
,并确保 App 已获取必要权限(无需额外运行时权限,但 targetSdkVersion ≥ 26 时行为更严格) uni-app 无法直接访问
Activity
或
Context
,所以插件里必须通过
uni.requireNativePlugin
拿到当前 Activity 实例再操作 图标资源必须为
res/mipmap-*
下的
.png
,不能用网络地址或
static
目录路径 示例关键调用(插件内部 Java 代码片段):
ShortcutManager shortcutManager = context.getSystemService(ShortcutManager.class); if (shortcutManager != null && shortcutManager.isRequestPinShortcutSupported()) { ShortcutInfo shortcut = new ShortcutInfo.Builder(context, "home_launch") .setShortLabel("启动页") .setLongLabel("快速打开主界面") .setIcon(Icon.createWithResource(context, R.mipmap.ic_shortcut_home)) .setIntent(new Intent(context, MainActivity.class) .setAction(Intent.ACTION_VIEW) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)) .build(); shortcutManager.requestPinShortcut(shortcut, null); }
iOS 端受限严重,仅支持 3D Touch / Haptic Touch 快捷菜单 iOS 不允许 App 自动创建桌面图标(即不能像 Android 那样把新图标扔到主屏),仅能配置「主屏幕快捷操作」(Home Screen Quick Actions),也就是长按 App 图标弹出的菜单项。这个能力由
Info.plist
中的
UIApplicationShortcutItems
控制,属于静态配置,无法运行时动态增删。 uni-app电商系统实战精讲课程课件 uni-app电商系统实战精讲课程 下载 你在 uni-app 中无法通过 JS 代码触发新增桌面图标,哪怕调用
uni.createShortcut
也会静默失败或返回 false。唯一可行路径是: 在
manifest.json → app-plus → ios → plistcmds
中硬编码写入
UIApplicationShortcutItems
数组 每个 item 必须包含
UIApplicationShortcutItemType
、
UIApplicationShortcutItemTitle
、
UIApplicationShortcutItemIconFile
(图标文件需放在
unpackage/res/iOS/
下,且已添加进 Xcode 的 bundle) 点击后触发的事件需在
App.vue
的
onLaunch
或
onShow
中检查
options?.shareTicket
或
options?.path
(实际是通过
UIApplication.shared.openURL
带参拉起,uni-app 会解析为
launchOptions
) 别踩坑:uni.createShortcut 的真实兼容表和替代思路
uni.createShortcut
在 App 端本质是空实现,文档未明确标注限制,导致很多人卡在「为什么没反应」。目前真实可用场景只有: 微信小程序:支持,但需用户主动授权(首次调用弹窗) 支付宝小程序:支持,行为类似微信 H5 / App 端:返回
{ errMsg: 'createShortcut:ok' }
但无任何副作用 如果你真需要 App 端「一键加桌面图标」体验,现实方案只有两个: Android:找现成原生插件(如 DCloud 插件市场里的「Android 快捷方式」),或自己基于
uni-app native plugin
规范开发,重点处理
requestPinShortcut
权限回调和图标资源路径 全平台统一降级:改用「引导用户手动添加」——跳转系统设置页(Android 可用
plus.android.runtimeIntent
打开「应用信息」页;iOS 无法跳转,只能提示「请长按图标选择『编辑主屏幕』」) 最常被忽略的一点:Android 动态快捷方式在 App 被用户「强行停止」或「清除后台」后会自动失效,且不同厂商 ROM(如华为 EMUI、小米 MIUI)对
requestPinShortcut
的拦截策略差异极大,测试务必覆盖主流机型。

相关文章