Guía marco
Expo vs React Native desnudo
@markpdf/react-native no depende de ningún módulo nativo propio: utiliza fetch/FormData/XMLHttpRequest global, disponible en ambos. La diferencia está en qué selector utiliza para obtener el uri/name del archivo.
Expo: expo-document-picker
No requiere permisos adicionales en app.json: el selector de archivos del sistema operativo maneja el acceso.
Enfermero registrado desnudo: react-native-document-picker
En Android, verifique que su targetSdkVersion sea compatible con la versión de react-native-document-picker que instala; las versiones recientes de Android Scoped Storage cambian la forma en que se resuelven los content:// URI. Siga la guía de instalación del paquete para su versión de RN.
Permisos
Ni expo-document-picker ni react-native-document-picker requieren permisos de almacenamiento explícitos en la mayoría de los casos; ambos delegan en el selector de archivos nativo del sistema (Selector de documentos en iOS, Storage Access Framework en Android), que no necesita READ_EXTERNAL_STORAGE. Si su aplicación también necesita acceder a la galería de fotos para adjuntar imágenes escaneadas, use expo-image-picker (Expo) o react-native-image-picker (desnudo) y siga sus requisitos de permiso separados, que son independientes de @markpdf/react-native.
¿Dónde vive la clave API?
A diferencia de una aplicación web, un binario de aplicación móvil no tiene un “servidor” que proporcione variables de entorno en tiempo de ejecución; cualquier cadena incrustada en el paquete JS puede ser eliminada por alguien con .ipa/.apk. Opciones, de más a menos seguras:
- Proxy en su backend (recomendado para producción): la aplicación llama a su propio punto final, que a su vez llama a markpdf con la clave guardada en el lado del servidor. La aplicación nunca ve la clave markpdf.
- Clave integrada de privilegios bajos: si no tiene su propio backend, use una clave dedicada solo a esa aplicación, con límites de uso y facturación limitados, suponiendo que pueda filtrarse.
- Construir variables de entorno (
EAS Secrets en Expo, .env + react-native-config en bare): evitan codificar la clave en el código fuente versionado, pero no evitan que termine en el paquete descompilable final. Útil para no enviar la clave al repositorio, no para ocultarla al usuario final.
Si su aplicación maneja documentos confidenciales de usuarios reales, use la opción 1 (proxy en su backend). Una clave incrustada en el binario, incluso si no está en el repositorio, aún se puede eliminar con herramientas de descompilación estándar.
Networking en segundo plano
Cargar archivos PDF grandes desde el selector puede llevar tiempo; Si el usuario minimiza la aplicación durante la carga, iOS/Android puede suspender la tarea de red según el sistema operativo y el estado de la aplicación. Para cargas en segundo plano largas y confiables, considere una biblioteca de carga en segundo plano (por ejemplo, react-native-background-upload) en lugar de depender de fetch/XMLHttpRequest para sobrevivir indefinidamente con la aplicación en segundo plano; esta es una limitación general de RN, no específica de @markpdf/react-native.