Home » Análisis » Siri, esto es exactamente lo que podrá hacer en iOS 10
Siri iOS 10

Siri, esto es exactamente lo que podrá hacer en iOS 10

El artículo que dedicamos a hablar sobre cómo funciona SiriKit y la integración de Siri en iOS (que podéis leer aquí) ha sido uno de las más leídos en los últimos meses. Sin duda hay mucho interés en saber cómo podemos integrar Siri en nuestras apps y, conociendo sus limitaciones impuestas en esta primera fase de implementación, también hay ganas de saber si nos merece la pena el esfuerzo o realmente nuestra app no podría ser denominada “elegible” para integrar Siri.

A continuación detallamos la información exacta de dominios de intención en los que Siri podrá ser implementada en esta primera fase con iOS 10.0:

Voz sobre IP

SiriKit puede ser usado para manejar aplicaciones de voz sobre IP sin tener que entrar en el contexto de la propia aplicación, con el objeto de iniciar llamadas de voz, llamadas de vídeo o consultar el histórico de llamadas en esa app por parte del usuario.

  • Comenzar una llamada de voz: Protocolo INStartAudioCallIntentHandling, intención en objeto INStartAudioCallIntent y respuesta en el objeto INStartAudioCallIntentResponse.
  • Comenzar una llamada de vídeo: Protocolo INStartVideoCallIntentHandling, intención en objeto INStartVideoCallIntent y respuesta en el objeto INStartVideoCallIntentResponse.
  • Consultar el histórico de llamadas: Protocolo INSearchCallHistoryIntentHandling, intención en objeto INSearchCallHistoryIntent y respuesta en el objeto INSearchCallHistoryIntentResponse.

Si la app integra la nueva API CallKit, podrá conectar la llamada a la app de teléfono del propio iPhone (como hace ahora Facetime) lo que le permitirá realizar toda la operativa de invocar la llamada y realizarla fuera del contexto de la app.

Si se van a soportar todas las opciones puede usarse alternativamente el protocolo NCallsDomainHandling.

Mensajería

Siri también puede integrarse con apps de mensajería de terceros, usando dos servicios bien diferenciados. Por un lado, el envío de mensajes a través de la app, bien con los contactos del dispositivo o los que tenga la propia app (si tiene una agenda independiente al sistema). También permitirá buscar mensajes en la app a través de varios datos clave como fechas o usuarios.

  • Enviar un mensaje: Protocolo INSendMessageIntentHandling, intención en objeto INSendMessageIntent, respuesta en el objeto INSendMessageIntentResponse.
  • Buscar mensajes: Protocolo INSearchForMessagesIntentHandling, intención en objeto INSearchForMessagesIntent, respuesta en el objeto INSearchForMessagesIntentResponse.

Las búsquedas pueden ser dentro de cualquier contexto de: “muéstrame los mensajes que me envío Antonio la semana pasada”. Nuestra app deberá ser capaz de entender los rangos de fecha derivados de la contextualización gramatical.

Si se van a soportar todas las opciones puede usarse alternativamente el protocolo INMessagesDomainHandling.

Búsqueda fotográfica

Si tenemos una app de fotografía podemos buscar cualquier fotografía en nuestra app por diferentes criterios y devolverla como respuesta. Igualmente, se puede invocar un slideshow de fotos o, en caso concreto, incluso pedir la muestra de una única foto (si el criterio es tan exacto como para devolver una sola fotografía de resultado).

  • Buscar fotografías: Protocolo INSearchForPhotosIntentHandling, intención en objeto INSearchForPhotosIntent, respuesta en el objeto INSearchForPhotosIntentResponse.
  • Mostrar una fotografía o pase de las mismas: Protocolo INStartPhotoPlaybackIntentHandling, intención en objeto INStartPhotoPlaybackIntent, respuesta en el objeto INStartPhotoPlaybackIntentResponse.

Se recomienda que las fotos se devuelvan en una extensión de la propia app, dentro de la tarjeta de Siri que da respuesta a nuestra petición, y no abrir la app para mostrar el resultado.

Si se van a soportar todas las opciones puede usarse alternativamente el protocolo INPhotosDomainHandling.

Pagos

En cuanto a pagos, no solo podemos enviar dinero a través de una app a una persona, también podemos pedírselo. La condición es que nuestra app ofrezca un servicio de pago directo de usuario a usuario.

