Guías
Trending

Guía de integración de Siri Shortcuts en iOS 12

Las apps se hacen más inteligentes gracias a Siri, informándole de la actividad de nuestros usuarios

Resumen del artículo

  • Aprende en esta guía a cómo integrar Siri Shortcuts en tu app, tanto en el registro de actividades como con las nuevas intenciones de Siri. Paso a paso, con un ejemplo real, para que entiendas cómo hacer la implementación y puedas llevar a tu app mucho más allá de la mano de Siri como la IA del sistema que aprende del uso que hacen nuestros usuarios de la app.

Hace unos días que terminó la WWDC 2018 y nos ha dejado no pocas cosas nuevas, ARKit 2, Create ML, Siri Shortcuts… y es esta última una de las que más expectativas ha levantado entre la comunidad de desarrolladores de Apple.

Según nos contaron en la Keynote los Atajos de Siri iban a ser una forma en las que nuestras apps podrían sugerir al usuario acciones de manera predictiva. Para ello iban a proporcionar a los desarrolladores dos APIs con las que entrenar a Siri para que aprendiera sobre las costumbres de uso de nuestras apps y de esta manera hacer las sugerencias de una manera inteligente.

Si queréis saber mejor cómo funciona a nivel teórico y conocer su funcionamiento, os aconsejamos leer el artículo que nuestro compañero Julio César Fernández ha escrito para Applesfera, que podéis leer pinchado aquí.

Aquí os vamos a contar la parte práctica, sobre cómo añadir los **Shortcuts a vuestras apps**. Para ello vamos a usar un servicio ficticio de alquier de vehículos con conductor llamado Ubify.

El servicio de Ubify tiene como particularidad que sólo permite a sus usuarios solicitar traslados a dos destinos: Su casa o su trabajo. Al añadir Siri Shortcuts a la app conseguiremos que Siri sea capaz de sugerirle al usuario uno de estos traslados justo en el momento en el que lo vaya a necesitar.

¿Y cómo lo consigue Siri?

No, no es magia ni nada por el estilo. Todo se reduce al uso de técnicas de Machine Learning unido a que nuestra app le pasará a Siri la información detallada de uso cada vez que un usuario solicite un traslado. Concretamente:

  • Lugar de origen.
  • Destino.
  • Qué coche quiere usar.
  • La forma de pago.
  • La hora a la que solicita el traslado.

Con cada donación de datos que hagamos, Siri irá aprendido cada vez un poco más acerca de cuándo pide el usuario un traslado, dónde lo pide, a qué destino se dirige… Hasta que pasado un tiempo Siri sea capaz de determinar con precisión los momentos en el que usuario va a necesitar un traslado con Ubify y se anteceda a él sugiriendo esta petición para convertirla en un comando de voz a registrar.

Shortcuts. NSUserActivity o Intents

La manera más sencilla de crear los Shortcuts para Siri es mediante el uso de NSUserActivity. Es la misma API que se emplea para incluir elementos en las búsquedas de Spotlight o para continuar la ejecución de una app entre plataformas mediante Handoff.

Los intents (o intenciones) son los manejadores que emplea Siri para las distintas situaciones o contextos en los que la podamos invocar para dar una respuesta más personalizada al usuario. Antes teníamos un grupo de intents predefinido (tareas, reservas…) pero gracias a los Shortcuts esta lista se expande de forma considerable.

Pero ojo, no están a nuestra disposición para que Siri nos entienda hablando, como haríamos al integrar SiriKit. Los intents son la forma que tenemos ahora de mejorar la actual API NSUserActivity. Una forma más completa y precisa de informar a Siri (como IA del sistema) de la actividad de nuestra app hasta acciones finales que, convertidos en comandos de voz, permitirían una ejecución en segundo plano de dichas acciones finales.

¿Cuál eligo?

Primero hay que definir qué necesitamos, cual es la opción que mejor se adapta a nuestra app. Durante la sesión Introduction to Siri Shortcuts de la WWDC nos ayudaban a decidir gracias estos consejos.

Usa NSUserActivity si:

  • Necesitamos abrir algo en nuestras app.
  • Representa elementos que mostramos en Spotlight o compartimos con Handoff.

Por el contrario usaremos intents si:

  • La ejecución no necesita de la app.
  • Incluimos respuesta de voz personalizada o una UI a medida a través de una extensión.
  • Vamos a incluir predicciones granulares.

