Como otimizar o conteúdo contextual para o Google Assistente

O Android 6.0 Marshmallow apresenta uma nova maneira para os usuários interagirem com aplicativos por meio do assistente como o Google Google Assistente. O assistente é uma janela de nível superior que os usuários podem visualizar para obter ações relevantes para a atividade atual. Essas ações podem incluir links diretos para outros apps no o dispositivo.

Os usuários ativam o Assistente tocando no botão home e mantendo-o pressionado ou dizendo um frase-chave. Em resposta, o sistema abre uma janela principal que exibe contexto ações relevantes.

Um app do Assistente, como o Google Assistente, implementa a janela sobreposta do Assistente usando uma chamado Now a um toque, que funciona com a funcionalidade da plataforma Android. O sistema permite que o usuário selecione um aplicativo assistente, que obtém informações contextuais de seu aplicativo usando a API Assist do Android.

Este guia explica como os apps Android usam a API Assist para melhorar o assistente experiência do usuário. Para aprender a criar um app de música para iniciar o Google Assistente e controle, consulte Google Assistente e apps de mídia.

Como usar o Assistente

A Figura 1 ilustra uma interação comum do usuário com o Assistente. Quando o usuário toca e o mantém pressionado o botão home, os callbacks da API Assist são invocados no app de origem (etapa 1). O Google Assistente renderiza a janela sobreposta (etapas 2 e 3), e, em seguida, seleciona a ação a ser executada. O Assistente executa a ação selecionada, como disparar uma intent com um link direto para o app de restaurante (destino) (etapa 4).

Figura 1. Exemplo de interação do Google Assistente com o recurso "Now a um toque" de o Google app

Os usuários podem configurar o Assistente selecionando Configurações > Aplicativos > Aplicativos padrão > Assistência e entrada de texto por voz. Os usuários podem alterar as opções do sistema, como acessar o conteúdo da tela como texto e acessando uma captura de tela, conforme mostrado na Figura 2.

Figura 2. Configurações de "Assistente e entrada por voz"

App de origem

Para garantir que seu app funcione com o assistente como uma fonte de informações para o usuário, faça o seguinte: você só precisa seguir melhorias de acessibilidade práticas recomendadas de autenticação. Esta seção descreve como fornecer informações adicionais para ajudar a melhorar a experiência do usuário com o Assistente e também que precisam de tratamento especial, como visualizações personalizadas.

Compartilhar mais informações com o Assistente

Além de texto e captura de tela, seu app pode compartilhar outras informações com o assistente. Por exemplo, suas músicas pode optar por passar informações do álbum atual para que o assistente possa sugerir ações mais inteligentes, adaptadas à atividade atual. As APIs Assist não fornecem controles de mídia. Para adicionar controles de mídia, consulte Google Assistente e apps de mídia.

Para dar mais informações ao assistente, seu app oferece contexto de aplicativo global registrando um listener de app e fornece informações específicas da atividade com callbacks da atividade, conforme mostrado em Figura 3:

Figura 3. Diagrama de sequência do ciclo de vida da API Assist

Para fornecer contexto de aplicativo global, o aplicativo cria uma implementação de Application.OnProvideAssistDataListener e o registra usando registerOnProvideAssistDataListener(). Para fornecer informações contextuais específicas da atividade, a atividade substitui onProvideAssistData() e onProvideAssistContent(). Os dois métodos de atividade são chamados após o método global opcional é invocado. Como os callbacks são executados na linha de execução principal, eles precisam concluir imediatamente. Os callbacks são invocados apenas quando a atividade está em execução.

Fornecer contexto

Quando o usuário ativa o Assistente, onProvideAssistData() é chamado para criar um ACTION_ASSIST com todo o contexto da aplicativo atual representado como uma instância de AssistStructure. Você pode substituir esse método para colocar tudo o que quiser no pacote apareça na EXTRA_ASSIST_CONTEXT parte da intent de assistência.

Descrever conteúdo

