应使用 uni.shareWithSystem 实现 App 端原生分享,它无需 AppID 和 SDK 集成,跨平台零配置;uni.share 在 App 端依赖微信/QQ SDK,需白名单且仅支持小程序卡片分享,实用性极低。

App端想调用系统原生分享菜单(含微信、QQ、朋友圈等),别用 uni.share,直接上 uni.shareWithSystem —— 它不依赖任何 AppID,也不需要 JS-SDK 签名,是真正跨平台、零配置的“兜底方案”。
为什么 uni.share 在 App 端基本没用
很多人卡在这一步:照着文档写 uni.share({ provider: 'weixin' }),结果在 Android 或 iOS 上完全没反应。这是因为:uni.share 在 App 端实际走的是各平台 SDK 封装(比如微信 SDK 的 WXMediaMessage),它要求你提前集成对应 SDK、配置 AppID、处理签名——而绝大多数 uni-app 项目根本没做这些。更关键的是,从 2025 年起,微信官方已限制非白名单应用通过 SDK 直接分享文件或自定义消息,uni.share 在 App 端的可用场景只剩“分享小程序卡片”,且仅限已备案的 AppID。
所以,如果你的目标只是“让用户点一下,弹出手机自带的分享面板,然后自己选发给微信好友、QQ、钉钉、甚至短信”,那 uni.share 是绕远路,uni.shareWithSystem 才是正解。
uni.shareWithSystem 的参数怎么填才不踩坑
这个 API 表面简单,但 Android 和 iOS 对参数容忍度差异极大,稍不注意就只发文字、不带图,或干脆失败:
- Android 必须传
imageUrl的本地路径(tempFilePath或filePath),不能传 HTTPS 链接;iOS 可以传 HTTPS,但建议统一走本地缓存,避免兼容问题 - 分享类型由参数隐式决定:
type: 'image'且带imageUrl→ 弹出图片分享;只传summary和href→ 默认为文本+链接;传file字段(需是本地绝对路径)→ 触发文件分享(PDF/Excel 等) - Android 10+ 要求图片必须存于公共目录(如
Documents或Pictures),用uni.saveFile保存后,再用uni.getSavedFileList拿真实路径,别直接用tempFilePath -
title字段在 Android 上基本被忽略,iOS 会显示为分享面板标题;真正影响微信/QQ 接收端显示的是summary(描述)和href(点击跳转链接)
文件分享(PDF/Excel)在 App 端怎么落地
产品经理要的“一键分享报告”,uni.shareWithSystem 原生支持,但得手动补两步:
- 先用
uni.downloadFile把线上 PDF 下载到本地,或用uni.canvasToTempFilePath+uni.saveFile把页面生成的 PDF 写入文件系统 - 拿到本地绝对路径后,必须显式传
file字段:{ file: '/storage/emulated/0/Documents/report.pdf', summary: '本月销售报告' }—— 注意不是imageUrl,也不是href - Android 上,如果文件路径不在可共享目录,微信会提示“文件不可用”;iOS 上若未开启“文件共享”权限(
UIFileSharingEnabled = YES),分享后对方点开可能空白 - 不要试图用
uni.share传type: 'file',该参数在官方文档里存在,但 App 端 runtime 实际不识别,纯属误导
条件编译下如何安全调用
同一个分享按钮,要同时适配 App、小程序、H5,必须用条件编译隔离逻辑,否则 H5 里调 uni.shareWithSystem 会报错:
```js
// #ifdef APP-PLUS
uni.shareWithSystem({
file: this.localPdfPath,
summary: '请查收报告',
success: () => uni.showToast({ title: '已发送' }),
fail: (e) => console.error('分享失败', e)
})
// #endif
// #ifdef MP-WEIXIN
uni.showShareMenu({ withShareTicket: true }) // 小程序只能监听 onShareAppMessage
// #endif
```
重点:Android 分享文件后,微信内可能不显示缩略图;iOS 分享 PDF 到微信,对方长按可“用 QQ 打开”,这是系统级行为,无法干预。真正的难点从来不是调哪个 API,而是路径是否合法、文件是否可读、权限是否到位——这些细节,比写十行 JS 更容易让分享功能静默失败。