Aunque también hay que decir que los dos tipos pueden cohabitar en nuestra app sin problemas.

Empezando con NSUserActivity

Vamos a registrar en la app de Ubify una actividad que le permita abrir al usuario nuestra app desde la búsqueda con Spotlight. Esto no tiene nada que ver directamente con los atajos como tal, porque es una función que ya existía en versiones anteriores de iOS 11 y que apps como WhatsApp o Twitter ya registran. Pero estos registros de actividad pueden permitir en iOS 12 crear Shortcuts.

Lo primero que tenemos que hacer es registrar el NSUserActivityType al que vamos a asociar nuestro Shortcut. Abrirmos el archivo Info.plist del proyecto e incluimos las siguientes linéas.

Una vez añadido el tipo tenemos que añadir una función en la clase AppDelegate que será la encargada de gestionar las peticiones que nos lleguen desde Spotlight o Siri a nuestra app. La forma en que será abierta nuestra app cuando se toque el acceso directo creado por el registro de la actividad.

Ahora que tenemos todo el código necesario para manejar los Shortcuts que vengan mediante NSUserActivity sólo queda registrarlo en Siri, así que nos vamos a la clase RideMapViewController y en la fución viewDidLoad asociamos la propiedad userActivity del UIViewController con uno de nuestra creación.

La propiedad bookRideActivity la podemos encontrar en la extensión de NSUserActivity que se encuentra en el framework UbifyKit del proyecto.

Con esa simple asignación hemos registrado la actividad en el sistema y ahora esta podrá ser usada por el usuario para crear un shortcut. Es cierto que se limita abrir la app sin más, pero si necesitamos más interacción con el usuario podemos recurrir a los intents. Hay que entender que esta funcionalidad que hemos visto ya existía en versiones anteriores de iOS y nada cambia, aunque el uso de los intents sí es exclusivo de iOS 12.

Seguimos con intents

Los intents vieron la luz en iOS 10 y al principio estaban circunscritos a unos ámbitos de ejecución muy concretos, sólo servian para manejar tareas, enviar mensajes, hacer reservas… lo que son los dominios de integración de apps de terceros con la librería SiriKit. Pero no podíamos crearlos como ficheros de recursos en Xcode. Solo se podían usar dentro de una implementación de SiriKit que ya los traía pre-creados y configurados. Pero con la llegada de los Shortcuts este abanico se ha ampliado bastante y ahora podemos crear intents personalizados.

Vamos a ver como Apple nos permite a los desarrolladores elegir entre una plantilla bastante amplia alguno que se ajuste a las acciones que queremos donar a Siri, y la verdad es que resulta muy difícil no encontrarlo.

Para deficir nuestro intent personalizado vamos a añadir un nuevo archivo al proyecto, concretamente tenemos que añadir un SiriKit Intent Definition File

Cuando seleccionamos el nuevo archivo vemos que hay 4 áreas tal y como veís en la imagen inferior. Estas 4 áreas conforman los metadatos del intent.

1. Lista de los Intents Personalizados: La entrada que está con un nivel de sangría mayor se corresponde con la respuesta que obtendremos al invocar el intent. En nuestro caso este sería la petición de un coche y la respuesta, el tiempo que va a tardar en llegar, por ejemplo.

2. Definición del intent: Aquí le daremos un nombre y sobre todo y más importante, establecemos la categoría a la que pertenece. Esto influye en la forma en la que iOS interactúa con nuestro shortcut y en como Siri nos habla sobre él.

El checkbox titulado User confirmation required hace que Siri pida confirmación al usuario antes de invocar la acción, evitando así ejecuciones involuntarias.

3. Parámetros del intent: Los datos que le suministramos a nuestro intent que también donaremos a Siri para que pueda ir aprendido acerca del uso que el usuario hace de nuestra app. Podemos elegir el tipo de cada uno de los parámetros entre una lista definida, como puede ser Location, Person… Si nuestro tipo de parámetro no está en la lista podemos indicar que es de tipo custom.

4. Tipos de shortcuts: Aquí definimos los diferentes tipo de shortcuts que queremos sugerir a nuestros usuarios. Para cada atajo podemos definir un título y un subtítulo que pueden contener cualquiera de los parámetros que hayamos elegido para él. Mención especial para el checkbox con el título Supports background execution. Si lo marcamos el shortcut no necesitará abrir la app en ningún momento.

