No he podido encontrar ninguna solución a esto.
Estoy usando Ionic Framework 5+ y usando Capacitor 3+.
Necesito poder hacer que el usuario tome una captura de pantalla en iOS y Android y que esa captura de pantalla se guarde automáticamente en la galería de fotos de los usuarios. Android funciona bien con el siguiente código. iOS también funciona, sin embargo, guarda el archivo en un directorio temporal, por lo que debo mover el archivo a cualquier directorio al que deba ir en iOS para que el usuario pueda verlo en su galería de fotos.
import { Screenshot } from '@ionic-native/screenshot/ngx'; this.screenshot.save('jpg', 80).then((res) => { this.filePath = res.filePath; console.log(this.filePath); });
¿Hay alguna manera de usar la API de FileSystem Capacitor para guardar esta foto en this.filePath
en la galería de iOS?
¿Hay otra forma de pasar de la captura de pantalla a la galería en iOS?
En iOS, la galería es algo externo a su aplicación y no se puede acceder a través del complemento del sistema de archivos porque no hay una ruta (e incluso si la hubiera, las aplicaciones de iOS están en un espacio aislado, no puede acceder a otras aplicaciones, solo a su aplicación) contenido)
Puede guardar una UIImage nativa en la galería con este código nativo:
UIImageWriteToSavedPhotosAlbum(yourImage, nil, nil, nil)
pero tiene una ruta nativa, no una UIImage, por lo que primero tendrá que convertir la ruta a UIImage, con algo como let yourImage = UIImage.init(contentsOfFile: imagePath)
. Entonces, con ese código puedes crear un complemento que envíe la ruta y guarde la imagen en la galería.
También puede buscar complementos que ya lo hagan. Existe este que guarda una cadena base64 que representa una imagen en la galería https://ionicframework.com/docs/native/base64-to-gallery
También hay capacitor-community/media que tiene una función savePhoto, que toma una ruta y guarda la foto en la galería.
Esto funciona para iOS. Lo estoy usando en producción en este momento. El problema fundamental tenía que ver con el hecho de que la biblioteca Capacitor Community Media no estaba muy bien documentada para especificar el formato exacto necesario para que funcionara. Esta es la versión de trabajo del package.json
de la biblioteca: "@capacitor-community/media": "github:dragermrb/media"
.
this.screenshot.save().then(async (res) => { const savePhotoResult = await Media.savePhoto({ path: `file://${res.filePath}`, album: this.album.identifier }); });
Como haces la instalación de @ionic-native/screenshot/ngx y el plugin como tal, si usas capacitor, estoy un poco perdido con eso