Con grandes cambios respecto a la versión anterior, en 2013 apareció iOS7. A pesar se ello,  Apple era consciente que aún estaba un paso atrás respecto Android, debido a las carencias que los usuarios de Android podían disfrutar de serie. Esto producía que los fieles a la manzanita tuvieran que escuchar incómodas críticas del tipo: “Con Android puedo compartir archivos” o “Con Android puedo tener un teclado customizado” y similares.  Así, con con la aparición de iOS8,  Apple incorpora las Extensions. Por un lado como mejora del sistema y, por otro y en gran parte, para terminar con las incómodas frase de “si pero con Android…”. Hoy hablaremos sobre estás utilidades y cómo nos pueden ayudar a aportar un valor extra a nuestra app. ¿Qué son? ¿Para qué podemos usarlas? ¿Qué hace cada una? ¡Vamos a por ello!

Empezaremos definiendo qué son. Se trata de una utilidad (en realidad son 10) que permite extender una funcionalidad de nuestra app para que aplicaciones de terceros la usen. Es código embebido, es decir, va dentro de nuestra app. En ningún caso se podrá subir a la store por sí sola. Siempre vendrá acompañada de una aplicación. La idea es que nuestra app no esté basada en una extensión, sino que demos a modo “servicio” una utilidad que a priori sería sólo nuestra. Por seguridad, tanto la aplicación anfitriona (la que usa nuestra extensión) como la nuestra, no tienen acceso a datos internos de la otra. Como siempre Apple nos facilita unas pautas y guías de uso que tendremos que seguir al pie de la letra. Como hemos adelantado anteriormente, existen 10 Extensiones para aplicarlas en contextos diferentes. Con iOS9 se han añadido 3 nuevas. Cada una de ellas puede potenciar nuestra app.

Share Extension (iOS8)

share extentionEsta es la más conocida, con ella estamos indicando que nuestra app puede recibir archivos de otra aplicación, siempre que use el cuadro de diálogo nativo de compartir. La idea es que recibamos el o los archivos que el usuario ha seleccionado, y a partir de aquí la enviaremos por mediación de algún WebService a nuestro servidor que hará el tratamiento que se requiera. Pongamos un ejemplo: supongamos que mi aplicación es de mensajería y quiero adjuntarle una foto a uno de mis contactos. Ya sabemos que desde la propia aplicación no hay problema, pero queremos hacerlo a través de una tercera, en este caso la galería de fotos. Desde ahí indicamos que se comparte la foto, marcamos nuestra extensión que para este caso, tendrá una pantalla intermedia en la que elegiremos a nuestro contacto, una vez elegido enviamos la foto a nuestro WS indicándole la persona, y este recibirá la foto y la enviará.

Action Extension (iOS8)

action extensionLa idea aquí es más o menos la mismo que Share, con la diferencia que no necesariamente tenemos que enviar el archivo a ningún WebService a no ser que nos convenga por algún motivo. Tenemos la posibilidad  de abrirlo o interactuar con él. Un ejemplo claro sería que nuestra app es un reproductor de audio o vídeo, y tenemos un reproductor con muchas opciones y parámetros y un look diferente. Así que desde un tercero podríamos enviar el archivo y nosotros lo reproduciríamos con nuestros controles y condiciones.

Custom Keyboard (iOS8)

custom keyboardSe le dio mucho bombo a está Extensión y las expectativas eras bastante altas. Sin embargo, aún le falta madurar un poco. Son más las carencias y problemas que aporta, que ventajas que nos ofrece:

  • No hay ningún template en el que basarse, tendremos que diseñar toda la interface, y programar desde cero todo lo que queramos que haga nuestro teclado.
  • No tenemos un acceso o control al bloqueo de mayúsculas, eso quiere decir que deberemos encargarnos nosotros de si lo tiene o no activado.
  • No tenemos la auto-capitalización de manera nativa, si queremos la funcionalidad de tener la primera letra en mayúsculas de cada palabra y cosas similares, dependerá de nosotros.
  • No se puede seleccionar texto.
  • En ningún caso podremos usarlos para campos de tipo secure (contraseñas).
  • No tendremos acceso al texto predictivo que nos ofrece iOS ni el dictado, ya que no tenemos permiso para usar el micrófono.
  • Y para los desarrolladores, ya sabéis que en xCode los campos de textos, podemos decirles si queremos que el teclado que debe aparecer es de tipo numérico, de teléfonos, alfanumérico, decimal, etc, pues…. eso tampoco será posible, nuestro teclado sólo tendrá un layout (una vista o capa), otra cosa es que luego habilitemos un botón para que se transforme, pero inicialmente aparecerá la vista principal.

