Cómo optimizar el contenido contextual del Asistente

Android 6.0 Marshmallow presenta una nueva forma para que los usuarios interactúen con las apps a través del asistente aplicaciones, como la Google Asistente El asistente es una ventana de nivel superior que los usuarios pueden ver para obtener acciones relevantes para la actividad actual. Estas acciones pueden incluir vínculos directos a otras apps en el dispositivo.

Los usuarios pueden activar el Asistente manteniendo presionado el botón de inicio o diciendo un frase clave. En respuesta, el sistema abre una ventana de nivel superior que se muestra contextualmente acciones relevantes.

Una app de asistencia, como Asistente de Google, implementa la ventana superpuesta del Asistente a través de una llamada Now on Tap, que es compatible con la funcionalidad de nivel de plataforma de Android. El sistema permite al usuario seleccionar una aplicación del Asistente, que obtiene información contextual de tu aplicación mediante API de Assist de Android.

En esta guía, se explica cómo las apps para Android usan la API de Assist de Android para mejorar el asistente la experiencia del usuario. Aprende a crear una app de música para que Asistente pueda iniciar y control, consulta Asistente de Google y apps de música.

Cómo usar los asistentes

En la Figura 1 se ilustra una interacción típica entre el usuario y el Asistente. Cuando el usuario mantiene presionado el botón Inicio, se invocan las devoluciones de llamada de la API de Assist en la app source (paso 1). El asistente renderiza la ventana superpuesta (pasos 2 y 3). y, luego, el usuario selecciona la acción que va a realizar. El Asistente ejecuta la acción seleccionada. como activar un intent con un vínculo directo a la app del restaurante (destino) (paso 4).

Figura 1: Ejemplo de interacción del Asistente con la función Now on Tap de Google app

Para configurar el asistente, los usuarios deben seleccionar Configuración > Aplicaciones > Apps predeterminadas > Asistencia y entrada de voz. Los usuarios pueden cambiar las opciones del sistema, como acceder el contenido de la pantalla como texto y cómo acceder a una captura de pantalla, como se muestra en la Figura 2.

Figura 2: Configuración de asistencia y entrada de voz

App de origen

Para asegurarte de que tu app funcione con el Asistente como fuente de información para el usuario, solo debes seguir las prácticas recomendadas prácticas recomendadas. En esta sección, se describe cómo proporcionar información adicional para ayudar a mejorar la experiencia del usuario con el Asistente, así como las situaciones que necesitan un control especial, como vistas personalizadas.

Compartir información adicional con el Asistente

Además del texto y la captura de pantalla, tu app puede compartir otra información con el asistente. Por ejemplo, tu música la app puede pasar la información del álbum actual para que el asistente pueda sugerir acciones más inteligentes según la actividad actual. Ten en cuenta que las APIs de Assist no proporcionan controles multimedia. Para agregar controles multimedia, consulta Asistente de Google y apps de música.

Para proporcionarle información adicional al asistente, tu app brinda el contexto de aplicación global registrando un objeto de escucha de la app y proporciona información específica de la actividad con devoluciones de llamada de actividad, como se muestra en Figura 3:

Figura 3: Diagrama de la secuencia del ciclo de vida de la API de Assist

Para brindar un contexto de aplicación global, la app crea una implementación de Application.OnProvideAssistDataListener y lo registra. usando registerOnProvideAssistDataListener(). Para proporcionar información contextual específica de la actividad, la actividad anula onProvideAssistData() y onProvideAssistContent(). Se llama a los dos métodos de actividad después de la búsqueda global opcional se invoca la devolución de llamada. Debido a que las devoluciones de llamada se ejecutan en el subproceso principal, deben completar de inmediato. Las devoluciones de llamada se invocan solamente cuando la actividad se está ejecutando.

Cómo proporcionar contexto

Cuando el usuario activa el Asistente, Se llama a onProvideAssistData() para compilar un El intent ACTION_ASSIST con todo el contexto de la aplicación actual representada como una instancia de AssistStructure. Puedes anular este método para colocar todo lo que quieras en el paquete para que aparezca en el Es la parte EXTRA_ASSIST_CONTEXT del intent de asistencia.

Cómo describir contenido

Tu app puede implementar onProvideAssistContent() para mejorar la experiencia del usuario con el Asistente proporcionando referencias relacionadas con el contenido relacionadas con la actividad actual. Puedes describir el contenido de la app usando el vocabulario común definido por Schema.org a través de un objeto JSON-LD. En el siguiente ejemplo, una app de música proporciona Datos estructurados para describir el álbum de música que el usuario está en ese momento viendo:

