Sitio web de resúmenes de películas - E-sports - Análisis detallado del marco SiriKit (5) - Guía de programación: Intents y extensión de interfaz de usuario de Intents (1)

Análisis detallado del marco SiriKit (5) - Guía de programación: Intents y extensión de interfaz de usuario de Intents (1)

SiriKit es una forma de proporcionar contenido a través de Siri. También le permite agregar soporte para servicios a su aplicación Maps. Para admitir SiriKit, puede utilizar el marco Intents y el marco Intents UI para implementar una o más extensiones y luego incluir estas extensiones en su aplicación iOS. Cuando los usuarios solicitan tipos específicos de servicios a través de Siri o Maps, su extensión se utiliza para proporcionar esos servicios.

Agregue compatibilidad con SiriKit solo si su aplicación implementa uno de los siguientes tipos de servicios:

Los fabricantes de automóviles pueden usar intenciones de CarPlay para permitir a los usuarios controlar las funciones del automóvil mediante comandos de voz.

Cada tipo de servicio representa un dominio de funcionalidad que usted puede admitir, y cada dominio define una o más intenciones que usted debe admitir. Una intención es un objeto que representa la intención del usuario. Siri y Maps crean objetos de intención en respuesta a las solicitudes de los usuarios y los completan con cualquier información especificada por el usuario. Por ejemplo, la intención de enviar un mensaje puede incluir el destinatario y el contenido del mensaje. Utilice objetos de intención para proporcionar respuestas adecuadas y realizar tareas relacionadas. Para obtener más información sobre los dominios admitidos y sus intenciones, consulte Dominios de intenciones.

Siri y Maps interactúan con los servicios de tu aplicación a través de dos tipos diferentes de extensiones:

Debes proporcionar una extensión Intents para admitir SiriKit. Su extensión Intents es responsable de manejar los intents y proporcionar información que Siri y Maps pueden usar para comunicarse con el usuario. Proporcionar una extensión de interfaz de usuario de Intents es opcional, pero la forma de interactuar con su aplicación a través de Siri les resultará familiar a sus usuarios. Por ejemplo, la extensión Intents UI puede mostrar pancartas y otra información específica de la aplicación para reforzar que su aplicación está brindando una respuesta.

Para obtener información sobre las clases utilizadas para implementar extensiones de Intents, consulte la Referencia del marco de Intents. Para obtener información sobre los protocolos utilizados para implementar extensiones de UI de Intents, consulte Referencia del marco de UI de Intents.

Siri maneja el procesamiento del lenguaje y el análisis semántico necesarios para convertir la solicitud de voz de un usuario en una intención procesable que la extensión pueda manejar. Las aplicaciones Siri y Maps gestionan todas las interacciones del usuario y muestran los resultados al usuario mediante interfaces estándar del sistema. Su función es principalmente proporcionar los datos que se mostrarán. Si su aplicación incluye la extensión Intents UI, también puede proporcionar una interfaz personalizada para complementar la interfaz predeterminada del sistema.

Las reservas de viajes y de restaurantes se gestionan principalmente mediante la aplicación Maps, aunque los usuarios también pueden utilizar Siri para reservar viajes. Su extensión Intents maneja las interacciones que se originan en la aplicación Maps de la misma manera que maneja las solicitudes de Siri. Si personaliza la interfaz de usuario, su extensión Intents UI se puede configurar de manera diferente dependiendo de si la solicitud proviene de Siri o Maps.

Siri y Maps interactúan con tu aplicación a través de tu extensión Intents. El punto de entrada para las extensiones Intents es el objeto INExtension, cuyo único trabajo es señalar a Siri un objeto que pueda responder a las solicitudes de los usuarios. Al implementar extensiones de Intents, a menudo se utilizan tres tipos de objetos:

Cuando su extensión tiene una intención que manejar, Siri le preguntará a su objeto INExtension si hay un objeto que pueda manejar la intención.

