Aitor Sánchez - Blog - Oct. 31, 2023, 10:19 a.m.
¿Necesitas qué tu usuario pueda seleccionar imágenes de su galería? O, quizás ya sabes cómo se usa Photo Library Ionic y lo que te falta es conocer los parámetros de alguna función o campo de clase ¿verdad?
Mi nombre es Aitor Sánchez, soy desarrollador de apps desde 2014, y en este artículo vas a aprender a mostrar la galería de imágenes del dispositivo para que el usuario pueda seleccionar la que quiera utilizar. Claramente, desde el componente Photo Library Ionic.
Pero antes de continuar, esta es la Flutter Mafia. Es mi newsletter donde tu vas a aprender a hacer apps y a ganar dinero con ellas 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.
Bien, pues cómo con todos los componentes externos, tenemos que instalarlos en nuestra aplicación para poder usarlos. Para ello vamos a utilizar las dos siguientes líneas de consola:
ionic cordova plugin add cordova-plugin-photo-library --variable PHOTO_LIBRARY_USAGE_DESCRIPTION="To choose photos"
npm install @awesome-cordova-plugins/photo-library
Vale, esta vez tenemos una variable global definida aquí. Esta será la cadena que muestre el mensaje que tendrá la ventana que aparecerá para seleccionar la imagen:
PHOTO_LIBRARY_USAGE_DESCRIPTION=”To Choose Photos”
Pero tranquilo, aquí en el ejemplo está puesta, pero no es necesario definirla aquí. Es más, no es útil porque no se puede aplicar una traducción directamente. Pero siempre te mostraré todas las posibilidades por si la quieres utilizar.
Una vez realizado el paso anterior, y para poder usar el componente, necesitamos incluirlo en lo providers de nuestra app.
Nota: Si estás usando Ionic 4 o superior, y utilizas el módulo NGX, no es necesario realizar este paso.
...
import { PhotoLibrary } from "@awesome-cordova-plugins/photo-library/ngx";
...
providers: [
...,
PhotoLibrary,
...
]
...
Y, por otro lado, es muy recomendable no incluirlo en los providers del AppModule.ts a menos que lo vayamos a usar en toda la app. Es mucho mejor utilizarlo en los modules del componente que lo vaya a usar. Así mejoraremos los tiempos de carga, los rendimientos y experiencia de usuario.
Ya estamos en disposición de continuar…
La plataforma disponible para poder usar el plugin son las siguientes:
La única que, quizás, está un poco fuera de lugar es el Browser. Pero cómo también tiene un módulo nativo para seleccionar un archivo, pues también se puede usar.
Vale, ahora vamos a ver cómo podemos dar uso al componente. Pero antes de continuar, y cómo en todos los tutos, me gusta incluir aquí un ejemplo y comentarlo después.
import { PhotoLibrary } from "@awesome-cordova-plugins/photo-library/ngx";
constructor(private photoLibrary: PhotoLibrary) { }
this.photoLibrary.requestAuthorization().then(() => {
this.photoLibrary.getLibrary().subscribe({
next: library => {
library.forEach(function(libraryItem) {
console.log(libraryItem.id); // La ID de la foto
console.log(libraryItem.photoURL); // La URL de la imagen, será diferente según la plataforma.
console.log(libraryItem.thumbnailURL); // La URL de la miniatura, será diferente según la plataforma.
console.log(libraryItem.fileName); //El nombre de la imagen seleccionada.
console.log(libraryItem.width); //El ancho
console.log(libraryItem.height); //El alto
console.log(libraryItem.creationDate); //La fecha en la que se crea el archivo.
console.log(libraryItem.latitude); //En caso de que esté geolocalizado, la latitud.
console.log(libraryItem.longitude); //Lo mismo que la anterior, pero para la longitud.
console.log(libraryItem.albumIds); // Un array de IDS de álbumes a los que pertenece esta imagen
});
},
error: err => { console.log('No hay fotos'); },
complete: () => { console.log('Se ha terminado la selección'); }
});
})
.catch(err => console.log('No hay permisos para realizar esta acción'));
Sencillito, ¿verdad?
Y visto esto, ya estamos en disposición de ver las funciones y los métodos por separado.
Seguimos avanzando y ahora le toca el turno a las funciones y métodos. Recuerda que después veremos las interfaces. Así que, si ves algo que no entiendes del todo en los parámetros de las funciones, revisa más abajo.
Bien, ahora veamos la interfaces y clases que hemos ido viendo durante todo el tutorial que tienen una relación directa con esta clase.
export interface LibraryItem {
id: string;
photoURL: string;
thumbnailURL: string;
fileName: string;
width: number;
height: number;
creationDate: Date;
latitude?: number;
longitude?: number;
albumIds?: string[];
}
export interface GetLibraryOptions {
thumbnailWidth?: number;
thumbnailHeight?: number;
quality?: number;
itemsInChunk?: number;
chunkTimeSec?: number;
useOriginalFileNames?: boolean;
includeImages?: boolean;
includeAlbumData?: boolean;
includeCloudData?: boolean;
includeVideos?: boolean;
maxItems?: number;
}
export interface RequestAuthorizationOptions {
read?: boolean;
write?: boolean;
}
export interface AlbumItem {
id: string;
title: string;
}
export interface GetThumbnailOptions {
thumbnailWidth?: number;
thumbnailHeight?: number;
quality?: number;
}
Esta interface es bastante peculiar, nos sirve para extenderla y meter los campos que queramos. Es más, este es si código:
export interface GetPhotoOptions {
}
Cómo puedes ver, no tiene nada.
Esta vez no he encontrado uno que tenga que ver directamente con el componente, pero lo usa en profundidad y es más. En este vemos cómo hace una aplicación completa. Espero que te sirva.
Si te dedicas al mundo de las apps, entiendes que mejorar el logo de una aplicación aumenta sus descargas y, por extensión, el dinero que genera. Hasta ahí bien. Pero Aitor, ¿cómo lo hago?
Mira, hemos creado esta herramienta para ti. Para que puedas evaluar, optimizar y mejorar tus logos y, de manera indirecta, tus ingresos. Se trata de una IA que pone a tu alcance un algoritmo entrenado con todos los logos de las apps de Google Play y categorizados por niveles del 1 al 10. No te espoileo más, entra en el enlace.
Y con esto hemos terminado geniete. Espero haber ayudado a resolver tus dudas y nos vemos en el siguiente artículo. Hasta entonces ¡que vaya bien!