鸿蒙专家 发表于 2026-9-30 08:00:00

鸿蒙 uni-app x 微信分享 uni.share 适配排障

为什么鸿蒙平台要单独处理微信分享

uni.share 是 uni-app x 提供的微信分享 API,专门对接微信 SDK,支持分享到微信聊天、朋友圈和微信收藏。兼容性方面,Web 不支持;Android 和 iOS 从 HBuilderX 5.08 才开始支持微信分享,而鸿蒙 4.81 就已经支持,时间更早。因此鸿蒙端做微信分享时,可以直接走 uni.share。系统分享 uni.shareWithSystem 是另一套能力,这里不展开。

API 签名与核心参数

API 签名为:
uni.share(options: ShareOptions)
。常用参数包括 provider、scene、type、title、href、summary、imageUrl,以及小程序分享用的 miniProgram。

分享类型 type:0 表示图文,1 表示纯文字,2 表示纯图片,5 表示小程序。分享场景 scene:WXSceneSession 对应微信聊天,WXSceneTimeline 对应朋友圈,WXSceneFavorite 对应微信收藏。失败回调会返回 ShareFail,可通过 errCode 和 errMsg 排查。

纯文字分享示例:

uni.share({
provider: 'weixin',
scene: 'WXSceneSession',
type: 1,
summary: '今天学到了 uni-app x 的微信分享功能,太方便了!',
success: () => {
    uni.showToast({ title: '分享成功', icon: 'success' })
},
fail: (err: ShareFail) => {
    uni.showToast({ title: '分享失败: ' + err.errMsg, icon: 'none' })
}
})


分享图文到聊天时,通常需要 title、href、summary、imageUrl;分享小程序时,miniProgram 需要配置 id、path、type 和 webUrl,其中 webUrl 用于低版本回退网页。

鸿蒙平台专属限制

鸿蒙平台做微信分享,限制比 Android、iOS 更需要提前处理。图片仅支持 jpeg 和 png,GIF、WebP 都不行。图片大小不能超过 100KB,视频大小不能超过 64KB。文字方面,title 不能超过 512 个字节,summary 不能超过 1024 个字节;UTF-8 下中文一个字约占 3 个字节,换算下来 title 最多约 170 个中文字,summary 最多约 340 个中文字。

这些限制会直接影响高清图、长文案和表情包类内容。建议在分享前统一做图片压缩和文本截断:

uni.compressImage({
src: '/static/large-image.jpg',
quality: 60,
success: (res) => {
    uni.share({
      provider: 'weixin',
      type: 2,
      imageUrl: res.tempFilePath
    })
}
})


文本截断可以按 UTF-8 字节数计算,中文按 3 字节、其他字符按 1 字节:

const truncateText = (text: string, maxBytes: number): string => {
let bytes = 0
let result = ''
for (let i = 0; i < text.length; i++) {
    const charCode = text.charCodeAt(i)
    if (charCode > 127) {
      bytes += 3
    } else {
      bytes += 1
    }
    if (bytes > maxBytes) {
      break
    }
    result += text
}
return result
}

const shareTitle = truncateText(veryLongTitle, 512)
const shareSummary = truncateText(veryLongSummary, 1024)


manifest 配置与微信安装检查

鸿蒙平台需要在 manifest.json 中配置微信 APPID。如果不配置,会报错 4000500,提示未找到微信 APPID。分享前也建议检查微信是否安装,未安装会报错 4000510。

uni.getProvider({
service: 'share',
success: (res) => {
    const provider = res.providers.find((item): boolean => {
      return item.id == 'weixin'
    })
    if (provider != null && provider instanceof UniShareWeixinProvider) {
      if (!provider.isWeChatInstalled) {
      uni.showToast({ title: '请先安装微信', icon: 'none' })
      return
      }
      console.log('微信已安装,可以分享')
    }
},
fail: (err) => {
    console.log('获取分享通道失败:', err)
}
})


4.87 版本图片分享 bug

鸿蒙平台在 HBuilderX 4.87 及以下版本中,分享时图片大于 20KB 会出现分享失败。临时方案是下载 har 包并改名为 uni_modules__uni_share_weixin.har,放到 项目根目录/harmony-configs/libs/ 目录下重新编译运行。高版本不存在这个问题。如果项目已经出现图片死活分享不出去,除了检查格式和 100KB 限制,也要确认 HBuilderX 版本。

常见错误码与排障顺序

4000500:未找到微信 APPID,检查 manifest.json 中的微信配置。4000510:微信未安装,分享前先检查。4000507:图片下载失败,结合图片大小、格式和网络地址排查。4000511:分享失败,优先检查鸿蒙图片 100KB、视频 64KB、title 512 字节、summary 1024 字节等限制;4.87 版本的 20KB 图片 bug 也要纳入排查。

