Xamarin: Plugins, la manera más fácil de ahorrar código

Los desarrolladores buscamos siempre hacer las cosas más simples, y hacerlas simples implica más funcionalidad con menos código. Después de conocer los plugins en Xamarin y haber jugado un poco (o bastante) con ellos, ¡debo admitir que me convencieron! Así que, ¿por qué no contárselo al mundo? Acompáñenme a ver este mega tip con más detalle. Are you ready?

El código compartido en Xamarin

Si ya has escuchado hablar de Xamarin, seguramente te has topado con algún gráfico como este:

Enfoque de Xamarin Xamarin approach

¡La cantidad de código que podemos colocar en la caja del código compartido es tremandamente enorme!

Nuestras clases modelo, la implementación de las reglas del negocio, llamadas a servicios web, accesos a bases de datos, e incluso las vistas de nuestra aplicación (en el caso de Xamarin.Forms) podrán ir guardadas cómo código compartido en estas cajas mágicas, ya sean envueltas como PCLs o Shared Projects.

Siempre se puede mejorar

Si algo he aprendido en esta industria de la vida, es que todo puede mejorar.

La manera de implementar ciertas características en nuestras aplicaciones que están ligadas al uso de APIs específicas generalmente para el manejo de hardware es un poco más pesada de lo que debería ser, ya que debemos escribir dicha lógica 3 veces. Algunos ejemplos de APIs que no se pueden compartir entre plataformas nativamente:

Specific APIs

Las 3 plataformas tienen más o menos las mismas características, pero la manera de implementarlas en los 3 lados es muy distinta. Esto supone que es código no reutilizable, es decir, que iría a las cajas de código específico de plataforma, haciéndonos la vida un pelín más difícil y reduciendo nuestro código compartido, que es nuestro principal objetivo.

Veamos un ejemplo:

Si quisiéramos agregar la característica de Text to speech en nuestra app, tendríamos que escribir algo más o menos así:

En el proyecto iOS

En el proyecto Android

En el proyecto WP

La característica es la misma, pero lamentablemente estaríamos resignados a escribir toodo este código específico en las cajas pequeñas de nuestro proyecto :/.

Viendo esto, ¿no sería mejor que en vez de escribir todo ese montón de código pesado y duplicado, podríamos escribir un solo "código genérico" y que luego alguien más se encargue de hacer el resto por nosotros? De eso se tratan los plugins en Xamarin :D.

La solución utilizando plugins quedaría así:

Sí, así es, ¡ese es todo el código que necesitas! Gráficamente lo que está pasando por atrás es algo como esto:

Plugin approach

Solo le decimos a nuestra nueva API que hable, ¡y habla! Así de delicioso :P.

¿Y eso cómo se cocina, viejo?

Realmente no es necesario que te aprendas cómo funcionan por detrás todos estos juguetitos, pero si eres curioso o tienes ganas de hacer tu propio plugin más adelante, puedes ver su código fuente en Github ¡y hasta aportar a ellos! Aquí unos enlaces ;)

Lo único que necesitas entender es que un plugin es solo un pequeño paquetillo (unos cuantos assemblies) para tu proyecto que te permitirá agregar funcionalidad multiplataforma a tu solución, ahorrándote muuucho tiempo y esfuerzo. Ahora veremos cómo lo logramos.

Bueno, entonces, ¡a comer!

¡Vamos a ver un poco de código! Agarren bien su teclado y síganme :P. Para este ejemplo he escogido el Media Plugin, hecho por el gran James Montemagno. Este plugin nos permite trabajar con la cámara y la galería de una manera muy transparente.

Si han leído ya mi anterior artículo sobre Cognitive Services, pudieron ver que el código específico para hacer uso de la cámara en Android era un poco más extenso de lo que quisiéramos. ¡Imagínense eso 2 veces más! Pero tranquilos, ahora veremos cómo ahorrarnos tantos dolores de cabeza ;).

Una vez abierto nuestro Visual Studio, crearemos una solución con el template de Blank Xaml App (Xamarin.Forms Portable).

Forms Xaml App Template

La interfaz que usaremos será realmente sencilla, solo tendremos un Button para acceder a la cámara y un control Image para mostrar la imagen recién tomada. Nuestro archivo MainPage.xaml nos va a quedar más o menos así:

Ahora, procederemos a instalar nuestro plugin. Será tan fácil como: clic derecho a la solución > Manage Nuget Packages > Buscamos Xam.Plugin.Media y lo instalamos en toda la solución (asegúrate bien que estás seleccionando todos los proyectos). Así:

Installing Media Plugin

Una vez completada esta acción, ya tenemos todo listo para hacer magia :D.

En nuestro archivo MainPage.xaml.cs pondremos un método que nos servirá para la captura de la imagen, solo agregando lo siguiente:

Así de simple, ¡prácticamente gratis! ¿Cuánto te cuesta?, ¿cuánto te vale? 2 líneas de código. ¿No es genial? Hasta me di el lujo de ponerle 2 líneas más para manejar permisos y que no quede tan cortito :P.

Y como si esto fuera poco, puedes aplicarle ciertas variaciones a la captura, como indicarle de qué tamaño la necesitas, escoger si la guardarás en la galería, el nombre con el que quieres guardarla y otras cuantas cosas más. ¡Ah! También funciona para videos y obtención de archivos desde la galería. Tengo que admitir que soy un fan de los plugins, y en especial de este ;).

Las últimas 2 líneas de código solo sirven para mostrar la imagen capturada en nuestro control Image y ver que realmente funciona.

¡Listo! Estamos preparados para desplegar nuestra aplicación.

¡Resultados!

Veamos cómo nos quedó...

Xamarin.Android Plugin Android

UWP Plugin UWP1 Plugin UWP2

La demo de iOS no tardará.

¡Perfecto! 100 % real no fake :D

Buen provecho

Espero que les haya gustado estos nuevos juguetitos que les acabo de mostrar y que le saquen el máximo provecho posible :).

Por cierto, quiero resaltar que todos estos componentes no han sido creados por Xamarin, sino por la gran comunidad de desarrolladores que, desinteresadamente han contribuido con el mundo aportando su granito de arena.

Además, debes saber que la gran mayoría de estos plugins funcionan no solamente para Xamarin.Forms, sino también para Xamarin tradicional.

Así que, no tengan miedo y ¡pónganse a jugar con ellos! Estoy seguro que se enamorarán tanto que querrán hacer su propio plugin y seguramente pronto veré su contribución a esa larga lista de componentes extraordinarios para los desarrolladores Xamarin :D.

El postre

Les dejo un sabrosísimo artículo escrito por el gran James, donde explica grandiosamente puntos muy importantes en este tema.

¡Nos leemos!

La solución completa de este artículo aquí.