Generación de código

Una vez que hayamos definido nuestros intents tenemos que establecer en qué target vamos a generar el código para ellos. Esto se hace en la sección Target Membership. Lo recomendable es generarlo sólo en uno de los targets y para ello elegimos la opción Intent Classes en el target seleccionado y la opción No generated Classes para el resto de targets tal y como se puede ver en la imagen inferior.

Entrenando a Siri

Ya tenemos listos nuestros shortcuts para usarlos con NSUserActivity y con intents. Ahora es momento de que nuestra app empieze a pasarle a Siri información sobre su uso. Para ello tenemos que hacer donaciones mediante la función donate de la clase INInteraction. En nuestro app lo haremos cuando el usuario solicite un traslado.

En cuanto el usuario lo haya solicitado ejecutamos la función performSiriDonation(with:) de la clase RideMapViewController.

Estos datos se los pasamos a Siri con la clase BookRideIntent que ha sido generada en la definición de nuestro intent. Como podéis ver las propiedades que establecemos son las que hemos definido en la sección Parameter del archivo de definición del intent.

Con cada donación que hagamos, más aprenderá Siri acerca del uso de nuestra app y pronto será capaz de hacer recomendaciones al usuario.

¿Y qué pasa si el usuario cancela el traslado?

En este caso tenemos, o quizá habría que decir debemos, indicarle a Siri que debe eliminar esa “sugerencia” o registro de actividad pues no se ha completado.

La clase RideMapViewController tiene la función que se ejecuta cuando el usuario pulsa en el botón Cancelar el viaje, dicha función recibe como parámetro el identificador del shortcut. Dicho identificador lo hemos obtenido en el momento de la donación.

La propiedad identifier pertenece a la clase BookRideIntent y de esta manera podemos distinguir entre las diferentes donaciones que vayamos haciendo a lo largo de la vida de la app.

Asociar un Shortcut a un Comando de Voz

Acabamos de hacer la reserva en la app, hemos hecho la donación a Siri y vemos un botón en la app que pone “Añadir a Siri”. Un momento, ¿no lo habíamos añadido ya? Sí, hemos añadido la información, pero además, Siri Shortcuts nos permite asociar un comando de voz a un shortcut determinado.

Imaginad que hemos reservado un traslado para ir a trabajar en un coche executive y que lo vamos a pagar con Apple Pay. Pues bien, todo esto lo podemos asociar a un frase, que cuando se la digamos a Siri, nos pedirá un coche executive para ir al trabajo y que pagaremos con Apple Pay, como si hubiéramos hecho esa selección dentro de la propia app.

Todo esto que puede sonar un poco complicado es de los más sencillo gracias a que Apple nos da hecho todo, y cuando digo todo, es todo. Nos limitaremos a presentar en pantalla un INUIAddVoiceShortcutViewController al cual le pasamos un parámetro con un INShortcut que contiene el BookRideIntent que hemos donado a Siri.

Lo que ocurre en esta vista nos llega de la mano de su delegado, implementado con el protocolo INUIAddVoiceShortcutViewControllerDelegate.

Gestionando los Shortcuts

Para poder manejar los shortcuts que nos lleguen vamos a usar intents, así que tenemos que añadir dos nuevos targets a nuestro proyecto: un Intent y un IntentUI, que tendrá la vista personalizada con la información para el usuario

El código con la gestión del intent se encuentra en la clase BookRideIntentHandler que encontraréis en el target UbifyKit. Dicha clase implementa el protocolo BookRideIntentHandling que fue generado en el momento de la definición de nuestro intent personalizado. Dicho protocolo tiene dos únicas funciones, confirm y handle.

A la función confirm se la invoca en el momento en el que el usuario pulsa sobre el icono de nuestro shortcut en Spotlight. Es ese momento es cuando debemos comprobar y podemos volver a ejecutar ese shortcut. En nuestro caso asegurando que el tipo de coche esté disponible, que el método de pago tenga fondos, etc…

Una vez que hemos verificado todo informamos del resultado de la comprobación, bien sea correcto o si hemos encontrado algún error, mediante el closure incluido como parámetro.

