更新记录
1.0.1(2026-03-23)
无
1.0.0(2026-03-23)
- 初始版本发布,支持 iOS 和 Android 原生分享。
平台兼容性
uni-app(5.04)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | 5.0 | 1.0.0 | 12 | 1.0.0 | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.04)
| Chrome | Safari | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|---|
| - | - | 5.0 | 1.0.0 | 12 | 1.0.0 | - | - |
inory-native-share
uni-app 原生分享插件,提供 iOS 和 Android 平台的完整原生分享功能。统一的外部方法调用接口,插件内部自动区分平台实现。
功能特性
- ✅ 完整的系统分享能力
- iOS: UIActivityViewController(系统所有分享方式:AirDrop、邮件、信息、系统分享菜单等)
- Android: Intent.ACTION_SEND/ACTION_SEND_MULTIPLE(系统所有应用分享)
- ✅ 免配置(Zero Configuration)原生支持 - Android 端自动处理 FileProvider 动态探测和缓存机制,绕过 Android 11+ 的
file://URI 跨进程分享限制。 - ✅ 文本内容分享
- ✅ 链接分享
- ✅ 单文件分享(任意格式)
- ✅ 多文件分享(Android 独特功能)
- ✅ 文本 + 链接 + 文件的组合分享
- ✅ 自定义 MIME 类型支持
- ✅ 统一的外部调用接口,插件内部自动根据平台选择实现
使用方法
统一导入
// 统一导入 - 自动根据平台选择 iOS 或 Android 实现
import { NativeShare } from '@/uni_modules/inory-native-share'
import type { ShareOptions } from '@/uni_modules/inory-native-share'
分享纯文本
NativeShare.share({
title: '分享标题',
content: '分享内容',
success: (response) => {
console.log('分享成功')
},
fail: (msg) => {
console.error('分享失败:', msg)
}
})
分享文本 + 链接
NativeShare.share({
title: '分享文本和链接',
content: '这是一个很好的应用',
url: 'https://example.com',
success: (response) => {
console.log('分享成功')
},
fail: (msg) => {
console.error('分享失败:', msg)
}
})
分享文件
NativeShare.share({
title: '分享文件',
content: '分享描述',
filePath: '/storage/emulated/0/Pictures/image.jpg',
success: (response) => {
console.log('分享成功')
},
fail: (msg) => {
console.error('分享失败:', msg)
}
})
分享文件 + 自定义 MIME 类型
NativeShare.share({
title: '分享 PDF',
content: '重要文档',
filePath: '/storage/emulated/0/Documents/report.pdf',
mimeType: 'application/pdf',
success: (response) => {
console.log('分享成功')
},
fail: (msg) => {
console.error('分享失败:', msg)
}
})
分享多个文件(Android 仅支持)
NativeShare.share({
title: '分享多个文件',
content: '分享文件集合',
filePaths: [
'/storage/emulated/0/Pictures/image1.jpg',
'/storage/emulated/0/Pictures/image2.jpg',
'/storage/emulated/0/Documents/file.pdf'
],
success: (response) => {
console.log('分享成功')
},
fail: (msg) => {
console.error('分享失败:', msg)
}
})
API 文档
NativeShare.share(options: ShareOptions)
调用原生分享。
参数说明
| 参数 | 类型 | 必填 | 说明 | 备注 |
|---|---|---|---|---|
| title | string | 否 | 分享标题 | 作为分享选择器的标题,仅 Android 显示 |
| content | string | 否 | 分享描述(正文) | 分享内容的主要文本 |
| url | string | 否 | 分享链接 | 可与 content 组合分享 |
| filePath | string | 否 | 本地文件路径 | 单文件分享,任意格式 |
| filePaths | string[] | 否 | 多个文件路径数组 | Android 独特功能,支持一次分享多个文件 |
| mimeType | string | 否 | 自定义 MIME 类型 | 不指定时自动判断,优先级高于自动判断 |
| success | Function | 否 | 分享成功回调 | Android 调用系统分享菜单即视为成功 |
| fail | Function | 否 | 分享失败回调 | 无可用分享应用等错误情况 |
ShareResponse
分享结果响应对象。
interface ShareResponse {
success: boolean // 是否成功(调用系统分享菜单即为 true)
cancelled?: boolean // 是否被用户取消
message?: string // 返回消息
activityType?: string // 分享到的应用名称(仅 iOS 支持)
}
平台差异说明
iOS 特性
- 使用
UIActivityViewController呈现系统分享菜单 - 支持所有系统内置分享方式(AirDrop、邮件、信息等)
- 支持所有已安装的分享应用(微信、QQ、微博等)
- 支持"保存到相册"等系统功能
- 返回的
activityType表示用户选择的分享方式 - iPad 上会以 Popover 形式呈现
Android 特性
- 使用
Intent.ACTION_SEND/Intent.ACTION_SEND_MULTIPLE启动分享选择器 - 支持所有已安装的分享应用
- 支持多文件分享(iOS 暂不支持)
- 自动匹配文件的 MIME 类型
- 无法获取用户选择的具体应用(Android 10+ 的系统隐私限制,触发弹窗就算成功)
Android & iOS 权限与配置
免配置即插即用(Zero Configuration)
本插件内置了自动智能探测基座机制。
针对 Android 11+ 及以上设备引入的强制 Scoped Storage 分区存储与强制 Provider 策略,插件底层已将复杂的配置处理透明化:
- 插件在进行文件分享时(包括读取应用内
_doc私有目录等第三方如微信无权直接读取的目录时),会自动将需要分享的文件放入 Android 信任的外部缓存区。 - 动态获取 HBuilderX 标准基座或正式包的内部可用
FileProvider进行签名授权(颁发content://URI)。
这意味着你:
- ❌ 不需要 手动在项目的
AndroidManifest.xml中手写<provider>; - ❌ 不需要 维护恶心的
res/xml/file_paths.xml映射; - ✅ 只需调用插件的
NativeShare.share()即可完成一切文件分享。
iOS 清单权限
由于可能分享系统相册资源,在 Info.plist 中 HBuilderX 默认已包含:
NSPhotoLibraryAddUsageDescription- 访问相册权限NSPhotoLibraryUsageDescription- 访问相册权限
Android 必须权限
内置于插件级别的 AndroidManifest.xml 中,默认已包含读取外部文件权限:
android.permission.READ_EXTERNAL_STORAGEandroid.permission.WRITE_EXTERNAL_STORAGEandroid.permission.INTERNET
完整示例
示例 1:分享私有目录下的文件(MapPanel.vue 实际应用)
由于底层内置了复制缓存逻辑,即使是存放在通过 uni.saveFile 或者 plus.io.PRIVATE_DOC 等私有作用域下的文件,直接把 res.savedFilePath 传给插件也可安全在微信中使用。
import { NativeShare } from '@/uni_modules/inory-native-share/utssdk'
function handleSaveAndShare() {
const content = 'Hello World logs'
const fileName = `log_${Date.now()}.txt`
const filePath = `_doc/${fileName}`
// 创建一个应用内部的私有文件,通常第三方无法直接读取
uni.saveFile({
tempFilePath: filePath,
filePath,
success: (res) => {
// 插件内部会自动处理授权转化
NativeShare.share({
title: '私有日志',
content: '工作日志文件',
filePath: res.savedFilePath, // 直接使用该路径
success: () => {
uni.showToast({ title: '调起分享面板成功', icon: 'success' })
},
fail: (msg) => {
uni.showToast({ title: `分享失败: ${msg}`, icon: 'none' })
},
})
}
})
}
许可证
MIT License

收藏人数:
无
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 205
赞赏 0
下载 11528688
赞赏 1882
赞赏
京公网安备:11010802035340号