El objeto controlador puede ser del tipo que desee, pero debe implementar los métodos específicos necesarios para manejar una intención determinada. Cada intent tiene un protocolo asociado que su controlador debe adoptar. Los métodos del protocolo se dividen en tres grupos: métodos de resolución, métodos de confirmación y métodos de procesamiento. Puede implementar el método deseado y proporcionarle a Siri información sobre cómo planea manejar la intención.

La Figura 2-1 ilustra el flujo de alto nivel entre Siri y el objeto controlador en la extensión. En este ejemplo, cuando un usuario solicita reservar un viaje utilizando un servicio de reserva de viajes, Siri crea un objeto de intención con parámetros de viaje y lo envía al controlador. El controlador analiza los datos del objeto de intención en un valor que puede usarse para completar el viaje. Cuando se hayan resuelto todos los parámetros del viaje, Siri le pide al administrador que confirme cómo planea manejar la solicitud de viaje y realice cualquier verificación final. Durante la fase de confirmación, el controlador proporciona un objeto de respuesta que contiene los detalles del viaje que Siri puede mostrar al usuario. Si el usuario acepta el viaje, Siri le pide al administrador de solicitudes de viaje que maneje la intención. El gestor responde reservando el vehículo y respondiendo con los datos del vehículo reservado.

Para obtener información general sobre cómo crear extensiones, consulta la Guía de programación de extensiones de aplicaciones.

Para admitir SiriKit, agregue la extensión Intents a su aplicación iOS.

La plantilla de extensión Intents proporcionada por Xcode contiene una subclase INExtension que puede personalizar. Puede utilizar esta clase para crear los objetos de controlador necesarios para manejar la intención. Siri usa el archivo Info.plist de su extensión para descubrir las intenciones que admite. El archivo Info.plist proporcionado por Xcode es principalmente configuración, pero debe modificar partes del mismo para especificar la intención del procesamiento de la extensión.

Esta clave es obligatoria. Puede admitir todas o algunas de las intenciones en un dominio determinado y su extensión puede admitir cualquier cantidad de dominios. El valor debe contener todas las clases de intención admitidas por la extensión.

Esta clave es opcional. Este valor contiene un subconjunto de las clases de intención que necesita para desbloquear el dispositivo. Se puede incluir una intención en esta lista si la intención de procesamiento implica acceder a un archivo protegido en el disco o manipular datos confidenciales del usuario.

La implementación del comportamiento extendido implica las siguientes tareas:

Para obtener una lista de intents disponibles y las clases y protocolos asociados implementados para cada intent, consulte Dominios de intents.

Antes de usar la extensión Intents y antes de registrar cualquier vocabulario específico del usuario, tu aplicación iOS debe solicitar autorización para usar Siri. Para solicitar autorización, haga lo siguiente:

Cuando su aplicación iOS llame al método requestSiriAuthorization: por primera vez, el sistema mostrará una ventana emergente de alerta solicitando al usuario que autorice su aplicación. La ventana emergente incluye la cadena de descripción de uso que proporciona en la clave NSSiriUsageDescription del archivo Info.plist de su aplicación. Los usuarios pueden aprobar o rechazar la solicitud de autorización de su aplicación y luego pueden cambiar el estado de autorización de su aplicación en la aplicación Configuración. El sistema recuerda el estado de autorización de su aplicación para que las llamadas posteriores al método requestSiriAuthorization: no vuelvan a avisar al usuario.

Su extensión Intents es un proxy que se ejecuta en nombre de su aplicación y debería poder realizar los mismos servicios que su aplicación.

Debido a que su aplicación iOS y las extensiones Intents realizan muchas de las mismas tareas, considere lo siguiente:

Para probar una extensión Intents, debe estar ejecutándose en el dispositivo. Xcode admite el lanzamiento de extensiones Intents directamente desde un proyecto Xcode y su depuración mientras se ejecuta en el dispositivo.