En este momento Siri es cuando ve que tenemos una UI personalizada para este intent, así que la muestra en pantalla indicándole que se encuentra en estado ready. Como hemos indicado que nuestro intent es de tipo Book, Siri añade un botón con el título Reservar bajo nuestro interface. Este texto varía en función del tipo de intent que hayamos indicado.

En función del estado debemos presentar una información u otra. Al encontrarnos en el estado ready le presentamos el resultado de las comprobaciones previas, en este caso que el coche se encuentra disponible.

Cuando el usuario pulse en el botón Reservar Siri invoca a la función handle de la clase BookRideIntentHandler y es en este momento es donde tenemos que hacer la reserva del traslado. Al igual que en confirm, el resultado se pasa en el closure que hay en el parámetro de la función.

En este punto aprovechamos para establecer los valores de la case BookRideIntentResponse con el resultado de la reserva del traslado, y que presentaremos al usuario. Tras decirle a Siri que la reserva ha ido correctamente, esta le dice al IntentUI que su estado pasa a success así que extraemos toda la información de BookRideIntentResponse y la presentamos.

¿Os acordáis cuando hemos definido nuestro intent? ¿Recordáis que he mencionado que cada intent de la lista tenía debajo una entrada con algo más de sangría? Pues ese es BookRideIntentResponse y al igual que al intent también podemos decirle qué propiedades tiene. Incluso definir una serie de resultados predefinidos, ya sean de éxito o de error.

¿Cómo puedo probar los Shortcuts?

Claro, uno piensa que si nuestro shortcut te sugiere un coche de alquiler cuando estamos en una determinada localización vamos a tener que desplazarnos a dicho lugar para probarlo, pero no. Apple ha pensado en todo y nos da una forma muy sencilla de provocar que Siri nos sugiera nuestro shortcut: vamos a los Ajustes de nuestro dispositivo iOS y pulsamos en la sección Desarrollador. Si hacemos scroll hasta el final veremos dos nuevas opociones que tendremos que marcar.

  • Display Recent Shortcuts.
  • Display Donations on Lock Screen.

Beta. Recordad que esto es una Beta.

Siri Shortcuts es un API que se hizo pública hace unos días (literal y metafóricamente hablando) y que se encuentra en fase Beta de desarrollo por lo que puede haber cambios de aquí a que salga en producción junto con iOS 12.

Durante el desarrollo de la app que acompaña al artículo pudimos ver cómo Siri dejaba de responser a los comandos por voz y comprobamos que no era el único al que le ocurría. Así que si me permitís os comento un par de cosas al respecto:

  1. Si durante vuestras pruebas veis que algo no funciona y habéis revisado vuestro código varias veces, acudid a los foros de desarrollo de Apple para ver si hay alguien más en vuestra situación.
  2. Intentaré en la medida de lo posible ir actualizando este artículo así como la app que le acompaña, con cada Beta que Apple vaya publicando detallando los cambios que haya encontrado.

Podeis descargar la app de ejemplo que acompaña al artículo en este repositorio de GitHub. Además necesitáis tener instalada la última versión de la beta de Xcode 10.

Conclusión

Las empresas tecnológicas se han dado cuenta de algo: que el ser humano es un animal de costumbres y somos muy predecibles. Por eso tanto Google, Facebook, IBM, Microsoft o Apple han implementado en sus respectivos sistemas formas de entender qué hacemos en ellos y adelantarse a nuestras necesidades con el uso del tan mencionado Machine Learning.

En el caso de Apple, han metido esto en una coctelera, le han añadido la seguridad y privacidad marca de la casa y han creado Siri Shortcuts.

No puedo más que recomendaros que lo implementéis en vuestras apps lo antes posible ¿Os imaginaís a uno de vuestros usuarios viendo en la pantalla de bloqueo un sugerencia de vuestra app de algo que iba a hacer ahora mismo? Nosotros ponemos las donaciones, y el Machine Learning y Siri como IA de los dispositivos lo pone Apple.

Así que ahora, ya sabéis lo que toca: un saludo y Good Apple Coding.

Etiquetas

Adolfo Vera

Me gustan las camisetas y las zapatillas // Swift + UX/UI en sistemas Apple // Ahora @seeyuu_app // Creador de @GetPomodoroApp · @MADatBUS · @GetMeteo y...

Artículos relacionados

Close
Close