Seu app pode implementar onProvideAssistContent() para melhorar a experiência do usuário com o Assistente, fornecendo referências relacionadas ao conteúdo relacionadas à atividade atual. Você pode descrever o conteúdo do app usando o vocabulário comum definido pelo site Schema.org usando um objeto JSON-LD. No exemplo abaixo, um app de música oferece dados estruturados para descrever o álbum de música que o usuário está atualmente visualização:

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);
}

Você também pode melhorar a experiência do usuário com implementações personalizadas de onProvideAssistContent(), o que pode oferecer os seguintes benefícios:

Observação : os apps que usam uma implementação de seleção de texto personalizada provavelmente vão precisar para implementar onProvideAssistContent() e chamar setClipData().

Implementação padrão

Se nem a onProvideAssistData() nem a onProvideAssistContent() é implementado, o sistema ainda prossegue e transmite a informações coletadas automaticamente para o assistente, a menos que é sinalizada como segura. Como mostrado na Figura 3, o sistema usa as implementações padrão de onProvideStructure() e onProvideVirtualStructure() para coletar textos e visualizar informações de hierarquia. Se a sua visualização implementar desenho de texto, substitua onProvideStructure() para fornecer o assistente com o texto mostrado ao usuário chamando setText(CharSequence).

Na maioria dos casos, implementar o suporte à acessibilidade permite que para conseguir as informações necessárias. Para implementar o suporte à acessibilidade, observar as práticas recomendadas descritas em Como criar aplicativos Acessível, incluindo o seguinte:

Excluir visualizações de assistentes

Para gerenciar informações sensíveis, o app pode excluir a visualização atual do Assistente definindo o parâmetro de layout FLAG_SECURE da WindowManager. Defina FLAG_SECURE explicitamente para cada janela criada pela atividade, incluindo caixas de diálogo. Seu app também pode usar setSecure() para excluir uma superfície do Assistente. Não há mecanismo global (nível do app) para excluir todas as visualizações do assistente. Observação que FLAG_SECURE não faça com que os callbacks da API Assist sejam interrompidos disparando. A atividade que usa FLAG_SECURE ainda pode explicitamente fornecer informações a um app assistente usando os callbacks descritos anteriormente. neste guia.

Observação: para contas corporativas (Android for Work), o administrador pode desativar a coleta de dados do Assistente para o perfil de trabalho usando o método setScreenCaptureDisabled() da API DevicePolicyManager.

Interações por voz

Os callbacks da API Assist também são invocados frase-chave detecção. Para mais informações, consulte a Voz Actions.

Considerações sobre a ordem Z

Um assistente usa uma janela sobreposta leve exibida na parte superior atividade atual. Como o usuário pode ativar o assistente a qualquer momento, não criar permanentes alerta do sistema que interferem na janela de sobreposição, como mostrado em Figura 4.

Figura 4. Ordem Z da camada de assistência

Se seu aplicativo usa alerta do sistema, remova-as imediatamente porque ao deixá-las prejudica a experiência do usuário.

App de destino

Os apps do Assistente costumam usar os links diretos para encontrar apps de destino. Para tornar seu um possível app de destino, considere adicionar suporte a links diretos. O modelo entre o contexto atual do usuário e os links diretos ou outras possíveis ações exibidas no (mostrada na etapa 3 na Figura 1) é específica para a implementação do Google Assistente. Para exemplo, o app Google Assistente usa links diretos e links de apps para: direcionar tráfego para aplicativos de destino.

Implementar o próprio assistente

Você pode implementar o próprio assistente. Conforme mostrado na Figura 2, o usuário pode selecionar o app assistente ativo. A O app assistente precisa fornecer uma implementação de VoiceInteractionSessionService e VoiceInteractionSession, como mostrado em este exemplo de VoiceInteraction. Isso também requer a permissão BIND_VOICE_INTERACTION. O assistente pode recebem o texto e a hierarquia de visualização representada como uma instância de AssistStructure em onHandleAssist(). Ele recebe a captura de tela por meio do onHandleScreenshot().