更新记录

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)。

这意味着你:

  1. 不需要 手动在项目的 AndroidManifest.xml 中手写 <provider>
  2. 不需要 维护恶心的 res/xml/file_paths.xml 映射;
  3. ✅ 只需调用插件的 NativeShare.share() 即可完成一切文件分享。

iOS 清单权限

由于可能分享系统相册资源,在 Info.plist 中 HBuilderX 默认已包含:

  • NSPhotoLibraryAddUsageDescription - 访问相册权限
  • NSPhotoLibraryUsageDescription - 访问相册权限

Android 必须权限

内置于插件级别的 AndroidManifest.xml 中,默认已包含读取外部文件权限:

  • android.permission.READ_EXTERNAL_STORAGE
  • android.permission.WRITE_EXTERNAL_STORAGE
  • android.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

隐私、权限声明

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

iOS: 无需特殊权限 Android: 无需特殊权限 使用系统分享功能

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

插件不采集任何数据

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

暂无用户评论。