React Native Expo iOS端PDF分享功能异常求助
iOS端Expo Sharing分享PDF弹窗闪退问题修复
针对你遇到的iOS端分享PDF弹窗打开后立即关闭的问题,可尝试以下几个修复方案:
方案1:修正分享参数配置
Expo Sharing.shareAsync 的第一个参数已经是文件URI,不需要在shareOptions中重复设置url字段,且iOS推荐使用通用UTI public.pdf 而非厂商特定的com.adobe.pdf。修改后的分享代码如下:
// 移除多余的url配置,调整UTI const shareOptions = { mimeType: 'application/pdf', UTI: 'public.pdf', }; await Sharing.shareAsync(destinationUri, shareOptions);
方案2:跳过文件移动直接使用生成的PDF URI
printToFileAsync 返回的URI在iOS下已经是可访问的有效路径,无需额外移动文件,减少路径处理可能带来的问题:
try { const pdf = await Print.printToFileAsync(options); if (pdf.uri) { const shareOptions = { mimeType: 'application/pdf', UTI: 'public.pdf', }; await Sharing.shareAsync(pdf.uri, shareOptions); } else { alert('Erro ao salvar o PDF'); } } catch (error) { console.error('Erro ao gerar o PDF:', error); }
方案3:验证文件存在性
在分享前添加文件存在检查,确保文件已正确生成,避免因文件缺失导致弹窗异常:
if (pdf.uri) { const destinationUri = `${FileSystem.documentDirectory}${nameFile}.pdf`; await FileSystem.moveAsync({ from: pdf.uri, to: destinationUri, }); // 检查文件是否存在 const fileInfo = await FileSystem.getInfoAsync(destinationUri); if (!fileInfo.exists) { alert('Arquivo PDF não encontrado'); return; } const shareOptions = { mimeType: 'application/pdf', UTI: 'public.pdf', }; await Sharing.shareAsync(destinationUri, shareOptions); }
方案4:确保nameFile变量正确赋值
确认nameFile变量已被正确定义且不为空,避免生成无效的文件路径。
以上方案中,优先尝试方案1和方案2,通常iOS下分享弹窗闪退多因参数配置错误或路径格式问题导致。
内容的提问来源于stack exchange,提问作者Luciano Ferreira
相关产品推荐
相关产品推荐

