App端第三方分享必须走uni.share,不能用onShareAppMessage或原生SDK;manifest.json需逐平台勾选并填对应appid,iOS微信还需配置通用链接,安卓需下载图片再传tempFilePath,HTTPS直链、域名备案、尺寸合规缺一不可。

App端第三方分享必须走 uni.share,不能用小程序的 onShareAppMessage,也不能直接调用微信原生 SDK;配置错 manifest.json 或漏填 provider,调用时会静默失败,连 error 都不抛。
manifest.json 里必须配对勾选并填 appid
微信、QQ、微博等每个平台都要单独处理,不是“开了分享开关”就自动可用:
- 打开
manifest.json→「App模块配置」→「Share(分享)」→ 勾选对应平台(如「微信消息及朋友圈」) - 在同一页填入该平台的合法 appid:
weixin填微信 AppID,qq填 QQ AppID,sinaweibo填微博 AppKey - iOS 微信还需额外配置通用链接(Universal Links),否则分享后点不开;Android 则无需此步
- 真机调试时,HBuilderX 默认用基座包运行,此时 manifest 的配置不生效——必须打自定义基座包或正式云打包才起作用
调用 uni.share 时 provider 和 scene 必须匹配平台
provider 决定走哪个 SDK,scene 决定发给谁,两者不一致会导致 fallback 或报错:
-
provider: 'weixin'时,scene只能是'WXSceneSession'(好友)或'WXSceneTimeline'(朋友圈);但 App 端不支持timeline,传了也自动转成会话分享 -
provider: 'qq'时,scene不生效,只看type(0 图文 / 2 图片 / 5 小程序) -
provider: 'sinaweibo'不支持scene,也不支持小程序类型,type只能是 0 或 1 - 务必先调
uni.getProvider({service: 'share'})检查当前设备是否返回了目标 provider,避免 iOS 没装微信却硬调导致失败
图片和链接必须满足平台硬性要求
App 分享对资源路径极其敏感,本地路径、相对路径、HTTP 协议全都不行:
-
imageUrl必须是 HTTPS 直链,且不能带参数重定向(比如七牛 CDN 的?imageView2会失败) - 安卓微信 8.0.33+ 要求图片分辨率 ≥ 300×300px,否则显示灰色占位图;iOS 无此限制但建议统一达标
-
href字段在 type=0(图文)时必填,且必须是可访问的公网地址;若想跳转到微信内 H5,需确保该域名已在微信公众平台「JS 接口安全域名」中备案 - 分享小程序卡片(type=5)时,
miniProgram.id必须是当前 App 绑定的微信小程序 AppID,否则提示“该小程序不存在”
安卓 vs iOS 图片处理逻辑完全不同
这是最常被忽略的兼容性坑:安卓不认网络图,iOS 不认本地图,必须分平台处理:
- 安卓上
imageUrl若为网络地址,uni.share会静默失败;必须先用uni.downloadFile下载到临时路径,再把tempFilePath传进去 - iOS 上可直接传 HTTPS 地址,但若图片较大(>200KB),可能因超时导致分享弹窗卡住;建议压缩并 CDN 缓存
- 不要复用 H5 或小程序的图片路径(如
/static/xxx.png),App 端无法解析这类路径 - 真机测试务必覆盖两个系统,模拟器无法验证图片加载行为
真正麻烦的不是写几行代码,而是每换一个平台就要重新校验一遍资源协议、尺寸、域名白名单和 SDK 初始化状态;漏掉任意一环,用户点分享按钮后就只有沉默。


