Al igual que en el caso de las llamadas, la persona a la que enviamos un pago o a la cual se lo reclamamos, puede estar en la agenda del dispositivo o en una agenda independiente que disponga la app y que se proporcione al sistema mediante un diccionario personalizado.

  • Enviar un pago a un usuario: Protocolo INSendPaymentIntentHandling, intención en objeto INSendPaymentIntent, respuesta en el objeto INSendPaymentIntentResponse.
  • Reclamar un pago a un usuario: Protocolo INRequestPaymentIntentHandling, intención en objeto INRequestPaymentIntent, respuesta en el objeto INRequestPaymentIntentResponse.

Es importante entender que los pagos requerirán de una confirmación por parte del usuario antes de ser realizados, en todas las ocasiones. Así mismo, en caso de invocar estos servicios desde el dispositivo bloqueado, el sistema solicitará la huella o la clave de desbloqueo para dar por válida la operación.

Si se van a soportar todas las opciones puede usarse alternativamente el protocolo INPaymentsDomainHandling.

Entrenamientos

Este sin duda tiene bastantes operaciones ya que nos permite realizar toda la operativa que podríamos buscar para gestionar nuestra app de entrenamiento físico (workouts).

Podemos iniciar el ejercicio, pausarlo, reanudarlo, terminarlo o cancelarlo (con lo que perderíamos los datos del mismo). Si nuestra app tiene definidos diferentes tipos de entrenamiento con la definición que hayamos querido darle, podremos invocarlo específicamente a través del diccionario que proporcione la app, como cuando llamamos a una persona en una agenda propia de una app de llamadas.

  • Comenzar un entrenamiento: Protocolo INStartWorkoutIntentHandling, intención en objeto INStartWorkoutIntent, respuesta en el objeto INStartWorkoutIntentResponse.
  • Pausar un entrenamiento: Protocolo INPauseWorkoutIntentHandling, intención en objeto INPauseWorkoutIntent, respuesta en el objeto INPauseWorkoutIntentResponse.
  • Reanudar un entrenamiento: Protocolo INResumeWorkoutIntentHandling, intención en objeto INResumeWorkoutIntent, respuesta en el objeto INResumeWorkoutIntentResponse.
  • Finalizar un entrenamiento: Protocolo INEndWorkoutIntentHandling, intención en objeto INEndWorkoutIntent, respuesta en el objeto INEndWorkoutIntentResponse.
  • Cancelar un entrenamiento: Protocolo INCancelWorkoutIntentHandling, intención en objeto INCancelWorkoutIntent, respuesta en el objeto INCancelWorkoutIntentResponse.

Si se van a soportar todas las opciones puede usarse alternativamente el protocolo INWorkoutsDomainHandling.

Transporte

Cualquier app que ofrezca servicios de transporte, y que permita encargar un recorrido con seguimiento del mismo, podrá utilizar Siri para realizar las operaciones básicas: encargar un recorrido, obtener un listado de desplazamientos disponibles y preguntar por el estado de un transporte encargado.

De esta forma podremos pedir en la zona donde estemos si tenemos un transporte cercano (Uber, taxis con este servicio o demás), elegir aquel que queramos y preguntar por el tiempo que queda para que llegue (por ejemplo).

  • Listado de transportes disponibles: Protocolo INListRideOptionsIntentHandling, intención en objeto INListRideOptionsIntent y respuesta en el objeto INListRideOptionsIntentResponse.
  • Encargar un transporte: Protocolo INRequestRideIntentHandling, intención en objeto INRequestRideIntent y respuesta en el objeto INRequestRideIntentResponse.
  • Consultar estado de un transporte encargado: Protocolo INGetRideStatusIntentHandling, intención en objeto INGetRideStatusIntent y respuesta en el objeto INGetRideStatusIntentResponse.

Es importante entender que estas intenciones en concreto, pueden ser invocadas tanto desde Siri como desde la nueva app de Mapas y sus extensiones. Por lo tanto, las mismas servirán para que Siri nos busque un transporte, lo encargue o nos diga el estado de dicho encargo y servirán también para realizar la pertinente acción desde las nuevas extensiones de mapas. La posible extensión de visualización que creemos, se mostraría tanto en Siri como en Maps, dependiendo de dónde haya sido invocada.

Si se van a soportar todas las opciones puede usarse alternativamente el protocolo INRidesharingDomainHandling.

CarPlay

