更新记录

1.0.2(2026-03-18)

优化 Android 分享逻辑,移除 queryIntentActivities 检测,改为异常捕获实现,提升兼容性并消除废弃 API 警告

1.0.1(2026-03-18)

优化传入分享的ios文件路径匹配规则

1.0.0(2026-03-18)

  • 发布原生分享能力
  • 支持任意文件类型分享
  • 优化文件保存替代方案体验
查看更多

平台兼容性

uni-app(4.0)

Vue2 Vue2插件版本 Vue3 Vue3插件版本 Chrome Safari app-vue app-vue插件版本 app-nvue app-nvue插件版本 Android Android插件版本 iOS iOS插件版本 鸿蒙
1.0.0 1.0.0 - - 1.0.0 1.0.0 5.0 1.0.0 12 1.0.0 -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - - -

uni-app x(5.0)

Chrome Safari Android Android插件版本 iOS iOS插件版本 鸿蒙 微信小程序
- - 5.0 1.0.0 12 1.0.0 - -

其他

多语言 暗黑模式 宽屏模式

dh-share

Android / iOS 原生分享插件,调用系统分享面板或指定应用分享内容(图片 / 视频 / 音频 / 文本 / 链接 / 文件)。

uni-app 原生只能将图片和视频保存到相册,音频、PDF、文档等文件没有对应的保存 API,saveFile 只写入 App 沙盒用户不可见。分享是更优雅的替代方案:在线文件直接分享链接,本地文件通过系统分享面板让用户自主选择落盘位置(iOS"存储到文件"、Android"保存到设备"),体验远胜 App 代为保存。

快速开始

import { share, shareText, shareFile, shareUrl } from '@/uni_modules/dh-share';
import type { ShareResult, ShareFail } from '@/uni_modules/dh-share';

// 分享文本
shareText({
  text: '分享插件 — 让每次分享都方便 🎙️',
  title: '推荐应用',
  success: (res) => console.log('分享成功'),
  fail: (err) => console.error(err.errCode, err.errMsg),
});

// 分享链接
shareUrl({
  url: 'https://uniapp.dcloud.net.cn/',
  text: 'uni-app官网',
});

// 分享本地文件
shareFile({
  file: 'file:///data/user/0/com.example/cache/recording.wav',
  title: '录音文件',
});

// 组合:文件 + 说明文字
share({
  file: 'file:///path/to/audio.wav',
  text: '这段录音分享给你',
  title: '会议录音',
});

API

share(options)

通用分享接口,支持文本、链接、文件任意组合。至少需要提供 texturlfilefiles 其中一个。

ShareOptions