与鸿蒙原生分享的差异

鸿蒙原生开发中,分享对接相对复杂,需要从 @kit.ShareKit 引入 share,创建 ShareData,处理各种回调,再调用 share.shareAbility(context, shareData)。原生方案的优势是可以调用系统分享面板,支持更多分享目标。uni-app x 的 uni.share 封装了微信分享,一个 API 就能完成聊天、朋友圈、收藏等场景,不用分别对接微信 SDK,但必须接受鸿蒙平台的格式、大小和字节限制。

如果内置微信分享不够用,uni-app x 从 4.25 起开放了 provider 自接入机制。需要新建 UTS 插件,定义 UniShareProvider 接口,实现 share 方法,在 manifest.json 中配置,然后打包自定义基座运行。之后可以用 uni.share({ provider: 'weibo', ...}) 的方式调用自定义分享,例如接入微博、抖音等。

总结

uni.share 专门对接微信,支持聊天、朋友圈、收藏三个场景;鸿蒙 4.81 开始支持,比 Android、iOS 的 HBuilderX 5.08 更早。鸿蒙平台图片仅支持 jpeg/png,大小不超过 100KB;视频不超过 64KB;title 不超过 512 字节,summary 不超过 1024 字节。4.87 及以下版本存在图片大于 20KB 分享失败的 bug。manifest 必须配置微信 APPID,分享前检查微信是否安装。分享前统一做图片压缩和文本截断,可以避开大部分失败。需要系统分享能力时,再看 uni.shareWithSystem。

热心网友2 发表于 2026-9-30 19:30:00

Re: 鸿蒙 uni-app x 微信分享 uni.share 适配排障

感谢楼主整理,内容很干。鸿蒙端微信分享确实要先避坑:manifest 里微信 APPID 不配会报 4000500,微信未安装报 4000510;图片只支持 jpeg 和 png,GIF、WebP 不行,而且不能超过 100KB,视频 64KB;title 和 summary 还要按 UTF-8 字节控制,中文约 3 字节,所以标题约 170 字、摘要约 340 字就要截断。分享前先做图片压缩和文本截断,再用 getProvider 检查微信是否安装,这个流程很实用。另外 4.87 及以下版本大于 20KB 图片分享失败的 bug 也值得单独记一下,排查时把 HBuilderX 版本一起确认,能省不少时间。

热心网友4 发表于 2026-9-30 19:40:00

Re: 鸿蒙 uni-app x 微信分享 uni.share 适配排障

楼主整理得挺全的,先收藏了。鸿蒙端微信分享确实比 Android 和 iOS 更早支持,但限制也更细,图片只支持 jpeg 和 png、不能超过 100KB,视频不能超过 64KB,title 和 summary 还有字节数限制,这些如果没提前处理,分享失败时很容易懵。分享前用 compressImage 压缩图片、按 UTF-8 字节截断文本这个思路很实用,中文按 3 字节算这点也提醒得到位。 manifest 里配置微信 APPID 和分享前检查微信是否安装这两个点也很关键,4000500、4000510 基本就能直接定位。另外 4.87 及以下版本图片大于 20KB 会失败这个坑很重要,以后排查图片分享不出去,除了看格式和 100KB 限制,也得确认 HBuilderX 版本。感谢分享,按这个排障顺序来会省很多时间。

热心网友1 发表于 2026-9-30 19:50:00

Re: 鸿蒙 uni-app x 微信分享 uni.share 适配排障

感谢分享,整理得很细,鸿蒙端做微信分享确实比安卓和 iOS 要多注意不少限制。图片只支持 jpeg 和 png,大小不能超过 100KB,视频不能超过 64KB,还有 title 512 字节、summary 1024 字节这些点,实际开发中很容易忽略。分享前用 compressImage 压一下图片,再按 UTF-8 字节数截断文本,这个处理思路很实用。 manifest 里配置微信 APPID,以及分享前检查微信是否安装,这两个前置检查也很关键,4000500 和 4000510 确实会让人一开始摸不着头脑。4.87 及以下版本图片大于 20KB 会分享失败这个点也很有价值,排障时除了看格式和 100KB 限制,还得确认 HBuilderX 版本。 按 4000500、4000510、4000507、4000511 这个顺序排查,思路很清晰。小程序分享里 miniProgram 的 id、path、type 和 webUrl 低版本回退也提醒到了,后面做鸿蒙分享时可以拿这篇当检查清单。
页: [1]
查看完整版本: 鸿蒙 uni-app x 微信分享 uni.share 适配排障