intive Argentina Blog

Cómo utilizar los widgets

Los widgets, en iOS, son una clase de extensión a la que se la refiere con la extensión “hoy”. Al igual que en Android, trabajan como una herramienta para expandir las funcionalidades de tu aplicación y brindar al usuario acciones rápidas y/o datos inmediatos cuando se los necesite. Las funcionalidades de este componente deben ser claras y su información debe estar disponible rápidamente. Por ejemplo, puede ser una herramienta que muestra los números del mercado bursátil, el puntaje de un juego o una checklist interactiva donde el usuario puede explorar y seleccionar. Las operaciones complejas y las acciones que consumen tiempo y los recursos intensivos no son apropiados en este contexto.

 

Para comenzar

Cada tipo de extensión es parte de una aplicación regular. En este caso, nos referimos a la aplicación como la app contenedora. Una app contenedora puede sostener múltiples extensiones (de esta manera puedes tener múltiples widgets para la misma aplicación). Estos son los pasos para agregar una:

  1. Hacer click en el archivo del proyecto.
  2. Agregar nuevo target.
  3. Ir a “Extensiones de Aplicaciones”.
  4. Seleccionar “Extensión Hoy”.

wid1

Luego de hacer eso, un nuevo target y un nuevo storyboard aparecerán en tu proyecto.

wid2

Ahora, miremos el storyboard del widget.

wid3

La vista se ve y se comporta bastante como una vista regular de la app. Uno puede utilizar Etiquetas, Imágenes, Botones y Vistas de Cuadro en el mismo modo normal. Sin embargo, hay unas pocas limitaciones para tener en cuenta. El storyboard debería implementar el auto layout correctamente, de otra manera podría mostrarse con la altura incorrecta. Además, los componentes como el teclado, la cámara, o el micrófono no están disponibles para el uso en este entorno. Tampoco estará disponible cualquier API, framework o propiedad marcada con NS_EXTENSION_UNAVAILABLE.

 

Comunicación con la aplicación principal

El widget es capaz de abrir la aplicación principal y simultáneamente pasar parámetros con el mismo método utilizado para Deep Linking. Esto es útil si deseamos implementar shortcuts o lanzar una acción específica en cualquier momento desde el widget. Por ejemplo, si tu aplicación es de mensajería, el widget podría tener un botón de “Componer”, para poder abrirlo y comenzar a escribir un mensaje de inmediato.

Otra manera de comunicar datos entre un widget y una aplicación contenedora es el uso de NSUserDefaults. Este puede ser utilizado para mantener los datos entre ambas partes sincronizados. Para utilizar esta prestación, deberás crear y configurar tus certificados de desarrollo y perfiles de aprovisionamiento.

Luego, tu target principal deberá tener “App Groups” habilitado. Al hacerlo, te pedirá un nombre único de grupo (ej: group.yourcompany.TodayExtensionSharingDefaults).

wid4

Esto puede ser utilizado para actualizar información en vivo en el widget desde cambios hechos en la app contenedora.
Tips y buenas prácticas

  • Un widget debería estar enfocado en tareas muy específicas. Está diseñado para ser un modo para que el usuario tenga un acceso rápido a información puntual y/o realizar acciones puntuales.
  • Estéticamente, debería verse como perteneciente a “Sección Hoy”. Debería combinarse junto a las “Extensión Hoy” nativas.
  • A diferencia de la app principal, estará mucho más limitada en el uso de memoria. Si el widget utiliza demasiado, será cerrado por el dispositivo.
  • Idealmente, un widget no debería tener tiempos de carga. Si debes mostrar información, utiliza el NSUSerDefaults para mantener data en el caché y que esté lista para ser utilizada. Esto es particularmente ya que el widget no será actualizado hasta la próxima vez que el usuario la vea. Ocasionalmente, el sistema tomará capturas del widget. Cuando el widget se haga visible nuevamente, se mostrará la captura más reciente hasta que el sistema la reemplace con una versión en vivo de la vista.
  • A diferencia de las prestaciones del iOS, ésta debe ser activada por el usuario. En algún momento, la aplicación contenedora debe informar al usuario acerca del widget y darle instrucciones específicas de cómo activarlo.

Esperamos que hayan encontrado interesante el artículo. Happy coding! 🙂

Ezequiel González

Es desarrollador de software en intive – FDV desde 2012 e integra la Brigada iOS. En el pasado, también trabajó como tester. Estudió la carrera de Diseño y Programación de Videojuegos en la Escuela Da Vinci de Buenos Aires. Es aficionado a los libros de terror y ciencia ficción, a las series y, lógicamente, a los videojuegos.

Deja un comentario