Cuando agregas una extensión Intents a tu proyecto, Xcode crea automáticamente un esquema que ejecuta la extensión.

No puedes depurar extensiones de Intents en el emulador.

Xcode crea tus aplicaciones y extensiones, las instala en el dispositivo e inicia Siri.

Es posible que Siri no reconozca inmediatamente la extensión de tu aplicación cuando la instalas por primera vez. Es posible que deba esperar unos minutos antes de emitir cualquier comando relevante. Asimismo, al actualizar el archivo Info.plist, es posible que tengas que esperar unos minutos para que Siri reconozca los cambios.

Tu aplicación para iOS utiliza el marco Intents para realizar tareas específicas:

El usuario puede configurar un idioma diferente para Siri que el del resto del dispositivo. En las aplicaciones de iOS, el sistema recupera contenido localizado utilizando la configuración de idioma específica del dispositivo. En la extensión Intents, el sistema utiliza el idioma Siri para recuperar contenido localizado. Si su aplicación comparte contenido localizado con una extensión, debe compartir ese contenido usando el idioma Siri, que su aplicación puede recuperar usando el método siriLanguageCode de la clase INPreferences.

Para obtener más información sobre cómo obtener el idioma Siri, consulte la Referencia de clases de INPreferences.

En la extensión Intents, los objetos controladores realizan el trabajo crítico de analizar, validar y procesar los objetos intent enviados por Siri. Cada objeto de intención tiene un protocolo asociado diseñado específicamente para manejar esa intención. Por ejemplo, el controlador del objeto INRequestRideIntent adopta el protocolo INRequestRideIntentHandling.

Los métodos de cada protocolo se dividen en tres grupos:

Al implementar un controlador, siempre debes implementar métodos que manejen intenciones. Todos los demás métodos son opcionales pero recomendados. Los métodos de resolución y validación son su oportunidad de verificar el contenido de la intención antes de intentar procesarla. También puede utilizar estos métodos para identificar o crear objetos de datos internos necesarios para procesar la intención.

Consulte Dominios de intenciones para obtener una lista de intenciones y los protocolos de manejo de intenciones correspondientes.

Durante la fase de resolución de intenciones, Siri le pide a su administrador que analice los parámetros clave y confirme los valores que pretendía utilizar. Debido a que los datos de los usuarios se hablan, es posible que falte información o que esté oscurecida. La fase de resolución es tu oportunidad de verificar los datos proporcionados y avisar a Siri si necesitas aclaraciones o más información. Se recomienda implementar todos los métodos de resolución para un protocolo de controlador determinado. Si bien es posible que no utilices todos los parámetros, cada método le dice a Siri si encontraste el valor apropiado en su propia estructura de datos.

Los resultados de la resolución se devuelven a SiriKit utilizando un objeto de resolución, que es una instancia de la clase INIntentResolutionResult. Es posible que necesites analizar diferentes subclases para cada tipo de parámetro. Por ejemplo, al resolver un contacto como un objeto INPerson, se devuelve una instancia de la clase INPersonResolutionResult. Al crear una instancia de una subclase, utilice el método de creación que corresponda al resultado del trabajo de análisis. La Tabla 3-1 enumera los posibles resultados y explica cuándo utilizar cada resultado.

Tabla 3-1 Posibles resultados al resolver los parámetros de intención

Al resolver los parámetros de intención, intente alcanzar una resolución exitosa lo más rápido posible. Solicitar más información da como resultado una interacción adicional del usuario y llamadas adicionales a los controladores, lo que provoca retrasos y potencialmente frustra al usuario. En su lugar, intente elegir valores que tengan sentido según los patrones y hábitos del usuario, y solo solicite desambiguación o confirmación cuando sea necesario.

El Listado 3-1 muestra un ejemplo de una aplicación de reserva de viaje que valida el lugar de entrega de un viaje. Si existe una ubicación de entrega, este método devuelve un resultado exitoso; de lo contrario, este método devuelve un resultado que indica que el valor es obligatorio;