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 中无法通过 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 的拦截策略差异极大,测试务必覆盖主流机型。