Aparte de lo ya comentado en cuanto a apps, SiriKit permitirá una mejor integración en coches a través de CarPlay, de forma que podremos pedirle a Siri que nos haga determinadas acciones dentro de nuestro coche: cambiar la fuente de sonido del coche (radio, CD, MP3, externo…), cambiar las opciones del climatizador, cambiar las opciones de los dispositivos antihielo o antivaho, cambiar la temperatura del asiento (siempre que tengamos asientos calefactables, obviamente) y cambiar la estación de radio que escuchamos.

En este caso tendrían que ser las marcas de coches las que permitieran esta interactividad y lanzaran los procesos pertinentes, a través de CarPlay, para que se realicen estas acciones. Requiere que el vehículo soporte CarPlay y sus interacciones.

  • Cambiar la fuente de audio: Protocolo INSetAudioSourceInCarIntentHandling, intención en objeto INSetAudioSourceInCarIntent, respuesta en el objeto INSetAudioSourceInCarIntentResponse.
  • Cambiar la configuración del climatizador: Protocolo INSetClimateSettingsInCarIntentHandling, intención en objeto INSetClimateSettingsInCarIntent, respuesta en el objeto INSetClimateSettingsInCarIntentResponse.
  • Cambiar la configuración de dispositivos anti-hielo: Protocolo INSetDefrosterSettingsInCarIntentHandling, intención en objeto INSetDefrosterSettingsInCarIntent, respuesta en el objeto INSetDefrosterSettingsInCarIntentResponse.
  • Cambiar la temperatura del asiento: Protocolo INSetSeatTemperatureInCarIntentHandling, intención en objeto INSetSeatTemperatureInCarIntent, respuesta en el objeto INSetSeatTemperatureInCarIntentResponse.
  • Cambiar la estación de radio: Protocolo INSetRadioStationIntentHandling, intención en objeto INSetRadioStationIntent, respuesta en el objeto INSetRadioStationIntentResponse.

Si se van a soportar todas las opciones que tienen que ver con funciones del coche puede usarse alternativamente el protocolo INCarPlayDomainHandling y si usamos ambas funciones de control de la radio del mismo (fuente y estación de radio) podemos usar igualmente el protocolo unificado INRadioDomainHandling.

Conclusiones

Estas son todas nuestras posibilidades, con la versión 10.0 de iOS, para implementar Siri en nuestras apps. No podremos hacer nada más, por ahora, y si intentamos hacer uso de estos dominios e intenciones en una app que Apple considere que no cumple con los requisitos expuestos, tendrán libertad para rechazarla (o la actualización que subamos para incorporar SiriKit).

Por lo tanto es una implementación que hemos de pensar muy bien y valorar, en cuanto a estar seguros que entramos dentro del selecto grupo de desarrolladores que pueden aprovechar estas funciones. Si lo analizamos fríamente, parece como si Apple hubiera decidido en un principio implementar solo funciones con nombres y apellidos muy concretos (de apps) para conseguir una mejor integración de Siri en el sistema y que los usuarios se beneficien de estas integraciones. En un principio, no parece pensar en los desarrolladores que quieran, por cualquier motivo, aprovechar la interactividad que proporciona Siri en sus propios desarrollos (sea cual sea el tipo de los mismos).

Eso no quita que nuestra app no pueda entrar en el selecto club porque tenga alguna funcionalidad que sea susceptible de ser implementada mediante el listado dado de dominios e intenciones. Un listado que, entendemos, se verá ampliado en posteriores versiones cuando Apple comience a ver y valorar el uso que los usuarios le den a estos nuevos servicios.

Eso sí, nada nos impide crear un proyecto de ejemplo, trastear, probar y ver qué pasa. Un saludo y Good Apple Coding.

Acerca de Julio César Fernández

Analista, consultor y periodista tecnológico, desarrollador, empresario, productor audiovisual, actor de doblaje e ingeniero de vídeo y audio.

Otras recomendaciones

Swift4 (I)

Swift 4 (I), compatibilidad y otras mejoras

Revisamos Swift 4 ahora que hemos podido ver su lanzamiento oficial junto a Xcode 9, pieza fundamental. Además explicamos su proyección de compatibilidad y la estabilidad del lenguaje de cara al futuro inmediato. ¿Tengo que migrar? ¿No? ¿Qué supone? ¿Funciona Swift 3 en Xcode 9? Todas las preguntas que se pueden hacer sobre compatibilidad de Swift 4 y Xcode 9, resueltas y explicadas junto a otros importantes cambios en el lenguaje.