参数 类型 平台 说明
text string All 纯文本内容
title string All 分享标题(邮件主题、卡片标题)
subject string All 邮件主题(优先级高于 title
url string All 链接 URL(iOS 作为 NSURL 独立对象,Android 附加到文本末尾)
file string All 单文件路径(file:// 协议)
files string[] All 多文件路径列表(file:// 协议)
mimeType string All MIME 类型,不传时按扩展名自动识别
targetPackage string Android 目标应用包名,直接唤起指定 App
chooserTitle string Android 分享面板标题,默认 "分享"
excludedActivityTypes string[] iOS 排除的 UIActivity.ActivityType 列表
success function All 成功回调
fail function All 失败回调
complete function All 完成回调(无论成功或失败均触发)

ShareResult

字段 类型 说明
activityType string iOS:用户选择的 Activity 类型;Android:空字符串

shareText(options)

分享纯文本,text 必填。

shareText({
  text: '要分享的文字内容',
  title: '标题(可选)',
});

shareFile(options)

分享本地文件,filefiles 至少一个。

// 单文件
shareFile({
  file: 'file:///path/to/audio.wav',
});

// 多文件
shareFile({
  files: ['file:///a.jpg', 'file:///b.jpg'],
  mimeType: 'image/*',
});

shareUrl(options)

分享链接,url 必填。

shareUrl({
  url: 'https://example.com',
  text: '附带说明(可选)',
});

错误码

错误码 说明 建议处理
8030001 用户取消分享 静默处理,无需提示
8030002 系统错误 / 分享失败 提示用户稍后重试
8030003 文件不存在或路径无效 检查文件路径是否正确
8030004 指定应用未安装(targetPackage 找不到) 提示用户安装目标应用
8030005 参数错误,没有可分享的内容 检查是否传入了 text/url/file 之一
shareFile({
  file: filePath,
  fail: (err) => {
    if (err.errCode === 8030001) return; // 取消,不处理
    if (err.errCode === 8030003) {
      uni.showToast({ title: '文件不存在' });
    } else {
      uni.showToast({ title: '分享失败' });
    }
  },
});

Android 特有功能

指定目标应用(targetPackage)

// 直接分享到微信,不显示选择面板
share({
  text: 'uni-app官网',
  url: 'https://uniapp.dcloud.net.cn/',
  targetPackage: 'com.tencent.mm',
  fail: (err) => {
    if (err.errCode === 8030004) {
      uni.showToast({ title: '请先安装微信' });
    }
  },
});

常用包名:

应用 包名
微信 com.tencent.mm
QQ com.tencent.mobileqq
微博 com.sina.weibo
钉钉 com.alibaba.android.rimet
飞书 com.ss.android.lark

iOS 特有功能

排除分享渠道(excludedActivityTypes)

share({
  text: '叮咚录音',
  excludedActivityTypes: ['com.apple.UIKit.activity.Print', 'com.apple.UIKit.activity.AirDrop'],
});

常用 ActivityType:

常量 说明
com.apple.UIKit.activity.AirDrop AirDrop
com.apple.UIKit.activity.Print 打印
com.apple.UIKit.activity.CopyToPasteboard 复制
com.apple.UIKit.activity.SaveToCameraRoll 存储到相册
com.apple.UIKit.activity.Mail 邮件
com.apple.UIKit.activity.Message 短信

分享代替保存

uni-app 原生保存文件的限制:

  • uni.saveImageToPhotosAlbum / uni.saveVideoToPhotosAlbum:只能保存图片和视频到相册
  • uni.saveFile:将文件存入 App 沙盒,用户无法在文件管理器中访问,体验差
  • 音频、PDF、文档等非媒体文件:没有 API 可以保存到用户可见的位置

分享是更优雅的替代方案,将内容传递给用户选择的目标应用,由目标应用完成"保存"动作:

// 场景 1:分享网页链接 / 带预览的在线资源
// shareUrl 发送的是可点击链接,适合网页、H5 页面、带预览卡片的资源
shareUrl({
  url: 'https://example.com/share/report.html', // 网页地址,接收方可直接打开
  text: '季度报告',
});

// 场景 2:在线文件(PDF、音频等)想让用户"保存到本地"
// ⚠️ shareUrl 只分享链接,文件内容不会传输,接收方需要再点击下载
// ✅ 正确做法:先 downloadFile 拿到本地路径,再 shareFile 发送实际文件
uni.downloadFile({
  url: 'https://example.com/files/audio.wav',
  success: (res) => {
    // 分享实际文件内容,接收方(微信/邮件/文件 App)可直接保存
    const realPath = plus.io.convertLocalFileSystemURL(res.tempFilePath);
    shareFile({ file: realPath, title: '录音文件' });
  },
});

// 场景 3:本地临时文件(chooseImage / chooseVideo / downloadFile 选出的文件)
// tempFilePath 可直接传入,无需下载
shareFile({
  file: tempFilePath,
  title: '我的文件',
});

总结shareUrl 传链接(用户需点击才能访问),shareFile 传文件本体(接收方直接获得文件)。想让用户"保存文件",优先用 shareFile,iOS 面板有"存储到文件"选项,Android 有"保存到设备",用户自主选择落盘位置,体验远胜 App 代为保存。


注意事项

  • uni.chooseImage / uni.chooseVideo / dh-choose-file 获取的路径可直接传入(已是 file:// 格式)
  • 在线文件先用 uni.downloadFile 下载,需通过 plus.io.convertLocalFileSystemURL 转换路径后再传入
  • Android 系统分享弹窗弹出后,success 回调立即触发(不等用户完成操作),activityType为空字符串;iOS 在用户完成或取消后才触发
  • iOS 的 activityType 在用户选择并完成分享后才有值,取消时触发 fail(errCode 8030001)

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。