Kotlin

override fun onProvideAssistContent(assistContent: AssistContent) {
    super.onProvideAssistContent(assistContent)

    val structuredJson: String = JSONObject()
            .put("@type", "MusicRecording")
            .put("@id", "https://example.com/music/recording")
            .put("name", "Album Title")
            .toString()

    assistContent.structuredData = structuredJson
}

Java

@Override
public void onProvideAssistContent(AssistContent assistContent) {
  super.onProvideAssistContent(assistContent);

  String structuredJson = new JSONObject()
       .put("@type", "MusicRecording")
       .put("@id", "https://example.com/music/recording")
       .put("name", "Album Title")
       .toString();

  assistContent.setStructuredData(structuredJson);
}

También puedes mejorar la experiencia del usuario con implementaciones personalizadas de onProvideAssistContent(), lo que puede proporcionar los siguientes beneficios:

Nota: Es probable que las apps que usan una implementación de selección de texto personalizada necesiten para implementar onProvideAssistContent() y llama a setClipData().

Implementación predeterminada

Si ni onProvideAssistData() ni onProvideAssistContent() se implementa la devolución de llamada, el sistema continúa y pasa información recopilada automáticamente al Asistente, a menos que el estado ventana se marca como segura. Como se muestra en la Figura 3, el sistema usa las implementaciones predeterminadas de onProvideStructure() y onProvideVirtualStructure() para recopilar texto y ver información de jerarquía. Si tu vista implementa dibujo de texto, anula onProvideStructure() para proporcionar el asistente con el texto que se muestra al usuario llamando a setText(CharSequence).

En la mayoría de los casos, implementar la asistencia de accesibilidad para obtener la información que necesita. Para implementar la asistencia de accesibilidad, sigue las prácticas recomendadas descritas en Creación de aplicaciones Accesible, que incluye lo siguiente:

Cómo excluir vistas de los asistentes

Para controlar información sensible, tu app puede excluir la vista actual del Asistente estableciendo el parámetro de diseño FLAG_SECURE de WindowManager Debes configurar FLAG_SECURE de forma explícita para cada ventana creada por la actividad, incluidos los diálogos. Tu app también puede usar setSecure() para excluir una superficie desde el Asistente. No hay mecanismo global (a nivel de la app) para excluir todas las vistas del Asistente Nota que FLAG_SECURE no haga que se detengan las devoluciones de llamada de la API de Assist se activa. La actividad que usa FLAG_SECURE aún puede explícitamente proporcionar información a una aplicación de asistencia mediante las devoluciones de llamada descritas anteriormente en esta guía.

Nota: Para cuentas empresariales (Android for Work), el administrador puede inhabilitar la recopilación de datos del asistente para el perfil de trabajo con el método setScreenCaptureDisabled() de la API de DevicePolicyManager

Interacciones de voz

Las devoluciones de llamada de la API de Assist también se invocan frase clave detección temprana de errores. Para obtener más información, consulta la Voz Actions.

Consideraciones del orden Z

Un asistente utiliza una ligera ventana superpuesta que se muestra en la parte superior de la actividad actual. Como el usuario puede activar el asistente en cualquier momento, no crear permanentes de alerta del sistema que interfieren con la ventana superpuesta, como se muestra en Figura 4:

Figura 4: Capa de orden Z del Asistente

Si tu aplicación utiliza del sistema, quítalas de inmediato porque las dejas en la pantalla degrada la experiencia del usuario.

App de destino

Por lo general, las apps del Asistente aprovechan los vínculos directos para encontrar apps de destino. Para que tu app como una posible app de destino, considera agregar compatibilidad con vínculos directos. La coincidencia entre el contexto del usuario actual y los vínculos directos u otras posibles acciones que se muestran en el ventana superpuesta (que se muestra en el paso 3 de la Figura 1) es específica de la implementación del Asistente de Google. Para ejemplo, la app del Asistente de Google usa vínculos directos y vínculos de apps para hacer lo siguiente: dirigir el tráfico a las apps de destino.

Cómo implementar tu propio Asistente

Es posible que quieras implementar tu propio Asistente. Como se muestra en la figura 2, el usuario puede seleccionar la app de Asistente activa. El La app del Asistente debe proporcionar una implementación de VoiceInteractionSessionService y VoiceInteractionSession, como se muestra en . este VoiceInteraction ejemplo. También requiere el permiso BIND_VOICE_INTERACTION. Luego, el asistente puede recibir el texto y la jerarquía de vistas representados como una instancia de AssistStructure en onHandleAssist(). Recibe la captura de pantalla a través de onHandleScreenshot().