如何通过JS开发,让微信小程序支持添加到手机桌面?
一、核心前提(必须满足)
小程序不是网页,不能用普通网页的 beforeinstallprompt,只能用微信官方API。
支持情况:
- ✅ 安卓手机:完全支持,可直接添加桌面图标
- ❌ iOS 苹果手机:微信官方不支持,无法通过代码实现,只能手动分享 -> 添加到主屏幕
- 基础库版本:≥2.10.3
二、安卓端:JS 代码实现(一键添加桌面)
1. 核心 API
wx.showAddToDesktop({
success(res) {
console.log('发起添加桌面成功', res)
},
fail(err) {
console.log('添加桌面失败', err)
}
})
2. 完整按钮点击示例(wxml + js)
page.wxml
<button bindtap="addDesktop" type="primary">
添加到手机桌面
</button>
page.js
Page({
// 添加到桌面
addDesktop() {
// 1. 先判断是否支持
const version = wx.getSystemInfoSync().SDKVersion
if (this.compareVersion(version, '2.10.3') < 0) {
wx.showToast({
title: '微信版本过低,不支持',
icon: 'none'
})
return
}
// 2. 调用官方API
wx.showAddToDesktop({
success() {
wx.showToast({
title: '已发起添加,按提示完成',
icon: 'none'
})
},
fail(err) {
console.error(err)
wx.showToast({
title: '添加失败,请开启桌面快捷方式权限',
icon: 'none',
duration: 3000
})
}
})
},
// 版本对比工具函数
compareVersion(v1, v2) {
v1 = v1.split('.')
v2 = v2.split('.')
const len = Math.max(v1.length, v2.length)
while (v1.length < len) v1.push('0')
while (v2.length < len) v2.push('0')
for (let i = 0; i < len; i++) {
const num1 = parseInt(v1[i])
const num2 = parseInt(v2[i])
if (num1 > num2) return 1
if (num1 < num2) return -1
}
return 0
}
})
三、为什么你调用会失败?(90% 的坑)
1. 必须开启权限(安卓)
用户手机必须开启:
设置 → 应用 → 微信 → 权限 → 开启「桌面快捷方式」
2. 必须是发布版小程序
- 开发版 / 体验版:不支持添加桌面
- 必须上传代码 → 发布上线后才能生效
3. 必须是非个人主体?
官方规则:
- ✅ 企业/政府/媒体小程序:支持
- ❌ 个人主体小程序:默认不支持(微信限制)
四、iOS 苹果手机怎么办?
iOS 无法用代码实现,只能引导用户手动操作:
引导文案(你可以写在页面上)
苹果手机添加方法:
1. 点击右上角「...」
2. 选择「分享」
3. 点击「添加到主屏幕」
五、最稳妥的兼容写法(推荐直接复制)
addDesktop() {
const system = wx.getSystemInfoSync().system
// iOS 直接提示手动操作
if (system.includes('iOS')) {
wx.showModal({
title: '苹果手机添加方式',
content: '点击右上角「...」→ 分享 → 添加到主屏幕',
showCancel: false
})
return
}
// 安卓走官方API
wx.showAddToDesktop({
success() {
wx.showToast({
title: '添加成功', icon: 'success' })
},
fail() {
wx.showToast({
title: '请开启微信桌面快捷方式权限',
icon: 'none',
duration: 3000
})
}
})
}
总结
- 安卓:用
wx.showAddToDesktop,必须上线 + 开启权限 + 非个人主体 - iOS:代码无法实现,只能引导手动添加
- 开发版无效,必须发布正式版才能测试
- 个人小程序大概率不支持
需要我帮你直接集成到你的小程序项目里吗?我可以按你的页面结构给你写好完整代码。