Aún con todos estos contras, puede ser una buena opción si nuestra app va dirigida a un público infantil, o para personas con problemas de accesibilidad.

Document Provider (iOS8)

document providerYa que por seguridad no podemos tener acceso a archivos internos de aplicaciones de terceros, con esta extensión abrimos un canal bidireccional para tener acceso a los archivos de las aplicaciones que usen esta extensión. Usando como intermediario iCloudDrive, guardaremos los archivos que nos interesen en la nube, y tanto nosotros como otras apps tendrán acceso. Pero ¡ojo! no lo estamos compartiendo ni enviando, el archivo pertenece a la app original pero podemos visualizar y editarlo, sincronizándose automáticamente en todas.

Photo Editing Extension (iOS8)

photo editingAunque no lo parezca, es muy potente, siempre y cuando nuestra app sea para editar fotos o vídeos. Siempre han habido aplicaciones de edición de imágenes, pero usarlas en según que casos era un poco engorroso. Por ejemplo, si yo quiero enviar una foto editada por email, antes de iOS8, el flujo normal hubiera sido:

  • Abrir la app de edición.
  • Cargar la foto de la galería.
  • Buscarla e importarla.
  • Editarla a nuestro antojo.
  • Guardarla de nuevo en el carrete.
  • Y ya desde aquí todas las apps tienen acceso, en este caso e-mail.

Ahora, con esta extensión lo que se pretende es ahorrar todos estos pasos y como no iOS sólo permite editar desde el carrete. Habilitamos esta extensión e implementamos una interfaz adecuada a lo que queramos o nos convenga, puede ser la misma de nuestra app o con funcionalidades específicas. Siendo un ViewController aquí podríamos tener una navegación, una TabBar para gestionar diversos contextos o pantallas, tener botones para guardar directamente el resultado en el carrete, guardarlo en nuestra cuenta, etc.  Si quisiéramos podría ser una app propiamente dicha.

Volviendo al ejemplo anterior, ahora estoy en el carrete (o incluso acabo de hacer una foto nueva con la cámara) la edito con mi extensión (hago lo que quiero, guardándola o no) , la enlazo con ShareExtension y la adjunto en un email u otra app. Sin darnos cuenta hemos hecho todo lo anterior, desde la galería de fotos, no hemos tenido que entrar ni salir a ningún sitio.

Audio Unit Extension (iOS8)

audio unitCon la idea aprovechar el mercado de la música, esta extensión es igual que el PhotoEditing pero dedicada sólo archivos de audio y para apps específicas de música o audio. Vendría a ser una mezcla entre Share y Action. Tendremos, como en todas las extensiones, que crear un layout donde pueda gestionar las opciones que le proporcionemos.

Las apps de música que sirven para masterizar o mezclar suelen ser de pago y  tienen todas in-app purchase para utilizar efectos y filtros nuevos. Con esta extensión permitimos que apps de terceros, ya sean nativas GarageBand o de la competencia, tenga acceso a dichos efectos y filtros de nuestra marca. Si el usuario sabe que puede usar múltiples funciones y funcionalidades de pago o gratuitas en otras apps, esto puede hacer que esté más abierto a comprarlas

SpotLight Index Extension (iOS9)

spotlightSpotLight es el motor de búsqueda nativo. Se integró en MAC OS Lion y de manera pública o privada ha estado también desde iOS5. Es muy útil cuando quieres abrir una app o buscar algo ya que, como solemos tenerlo todo en carpetas para que esté bien ordenado, luego se nos puede hacer complicado buscar o abrir algo en concreto. En iOS usarlo es tan sencillo como desde la pantalla de la home hacer swipe hacía abajo, o buscar la vista que está más a la izquierda, y nos aparece un práctico buscador.

Con iOS9,  Apple ha decidido darnos una API para que nuestra app pueda indexar resultados para la búsqueda. Tendremos un layout diseñado como mejor nos venga, marcaremos los texto que queremos que aparezcan, podría ser  nombres de usuarios que usen nuestra app, títulos de secciones o productos, etc. Esto nos va a ser muy útil, ya que si por ejemplo nuestra app es de mensajería podríamos indexar la pantalla de chats, de manera que al buscar “Luis” nos salga el chat de esa persona. Las posibilidades y opciones son amplias. Lo único que esta vista personalizada que hemos creado para mostrar el contenido en cuestión, no podrá tener navegación ni acciones asociadas.

