You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native使用react-native-share分享二维码安卓App崩溃求助

React Native使用react-native-share分享二维码图片时崩溃、偶发失败及界面卡顿问题解决

问题背景

在RN 0.68.1项目中使用react-native-share 7.6.6分享base64格式的二维码图片时,出现以下问题:

  • 点击发送按钮后App崩溃
  • 分享操作偶发成功偶发失败
  • 分享界面打开速度明显慢于正常情况

原分享代码如下:

async ShareQR(media) {
    var base64Data = "data:image/png;base64," + media
    const title = "App"

    const shareOptions = {
        url: base64Data,
        title: title,
        message: 'App'
    }
    try {
        const res = await Share.open(shareOptions, function(e) {
            console.log(e)
        })
        console.log(res)
    } catch (err) {
        console.log("This error", err)
    }
}

核心原因

直接传递完整的base64编码字符串作为url参数存在两个关键问题:

  1. 较大的base64字符串会占用大量内存,导致分享界面加载卡顿,甚至触发内存溢出崩溃
  2. 部分第三方应用(如Gmail)对base64格式的url支持不完善,引发偶发失败

解决方案

方案1:将base64保存为本地文件后分享(推荐)

通过将base64图片写入本地临时文件,分享文件路径而非base64字符串,能有效解决内存占用和兼容性问题。以下是基于react-native-fs的实现示例:

  1. 安装依赖:
npm install react-native-fs --save
  1. 修改分享函数:
import RNFS from 'react-native-fs';

async ShareQR(media) {
  const title = "App";
  // 生成临时文件路径
  const tempFilePath = `${RNFS.TemporaryDirectoryPath}/qrcode.png`;
  
  try {
    // 将base64数据写入临时文件(注意无需添加data:image/png;base64,前缀)
    await RNFS.writeFile(tempFilePath, media, 'base64');
    
    const shareOptions = {
      url: `file://${tempFilePath}`,
      title: title,
      message: 'App',
      type: 'image/png' // 指定文件类型,帮助分享目标正确解析
    };
    
    const res = await Share.open(shareOptions);
    console.log(res);
    
    // 分享完成后清理临时文件
    await RNFS.unlink(tempFilePath);
  } catch (err) {
    console.log("分享错误", err);
    // 出错时也尝试清理临时文件
    try {
      await RNFS.unlink(tempFilePath);
    } catch (unlinkErr) {
      console.log("删除临时文件失败", unlinkErr);
    }
  }
}

方案2:调整权限配置(Android平台)

确保应用拥有文件读写权限,在android/app/src/main/AndroidManifest.xml中添加:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />

方案3:检查版本兼容性

react-native-share 7.6.6与RN 0.68.1可能存在兼容性问题,可查看官方release notes,升级至适配RN 0.68的稳定版本(如尝试升级到8.x系列中兼容RN 0.68的版本),或降级至经过验证的稳定版本。

内容的提问来源于stack exchange,提问作者user3487815

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 03:54:10