Aitor Sánchez - Blog - Oct. 27, 2023, 5:16 p.m.
¿Pensando en incluir funcionalidades de cámara en tu app Ionic con el compomente Ionic Camera? O, talvez, ya sabes cómo se utiliza pero te falta conocer algún detalles sobre él para dejarlo cómo tu quieres ¿verdad?
Mi nombre es Aitor Sánchez, soy desarrollador de apps desde 2014. Y en este artículo aprenderás cómo puedes utilizar la cámara del dispositivo en tu aplicación con el plugin Ionic Camera.
Pero antes de continuar, esta es la Flutter Mafia. Es mi newsletter donde aprenderás desarrollo de apps móviles, aso y monetización junto con otros genietes que ya están dentro. Y si te suscribes te regalo mi ebook "Duplica los ingreso de tus apps en 5 minutos" No es broma, quizás te interese.
En primer lugar, como sucede con la mayoría de los módulos externos, tenemos que instalar, por un lado, el plugin de cordova y, por otro lado, el módulo TypeScript que nos permitirá la comunicación.
ionic cordova plugin add cordova-plugin-camera
npm install @awesome-cordova-plugins/camera
Antes de continuar, realizo una anotación: Para poder hacer uso de este módulo en IOS 10 o posteriores necesitamos solicitar los permisos necesarios. Para esto vamos a hacerlo agregando a nuestro archivo .xml de configuración las siguientes líneas:
<config-file parent="NSCameraUsageDescription" platform="ios" target="*-Info.plist">
<string>You can take photos</string>
</config-file>
Siendo la cadena "You can take photos" la cadena que aparecerá cuando se soliciten los permisos para poder usar la cámara en iOS. Y tiene que colocarse dentro de la etiqueta:
<platform name='ios>
Que es la que nos permite configurar los ajustes de la plataforma iOS.
Y para terminar la instalación tenemos que agregar el componente a los providers de nuestra clase:
...
import { CameraModule } from "@awesome-cordova-plugins/camera/ngx"
...
providers: [
.....,
CameraModule,
.....
]
...
Aunque suene un poco rara la lista que te voy a mostrar a continuación después explicaré el cómo y el porque de dos de ellas.
Como puedes comprobar, las dos últimas líneas son un poco extrañas ¿verdad? Pues sí, lo son. Pero como los chicos de Ionic piensan en todo, tenemos disponible la posibilidad de usar la web cam dentro del módulo. La verdad que es interesante.
En primer lugar, como nos gusta a todos, vamos a ver un ejemplo de cómo tenemos que codificar nuestra clase para que podamos hacer un uso correcto del componente. Vamos allá.
import { Camera, CameraOptions } from '@awesome-cordova-plugins/camera/ngx';
constructor(private camera: Camera) { }
...
const options: CameraOptions = {
quality: 100,
destinationType: this.camera.DestinationType.FILE_URI,
encodingType: this.camera.EncodingType.JPEG,
mediaType: this.camera.MediaType.PICTURE
}
this.camera.getPicture(options).then((imageData) => {
// imageData es una cadena que contiene la ruta del archivo
let base64Image = 'data:image/jpeg;base64,' + imageData;
}, (err) => {
// controlar el error.
});
La verdad que el ejemplo es sencillo, pero es lo que nos hace falta para aprender. Después iremos avanzando el ejemplo para darle más funcionalidad.
En primer lugar, tenemos que importar, a diferencia de la mayoría, 2 clases. La primera será “Camera” y la segunda “CameraOptions”.
Posteriormente tenemos que inyectar en el constructor una instancia de “Camera” para que la podamos utilizar en nuestra clase en cuestión. Sencillo…
Ahora, vamos a configurar unos ajustes iniciales que les vamos a dar a la cámara. Para ello vamos a utilizar “CameraOptions” que no es otra cosa que una interface con unos campos por defecto que podemos alterar para después pasárselo a nuestra “camera” y que los use.
Ahora que ya tenemos los parámetros terminados y ajustados como nosotros queremos, basta con que llamando a la función “getPicture” de la instancia de “Camera” que hemos inyectado y pasarle la instancia de “CameraOptions” que hemos creado en el paso anterior para que la cámara se abra con los parámetros que le hemos pasado.
Esta función devuelve una promesa que tenemos que controlar. El “then” de la promesa, que se ejecutará cuando se haya tomado correctamente la captura, traerá consigo, como parámetro, los datos de la imagen. En este caso traerá la ruta donde se ha guardado el snapshoot.
Pero recordemos que también tendremos que controlar el error. Si no, no estaríamos incurriendo en las buenas prácticas de la programación actual.
Pues con todo esto ya hemos terminado de comprender como se usa de manera sencilla. Ahora vamos a ver hasta donde la podemos llevar.
Ahora vamos a ver los campos que tiene internamente nuestra clase cámara y para que vale cada uno.
Este es un campo de la clase CameraOptions que nos permite definir en qué formato queremos recuperar la información de la imagen. Estos formatos está disponibles en: “Camera.DestinationType.*”
Muy similar al anterior, nos sirve para decirle al sistema en qué tipo de formato queremos que se nos devuelva la imagen. Los formatos están disponibles en:
“Camera.EncodingType.*”
Este campo es para decirle a la aplicación que tipo de uso le vas a dar a la cámara. Por ejemplo, vídeo o foto. Los parámetros están disponibles en:
“Camera.MediaType.*”
En caso de que queramos definir explícitamente que cámara queremos usar se la daremos con este campo. Sea la frontal, principal, etc…
Y bueno, hay alguno más pero no me ha parecido conveniente incluirlos.
Ahora vamos con más cositas
Ahora vamos a ver de qué funciones disponemos para darle leña a nuestro componente.
Esta es la función que hemos visto en el ejemplo y es la que nos permite abrir la aplicación de cámara definida en el sistema para poder utilizarla de manera implícita en nuestra aplicación.
Retorna una promesa que tenemos que controlar y que en el “then” de esta traerá, por regla general, los datos de la foto en caso de que todo haya ido correctamente.
Esta función solo está permitida en iOS y nos permite limpiar el buffer de datos que nos aporta la cámara cuando hacemos la foto. Digamos que limpia la memoria posteriormente después de usar la cámara.
Devuelve una promesa que tenemos que controlar para saber si todo se ha realizado correctamente.
Y ya está, solo tenemos esta funcionalidad. Aunque no hace falta nada más, todo se realizado de manera transparente para el usuario y tenemos lo que necesitamos, la captura que acabamos de realizar.
Ahora vamos a especificar un poco más, para aquellos que hayan venido buscando un poco más de información adicional, la configuración fuerte que podemos agregar sobre la cámara.
Como se que algunos de vosotros no les gusta leer, aunque lo recomiendo encarecidamente, por aquí te dejo un tuto en el que puedes aplicar el ejemplo de una forma rápida.
Tu logos deberían de ser una de las partes más importantes en tu estrategia de ASO para tus apps. Si mejoras tu logo recibirás más descargas, y por extensión ganarás más dinero. Por esta razón, hemos creado esta herramienta. Una herramienta para evaluar, puntuar y mejorar tus logos con IA. No te espoileo más, entra en el enlace.
Y sin nada más que agregar, nos vemos en el siguiente artículo. Hasta entonces ¡que vaya bien!