Today Extension (iOS8)

today extensionEl Today es un widget, es decir, un pequeño programa o aplicación ejecutados por un motor  con el fin de dar fácil acceso a funciones frecuentes usadas y proveer información visual. Como en todas las extensiones, debemos maquetar nuestra vista para tener una interfaz adecuada. Viene a ser muy parecida al SpotLight con la diferencia que no es necesario buscar algo, ya que aquí somos nosotros los que marcamos el contenido que se debe mostrar, y tenemos la opción de tener navegación, libertad para hacer animaciones,  transiciones de pantallas y cualquier cosa que se pueda hacer en una app.

Tener en cuenta que el fondo será el nativo, es decir un fondo negro con un blur aplicado, aunque si que podríamos tener una vista con otro color. Dicha información está siempre sincronizada con nuestra app, podemos estar tranquilos en mostrar lo último que tenga nuestra app. Pero tiene algunas cosas que hay que tratar “con cariño”: llamadas externas a una web o nuestro propio WebService para cargar datos nuevos o fotos. Y a tener en cuenta para desarrolladores, el tratamiento de aparición no es el usual de las aplicaciones, así se nos hace un poco complicado saber cuándo aparece, ya que está siempre en memoria y tendremos que tratar el tema de refrescos con cuidado.

Siendo un Widget y basándonos en su definición la usaríamos para dar visibilidad o bien alguna funcionalidad o algún contenido. Las posibilidades son amplias: el estado del tiempo si nuestra app va sobre eso, últimos resultados deportivos, una noticia, algún estado en concreto de nuestra app, etc.

Content Blocker Extension (iOS9)

content blockerAplicable a Safari y a los WebViews que use nuestra app, con esta extensión lo que se pretende es gestionar el contenido que se visualiza de una web. Tendremos un archivo JSON en el cual marcaremos unas excepciones y reglas con el fin de evitar o filtrar: CSS, JavaCript, determinaos plugins o publicidad. Usándolo, lo que hará el sistema cuando carguemos una web, será:

  • Acceder a la URL
  • Descargar el código
  • Filtrar el contenido respecto a nuestro JSON de restricciones.
  • Interpretarlo y devolverlo en formato página web.

Nos surgen varias dudas respecto a esta extensión ¿e inhabilita un CSS entero o parcial? ¿qué pasa con las empresas que emiten publicidad? ¿podríamos eliminar sólo una publicidad específica o es algo genérico?Como vemos en este ejemplo, al eliminar toda la barra de navegación, hemos perdido el acceso al carrito.

Content_1ios-9-content-blocker-results Content_2ios-9-content-blocker-results 2

Tendremos que investigar e inspeccionar bien esto, para saber si se puede “personalizar” o es algo muy genérico. Dependerá mucho de nuestra App, pero digamos que tenemos un Buscador de terceros, y que en algún momento dado queremos mostrar la ficha del producto que viene de la web del proveedor, es interesante saber que podemos eliminar todos los accesos y dejar sólo lo que nos interesa que en este caso sería la foto del producto, título y descripción.

Conclusión:¿Debemos usarlas? ¿Es favorable?

En principio sí, pero como todo en esta vida hay que tener un poco de sentido común. Si nuestra app está dentro de alguno de los tipos específicos, si da pie a que se use,  o procede hacerlo y tiene sentido, pues lo raro sería no usarlo. Hay que pensar que una extensión no define nuestra app. Esta tiene su función, debe hacer muy bien lo suyo, y sólo añadiremos la extensión para darle más valor y uso. Además, el hecho de que una app de terceros se vean forzados abrir la nuestra, porque somos mejores en algún apartado, ha de ser un punto a favor. Si el usuario no acaba de fidelizarse con nuestra app es posible que si le ofrecemos un extra, termine haciéndolo. Uno de los secretos para tener una app exitosa, además de que sea buena es conseguir enganchar, que el usuario no pueda “vivir sin ella”, es decir, aumentar el engagement.  Cuantas más opciones y funcionalidades le demos, mayor probabilidad tendremos de conseguirlo.

Autor del post: Omar Fazal

Recommended Posts

Leave a Comment