js开发怎样将小程序添加到手机桌面

简介: js开发怎样将小程序添加到手机桌面

如何通过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
      })
    }
  })
}

总结

  1. 安卓:用 wx.showAddToDesktop,必须上线 + 开启权限 + 非个人主体
  2. iOS:代码无法实现,只能引导手动添加
  3. 开发版无效,必须发布正式版才能测试
  4. 个人小程序大概率不支持

需要我帮你直接集成到你的小程序项目里吗?我可以按你的页面结构给你写好完整代码。

相关文章
|
8月前
|
人工智能 Java 程序员
吵了一百年的编程语言鄙视链,被AI智能体一锅端了
AI Agent崛起正终结百年编程语言之争:语法壁垒坍塌,代码生成趋近零成本。开发者护城河从API熟练度转向问题定义、业务洞察与系统架构能力。未来核心竞争力=创意×跨界整合×AI协同力。(239字)
624 9
|
5月前
|
人工智能 JSON 前端开发
AI 写 UI 总是一副面孔?
前端开发者苦AI“流水线设计”久矣:千篇一律的紫蓝渐变、圆角卡片、居中排版。直到发现GitHub高星项目**awesome-design-md**——将72个顶级品牌(Apple/Notion/Stripe等)的设计规范,精准拆解为Markdown文档,含色值、字号、间距、阴影等硬性参数。AI直接读取执行,告别脑补与模板,让生成页面真正具备品牌辨识度。(239字)
|
安全 Java
Arraylist 和 Vector 的区别
【10月更文挑战第13天】总的来说,Arraylist 和 Vector 各有其特点和优势,我们需要根据具体的应用场景和需求来选择使用哪种集合。在实际应用中,还需要注意线程安全问题、性能优化等方面,以确保集合的正确使用和高效运行。
728 157
|
存储 Java 索引
Java 中集合框架的常见接口和类
【10月更文挑战第13天】这些只是集合框架中的一部分常见接口和类,还有其他一些如 Queue、Deque 等接口以及相关的实现类。理解和掌握这些集合的特点和用法对于高效编程非常重要。
479 156
|
网络协议
计算机网络的分类
【10月更文挑战第11天】 计算机网络可按覆盖范围(局域网、城域网、广域网)、传输技术(有线、无线)、拓扑结构(星型、总线型、环型、网状型)、使用者(公用、专用)、交换方式(电路交换、分组交换)和服务类型(面向连接、无连接)等多种方式进行分类,每种分类方式揭示了网络的不同特性和应用场景。
3414 156
|
JavaScript 前端开发 索引
JavaScript 数组方法 slice() 的 5 个示例
slice() 方法将数组部分的副本返回到新的数组对象中。这个对象是从 start 到 end 选择的。需要注意的是,此方法不会修改原始数组。此外,如果向其中一个数组添加新元素,则另一个数组不会受到影响。
1041 0
JavaScript 数组方法 slice() 的 5 个示例
Linux kill了我的程序,咋回事呢
Linux kill了我的程序,咋回事呢
769 145
Linux kill了我的程序,咋回事呢
|
Web App开发 JSON TensorFlow
几行代码分析TensorFlow训练模型耗时
几行代码分析TensorFlow训练模型耗时
1068 139
几行代码分析TensorFlow训练模型耗时